将Raspberry Pi作为本地服务器,用于MongoDB和内部wiki(DevHub)
我想要一个共享笔记 (Wǒ
我想要一个可以在浏览器上使用的、适用于小型共享和备忘录的企业内部Wiki和聊天工具。
现在有很多服务可供选择,但是因为查找很麻烦,我决定利用多余的树莓派来使用我以前喜欢的DevHub。
整体上,这是一个有点过时的做法◎
-
- 軽量なwebサーバ
-
- すぐ編集できて履歴も残る共有Markdownメモ
-
- 通知のあるチャット
-
- 他のツールからAPIでもチャットに書ける
-
- 画像やファイルのドロップでのアップロード
- やろうと思えば自分で改造できる
这个老旧的开源软件虽然不太适合规模过大的开发团队,但对于大约10人左右的轻松开发团队来说非常合适。
我们使用的设备是Raspberry Pi 4 Model B。
最近好像供应不足,价格也一直在飙升…
虽然内心很想兜售掉,但毕竟是公司的资产,我们还是好好利用吧。
如何制定计划来创建
-
- オンプレミス
-
- サーバにするラズパイは社内の壁にでもくっつける
基本的に付けっぱなしで、再起動したら勝手にサーバ起動するように
MongoDB
DevHub
クライアントは社内の数名がブラウザから
バックアップは毎日深夜に社内のNASへ
建立过程
操作系统 → MongoDB → Node.js → DevHub → 备份机制的流程
可放入的东西。
以下是四个安装选项,包括操作系统。
-
- Raspberry Pi OS Lite
リリース: 2022-09-26 09:37
Debian GNU/Linux 11 (bullseye)
MongoDB 4.4
Nodejs (Latest)
DevHub 2.4 (Latest) (npm “mongodb” ^3.3.2 を含む)
DevHub使用的npm的MongoDB Driver版本过旧是导致MongoDB版本不是最新的原因。
根据DevHub的package.json文件,看起来Driver版本似乎是3.X.X。
"dependencies": {
~~~
"mongodb": "^3.3.2",
根据查看的MongoDB驱动程序与数据库的对照表,MongoDB本身似乎更适用于4.4版本。
目前似乎有MongoDB 6.1版本,所以要注意不要安装最新版本。
对照表:https://www.mongodb.com/docs/drivers/node/current/compatibility/
顺便一提,MongoDB 4.4的依赖项是64位和OpenSSL 1.1.1。
需要注意的是,某些操作系统可能无法提供此OpenSSL 1.1.1软件包。
通过调查,我们得知RpiOS LITE的最新版本默认使用了OpenSSL 1.1.1,所以没有问题。
https://lindevs.com/get-list-of-default-packages-on-raspberry-pi-os
树莓派OS精简版64位(发布日期:2022年09月26日 09:37)
使用Raspberry Pi Imager安装操作系统
使用Raspberry Pi Imager可以在安装时通过图形用户界面(GUI)设置wifi和SSH。只需触碰树莓派以外的电源,无需其他麻烦操作。
我按照这样的方式进行了设置。
在使用Bonjour进行主机名分配时,会自动附加.local后缀。
无论如何,通过下一个命令进行连接。
ssh pi@devpi.local
# -> pi@devpi:~$
MongoDB 4.4 => MongoDB 4.4版本
安装MongoDB
从这个教程中提取的部分
请提供以下内容在中文中的原生释义:
[MongoDB](https://www.mongodb.com/developer/products/mongodb/mongodb-on-raspberry-pi/)在树莓派上的安装指南。
sudo apt update
sudo apt upgrade
# Install the MongoDB 4.4 GPG key:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
# Add the source location for the MongoDB packages:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
# Download the package details for the MongoDB packages:
sudo apt-get update
# Install MongoDB:
sudo apt-get install -y mongodb-org
mongod: 将 MongoDB 的守护进程设置为服务,使用 systemctl。
sudo systemctl daemon-reload
sudo systemctl enable mongod
如果重新启动树莓派,并确认mongod已经启动,那就可以了。
sudo systemctl status mongod
顺便提一下,MongoDB的URI默认在没有进行认证的情况下启动是127.0.0.1:27017/。这次不需要知道URI。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。
sudo apt update
sudo apt install -y nodejs npm
开发枢纽
安装
wget https://github.com/volpe28v/DevHub/archive/refs/heads/master.zip
unzip master.zip
rm master.zip
cd DevHub-master
npm install
使用下列命令启动。
node app.js -d devhub_db -t "Deep Insight"
请访问http://devpi:3000,并确保其正常运行。如果能够进行写作/照片上传等操作就可以了。
恶魔化
为了像mongod一样将其守护进程化,可以使用forever。
npm install forever
# デーモン化するコマンド
forever start app.js -d devhub_db -t DeepInsight
# 確認
forever list
在树莓派启动时添加到crontab中(以完整路径写入)。
@reboot /usr/local/bin/forever start /home/pi/DevHub-master/app.js -d devhub_db -t DeepInsight
如果能在重新启动树莓派后访问http://devpi:3000,则表示正常。
备用机制
本次在公司内部有一个SAMBA的NAS,将数据备份到这个设备上。
挂载NAS
将NAS://STRAGE.local/share/DevPi/backupdir挂载到~/backupdir_mount,但不想使用sudo,需要考虑一些方法。
起動时以root权限挂载,备份时明确指定以pi权限挂载
sudo apt install -y cifs-utils
mkdir backupdir_mount
首先,在/etc/fstab中编写挂载设置描述。
# 追記
//STRAGE.local/share/DevPi/backupdir /home/pi/backupdir_mount cifs username=<USER>,password=<PASS>,users,vers=1.0 0 0
users: 全てのユーザにマウント/アンマウントを許可
vers=1.0はNASのcifsバージョンに従う
只要用户希望,在任何时间都可以用mount backupdir_mount/umount backupdir_mount来挂载backupdir_mount。如果能确认如下所示,那就是OK了。
ラズパイ再起動時には、所有者rootでマウントされていること
pi@devpi:~ $ ls -l
total 4
drwxr-xr-x 2 root root 0 Jan 19 23:33 backupdir_mount
drwxr-xr-x 10 pi pi 4096 Jan 19 19:20 DevHub-master
ユーザpiでもマウントできること
pi@devpi:~ $ mount backupdir_mount/
pi@devpi:~ $ ls -l
total 4
drwxr-xr-x 2 pi pi 0 Jan 19 23:33 backupdir_mount
drwxr-xr-x 10 pi pi 4096 Jan 19 19:20 DevHub-master
マウントした後、unmountすると、所有者がrootにもどること
pi@devpi:~ $ ls -l
total 4
drwxr-xr-x 2 root root 0 Jan 19 23:33 backupdir_mount
drwxr-xr-x 10 pi pi 4096 Jan 19 19:20 DevHub-master
在进行备份时,决定明确地使用用户pi进行挂载。
如何备份MongoDB数据库
mongodump命令
mongodump --db devhub_db
# devhub_db/ が生成される
DevHub的图像/上传文件备份方法
用户的图标和图片,以及上传的文件将保存在DevHub-master/static/uploads目录下,可以将其整个目录进行压缩。
# 圧縮
tar acvf uploads.tar.gz -C ~/DevHub-master/static uploads
# uploads.tar.gz が生成される
备份世代管理
我想每天早上4点进行备份,并保留7天的备份。
每次备份我会创建类似于20230119这样的日期命名的文件夹来进行保存。
保存的位置是已挂载的目录。
创作脚本 zuò
#!/bin/bash
cd /home/pi
# NASをユーザでマウント
mount backupdir_mount
pushd backupdir_mount
# 今回のバックアップディレクトリの名前
TODAY=`/bin/date '+%Y%m%d'`
# バックアップ
mongodump --db devhub_db --out ${TODAY}
tar acvf ${TODAY}/uploads.tar.gz -C ../DevHub-master/static uploads
# 古いバックアップを削除
NOKOSU_NUM=7
IFS=$'\n'
for dir in $(ls -t1 | tail -n +$(($NOKOSU_NUM+1))); do
rm -fr ${dir}
done
# アンマウント
popd
umount backupdir_mount
给予执行权限,并将其设置为crontab(用完整路径写)。
0 4 * * * /home/pi/run-backup.sh
完成
我们已经成功安装了简易的团队协作软件◎
恢复程序
假设有一天树莓派坏了,恢复的方法应该是…
重建环境
按照此文档使用全新的树莓派进行重构。
2. MongoDB恢复
聊天和维基是数据库,因此使用Mongo的倾倒文件来执行mongorestore命令。
# DB`devhub_d`に何か入っていれば、先にdropしておく必要がある
mongorestore --db devhub_db <dumpしたdevhub_db>
3. 上传数据
在DevHub上以拖放方式上传的文件将会被解压到原始位置上。
# 展開
tar axvf <バックアップしたuploads.tar.gz> -C ~/DevHub-master/static