将Raspberry Pi作为本地服务器,用于MongoDB和内部wiki(DevHub)

我想要一个共享笔记 (Wǒ

我想要一个可以在浏览器上使用的、适用于小型共享和备忘录的企业内部Wiki和聊天工具。

现在有很多服务可供选择,但是因为查找很麻烦,我决定利用多余的树莓派来使用我以前喜欢的DevHub。
整体上,这是一个有点过时的做法◎

 

2023-01-20_20h57_32.jpg
    • 軽量な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。只需触碰树莓派以外的电源,无需其他麻烦操作。

我按照这样的方式进行了设置。

2023-01-18_19h57_22.jpg

在使用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
广告
将在 10 秒后关闭
bannerAds