思源笔记搭建并设置定时备份

本贴最后更新于 549 天前,其中的信息可能已经时移俗易

Docker 搭建思源笔记

Docker 搭建

docker run  --name siyuan  -idt  --restart=always -u $(id -u):$(id -g) -v /home/SiYuan:/home/SiYuan  -p 6806:6806 b3log/siyuan:v2.8.7  --workspace=/home/SiYuan

设置反向代理

如果不设置反向代理,那么域名就无法访问,并且还需要 ws 来保证长连接,否则会出现报错

image.png

ngnix

location /ws { 
proxy_pass http://127.0.0.1:6806;
proxy_read_timeout 60s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade'; 
}

apache

#PROXY-START/
<IfModule mod_proxy.c>
    ProxyRequests Off
    SSLProxyEngine on
    ProxyPass / http://ip:6806/
    ProxyPassReverse / http://ip:6806/
  
    ServerName $host
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.*)  ws://ip:6806/$1 [P,L]
    RewriteCond %{HTTP:Upgrade} !=websocket [NC]
    RewriteRule /(.*)  http://ip:6806/$1 [P,L]
    </IfModule>
#PROXY-END/

设置定时打包 Docker

利用服务器 Linux 的定时计划,结合 docker 打包成 tar 来实现定时备份

在 Linux 下添加定时任务可以使用 crontab 命令,具体步骤如下:

  1. 打开终端,输入 crontab -e 命令,进入编辑模式。
  2. 在编辑模式中添加以下一行命令:
0 4 * * * /bin/bash /var/log/siyuan/backup.sh

这个命令将在每天的凌晨 4 点执行 backup.sh

然后再在 /var/log/siyuan/backup.sh 写入

docker rmi siyuanlog 
docker commit de4fb69f5645  siyuanlog && docker save -o /var/log/siyuan/siyuanlog_$(date +%Y%m%d%H%M%S).tar siyuanlog && find /var/log/siyuan -type f -name "*.tar" -mtime +2 -exec rm {} +

这个命令序列首先尝试删除名为 "siyuanlog" 的 Docker 镜像,然后执行以下操作:

  1. 使用 docker commit 命令提交名为 "c40277f7884a" 的容器更改,并将结果镜像命名为 "siyuanlog"。
  2. 使用 docker save 命令将名为 "siyuanlog" 的镜像保存到一个文件。输出文件名基于当前的时间戳(年月日时分秒):/var/log/siyuan/siyuanlog_$(date +%Y%m%d%H%M%S).tar
  3. 执行 find 命令在 /var/log/siyuan 目录下查找以 .log 结尾、修改时间超过 2 天的文件。找到符合条件的文件后,使用一次 rm 命令将它们全部删除。

这三个操作都是通过 && 运算符连接的。这意味着只有在前一个命令成功执行后,后面的命令才会继续执行。如果任何步骤失败,后续步骤将不会执行。

这样,每天 0 点 0 分,就会自动将 id 为 c40277f7884a 的 docker 容器打包成镜像,并且保存为 tar 文件。

设置定时备份文件


# 定义源文件夹和目标文件夹
SOURCE_DIR="/home/SiYuan/data"
TARGET_DIR="/var/log/siyuan/datalog"

# 获取当前日期,用于创建命名压缩文件
DATE=$(date +"%Y-%m-%d")

# 创建目标文件夹,如果不存在
mkdir -p "$TARGET_DIR"

find $TARGET_DIR -type f -name "data_*" -mtime +2 -exec rm {} +
# 压缩源文件夹为tar.gz格式
tar -czvf "$TARGET_DIR/data_backup_$DATE.tar.gz" -C "$SOURCE_DIR" .

echo "Backup of $SOURCE_DIR completed and saved to $TARGET_DIR/data_backup_$DATE.tar.gz"

效果

image

image

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22337 引用 • 89380 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • QIUQ

    👍 多谢分享

  • 太复杂了这个。

    你还不如在本地 linux 服务器上搭建一个 minio(利用 docker),然后把 siyuan 同步到 minio 的 s3 存储 bucket 中。

  • kaho

    可以尝试下用 kopia 做快照备份,我是每小时备份到 OneDrive

  • LyZane

    关于数据备份,我觉得可以写一个脚本定时 push 到 git 仓库,还能保留历史版本,岂不美哉。