华为云OBS备份
- 每天凌晨 2:30 打包 思源数据卷 + 思源镜像
- 生成 2 个
.tar.gz
文件 - 自动上传到 华为云 OBS(或群晖 NAS)
- 本地/云端各保留最近 30 天
- 恢复命令也一并给出
🧩 1 前置准备(只做一次)
- 在华为云控制台 → 对象存储服务 OBS → 创建 Bucket(如
siyuan-backup
)。 - 下载 obsutil 并放到
/usr/local/obsutil/obsutil
,赋执行权限:
chmod +x /usr/local/obsutil/obsutil
- 初始化配置(只需一次):
/usr/local/obsutil/obsutil config -i=你的AK -k=你的SK -e=https://obs.cn-south-1.myhuaweicloud.com`
> # 配置详细流程
>
> 一步一步来,3 分钟搞定。
>
> #### ① 下载 obsutil 可执行文件
>
> 在宝塔终端(或 SSH)里执行:
>
> bash > # 创建目录 > sudo mkdir -p /usr/local/obsutil > cd /usr/local/obsutil > > # 下载Linux AMD 64位(Linux x86 64位): > wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz > # 解压 > tar -xzvf obsutil_linux_amd64.tar.gz >
>
>> 如果下载慢,可手动把文件上传到 /usr/local/obsutil/
,文件名保持 obsutil 即可。
>>
>
> #### ② 赋可执行权限
>
> bash > # 进入obsutil所在目录。“x.x.x”表示obsutil的版本号。 > cd obsutil_linux_amd64_x.x.x > > # 执行以下命令,为obsutil增加可执行权限。 > chmod 755 obsutil >
>
> #### ③ 验证版本
>
> bash > ./obsutil version >
>
> 看到类似 obsutil version 5.5.12
即成功。
>
> #### ④ 一次性配置 AK/SK
>
> 用你在控制台「我的凭证」里生成的 Access Key 和 Secret Key:
>
> bash > /usr/local/obsutil/obsutil_linux_amd64_5.7.3/obsutil config \ > -i= 你的 AK \ > -k= 你的 SK \ > -e=obs.cn-east-3.myhuaweicloud.com # 根据桶区域修改 >
>
>> 区域对照:
>>
>> – 上海一 → obs.cn-east-3.myhuaweicloud.com
>> – 广州 → obs.cn-south-1.myhuaweicloud.com
>>
>
> 完成后会生成 ~/.obsutilconfig
,后续脚本可直接调用。
>
> —
>
> #### 可选:创建软连接方便使用obsutil
>
> bash > sudo ln -s /usr/local/obsutil/obsutil_linux_amd64_5.7.3/obsutil /usr/local/bin/obsutil > # 之后就可以直接用: > obsutil ls obs://your-bucket/ >
>
📜 2 宝塔计划任务脚本
宝塔 → 计划任务 → Shell 脚本 → 执行周期「每天 2:30」→ 粘贴下面内容:
#!/bin/bash
# ===== 可改参数 =====
LOCAL_BACK_DIR="/www/backup/siyuan" # 本机备份目录
DATA_DIR="/www/dk_project/dk_app/siyuan/siyuan/data" # 思源数据卷宿主机路径
IMAGE_NAME="b3log/siyuan:latest"
OBS_BUCKET="obs://bucket/siyuan_backup" # 你的 OBS 桶
KEEP_LOCAL=30 # 本机保留天数
OBS_BIN="/usr/local/obsutil/obsutil_linux_amd64_5.7.3/obsutil" # obsutil 可执行文件路径
# ====================
DATE=$(date +%F)
mkdir -p "$LOCAL_BACK_DIR"
# 1) 备份数据卷
tar -zcf "$LOCAL_BACK_DIR/siyuan_data_${DATE}.tar.gz" -C "$DATA_DIR" .
# 2) 备份镜像
docker save "$IMAGE_NAME" | gzip > "$LOCAL_BACK_DIR/siyuan_image_${DATE}.tar.gz"
# 3) 上传到 OBS(覆盖同名文件)
"$OBS_BIN" cp "$LOCAL_BACK_DIR/siyuan_data_${DATE}.tar.gz" "$OBS_BUCKET/siyuan_data_${DATE}.tar.gz"
"$OBS_BIN" cp "$LOCAL_BACK_DIR/siyuan_image_${DATE}.tar.gz" "$OBS_BUCKET/siyuan_image_${DATE}.tar.gz"
# 4) 清理本地旧包(> KEEP_LOCAL 天)
find "$LOCAL_BACK_DIR" -type f -name "*.tar.gz" -mtime +${KEEP_LOCAL} -delete
# 5) 清理 OBS 旧包:删除 30 天前的对象
DEL_DATE=$(date -d '30 days ago' +%F)
"$OBS_BIN" rm "$OBS_BUCKET/siyuan_data_${DEL_DATE}.tar.gz" -f
"$OBS_BIN" rm "$OBS_BUCKET/siyuan_image_${DEL_DATE}.tar.gz" -f
保存即可。第一次可以点「执行」测试,看宝塔日志是否出现 Upload successfully
。
🚑 3 恢复(换机或重装)
- 把备份包拉回新机器
# 从 OBS 下载最近一份
obsutil cp obs://bucket/siyuan_backup/siyuan_data_2025-07-26.tar.gz /tmp/
obsutil cp obs://bucket/siyuan_backup/siyuan_image_2025-07-26.tar.gz /tmp/
- 恢复镜像
docker load -i /tmp/siyuan_image_2025-07-26.tar.gz
- 恢复数据卷
mkdir -p /www/dk_project/dk_app/siyuan/siyuan/data
tar -xzf /tmp/siyuan_data_2025-07-26.tar.gz -C /www/dk_project/dk_app/siyuan/siyuan/data
- 重新运行容器
docker run -d --restart always --name siyuan \
-p 6806:6806 \
-v /www/dk_project/dk_app/siyuan/siyuan/data:/siyuan/workspace \
b3log/siyuan:latest \
--workspace=/siyuan/workspace \
--accessAuthCode=授权码
✅ 一键检查脚本
复制到 SSH 直接跑,可立即验证备份是否 OK:
ls -lh /www/backup/siyuan/
/usr/local/obsutil/obsutil_linux_amd64_5.7.3/obsutil ls obs://bucket/siyuan_backup/
完成后,你的思源笔记就拥有了 「每天 2:30 自动异地备份」 的保险。
群晖NAS备份
下面给出群晖 NAS 端的完整「备份 + 恢复」脚本与配置示例,与你的「华为云宝塔思源笔记方案 B」配套使用。 一次配置后,群晖每天 3:00 自动把服务器上的最新备份包拉回 NAS,并保留 30 天版本;需要恢复时,在群晖里解压即可。
🧩 1 前置准备(只做一次)
项目 | 操作 |
---|---|
群晖及服务器安装 rsync | DSM 7 自带;若缺失,套件中心 → 安装 Synology Drive Server 或 rsync 即可。 云服务器: yum install -y rsync |
服务器开启 SSH | 宝塔 → 安全 → 放行 22 端口;确保群晖能 ssh root@云IP 无密码登录(建议使用密钥)。 |
备份目录 | 服务器端: /www/backup/siyuan (即方案 B 生成的 .tar.gz 目录)。群晖端: /docker/backup/siyuan (可自定义)。 |
> ### 群晖开启免密登录服务器教程
>
> —
>
> #### ✅ 手动复制公钥(2 步)
>
> ##### 1️⃣ 在群晖终端生成并查看公钥
>
> bash > ssh-keygen -t rsa -C "backup@nas" -f ~/.ssh/id_rsa -N "" > cat ~/.ssh/id_rsa.pub >
>
> 复制屏幕输出的 整段公钥(以 ssh-rsa AAA...
开头)。
>
> ##### 2️⃣ 把公钥追加到云服务器
>
> 在群晖终端(或任何能 SSH 到云服务器的终端)执行:
>
> bash > # 如果首次登录,输入一次 root 密码 > ssh root@云服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh" > # 追加公钥 > ssh root@云服务器IP "echo '刚才复制的公钥整段' >> ~/.ssh/authorized_keys" > ssh root@云服务器IP "chmod 600 ~/.ssh/authorized_keys" >
>
> —
>
> #### ✅ 验证
>
> bash > ssh root@云服务器IP >
>
> 第一次仍需要输入密码,第二次起 无需密码 即登录成功。
📜 2 群晖计划任务脚本
- DSM 控制面板 → 任务计划器 → 新增 → 用户自定义脚本
- 任务名称:
Pull-Siyuan-Backup
- 计划:每天 3:00 执行
- 脚本内容(直接复制):
#!/bin/bash
######################## 可修改变量 ########################
NAS_DIR="/volume1/docker/backup/siyuan" # 群晖本地目录
SERVER_IP="" # 服务器IP
SERVER_DIR="/www/backup/siyuan" # 服务器备份目录
KEEP_DAYS=30 # 保留天数
LOG_FILE="/volume1/docker/backup/siyuan/pull.log" # 日志文件(不是目录)
############################################################
mkdir -p "$NAS_DIR"
echo "[$(date '+%F %T')] Start pulling..." >> "$LOG_FILE"
# 1) 拉取服务器上 **所有** 最新 .tar.gz(增量)
rsync -avz --progress \
root@"$SERVER_IP":"$SERVER_DIR"/siyuan_*.tar.gz \
"$NAS_DIR"/ >> "$LOG_FILE" 2>&1
# 2) 删除本地 30 天前的备份包
find "$NAS_DIR" -type f -name "*.tar.gz" -mtime +${KEEP_DAYS} -delete
echo "[$(date '+%F %T')] Done." >> "$LOG_FILE"
- 通知(可选):在任务计划器里勾选「执行后发送邮件」,失败会收到提醒。
🚑 3 群晖端恢复流程
- 找到对应日期的备份包
例如
/volume1/backup/siyuan/siyuan_data_2025-07-24.tar.gz
- 解压到群晖临时目录
cd /volume1/restore
tar -xzf /volume1/backup/siyuan/siyuan_data_2025-07-24.tar.gz
- 把解压后的
data
文件夹拷回服务器 用 File Station 右键「下载」或 rsync 反向拷回:
rsync -avz /volume1/restore/data/ root@云IP:/www/dk_project/dk_app/siyuan/siyuan/data/
- 在服务器重新启动思源容器(参考前面回复的
docker run
命令)即可。
✅ 一键检查(群晖 SSH 终端)
# 测试: 群晖->控制面板->任务计划->选择创建的定时任务->上方点击运行
# 看日志
tail /volume1/docker/backup/siyuan/pull.log
完成后,群晖每天 3:00 自动把服务器新备份拉回 NAS,保留 30 天,无需人工干预。