Leanote 不得不说还是建立私有笔记服务的比较好的选择之一。
我的部署服务通过二进制应用直接部署在服务器上,MongoDB 通过 Docker 部署在服务器上。
这样做发现备份是不能直接通过后台对数据库进行备份的。
所以,有了此文 😊
环境假设
假设我这边的目录设定是这样的
Leanote 安装在 /data/app
目录中,名字就是 leanote
。
我的备份文件计划存储在 /data/app/leanote_dbdump/
目录中。
MongoDB 的 Docker 配置和启动文件我都存储在了 /data/cells/mongo
目录中。
备份数据,以每天为一个单位,(通过定时任务完成每天的数据自动备份和打包),存储至备份文件目录中。
备份脚本
数据库备份脚本文件 /data/app/leanote_dbdump/dbbak.sh
。内容如下
#!/bin/bash
# 用于 Leanote 的 mongodb 通过 Docker 部署时,备份数据库的脚本
IMAGE="mongo" # MongoDB 镜像名称
VERSION=":latest" # MongoDB 镜像的版本
NAME="mongo" # MongoDB 启动的容器名称
# 检查实例是否启动
EXISTS=$(docker ps | grep "$IMAGE$VERSION" | wc -l)
if [ $EXISTS -eq 0 ]
then
# 未启动实例时,不进行备份
echo "... instance of [$IMAGE$VERSION], now stoped, pless start it manually!"
exit
fi
# 开始备份 ...
# Leanote 数据库备份的存放位置
LEANOTE_BACKUP="/data/app/leanote_dbdump"
# 获取当前日期的目录名称
TIMESTAMP=$(date +"%Y%m%d")
# 设置数据库备份导出目录地址 BAK_DIR
MONGO_ROOT="/data/cells/mongo" # Docker 配置目录
DATA_DIR="$MONGO_ROOT/export" # Docker 配置目录中的一个导出目录
BAK_DIR="$DATA_DIR/$TIMESTAMP" # 最终脚本使用的导出目录地址
# [core] 进入 MongoDB 的 Docker 容器对数据库进行备份
docker run \
-it \
--link $NAME:mongo \
-v $BAK_DIR:/mnt \
$NAME \
sh -c 'exec mongodump --host $MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT -d leanote -o /mnt'
# 对数据库备份打包
cd $DATA_DIR
# 保存至设定的位置
tar czvf $LEANOTE_BACKUP/$TIMESTAMP.tar.gz -C $DATA_DIR $TIMESTAMP
# 清理当前导出的数据库版本
rm -Rf $BAK_DIR
cd -
手工测试一下
cd /data/app/leanote_dbdump
chmod +x dbbak.sh
./dbbak.sh
会发现在 /data/app/leanote_dbdump/
目录下,就多出一个以当前日期为名称的导出的数据库压缩包文件。
设置定时任务
crontab -e
在定时任务列表中添加
0 1 * * * /data/app/leanote_dbdump/dbbak.sh
这样就OK了。
暂时没有恢复需要。等未来需要有恢复功能的时候,看看再写一个基于 TUI 的功能手工选择恢复吧。