华为云OBS备份

  • 每天凌晨 2:30 打包 思源数据卷 + 思源镜像
  • 生成 2 个 .tar.gz 文件
  • 自动上传到 华为云 OBS(或群晖 NAS)
  • 本地/云端各保留最近 30 天
  • 恢复命令也一并给出

🧩 1 前置准备(只做一次)

  1. 在华为云控制台 → 对象存储服务 OBS → 创建 Bucket(如 siyuan-backup)。
  2. 下载 obsutil 并放到 /usr/local/obsutil/obsutil,赋执行权限:
chmod +x /usr/local/obsutil/obsutil
  1. 初始化配置(只需一次):
/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 KeySecret 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 恢复(换机或重装)

  1. 把备份包拉回新机器
# 从 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/
  1. 恢复镜像
docker load -i /tmp/siyuan_image_2025-07-26.tar.gz
  1. 恢复数据卷
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
  1. 重新运行容器
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 Serverrsync 即可。
云服务器: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 群晖计划任务脚本

  1. DSM 控制面板 → 任务计划器 → 新增 → 用户自定义脚本
  2. 任务名称Pull-Siyuan-Backup
  3. 计划:每天 3:00 执行
  4. 脚本内容(直接复制):
#!/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"
  1. 通知(可选):在任务计划器里勾选「执行后发送邮件」,失败会收到提醒。

🚑 3 群晖端恢复流程

  1. 找到对应日期的备份包 例如 /volume1/backup/siyuan/siyuan_data_2025-07-24.tar.gz
  2. 解压到群晖临时目录
cd /volume1/restore
tar -xzf /volume1/backup/siyuan/siyuan_data_2025-07-24.tar.gz
  1. 把解压后的 data 文件夹拷回服务器File Station 右键「下载」或 rsync 反向拷回:
rsync -avz /volume1/restore/data/ root@云IP:/www/dk_project/dk_app/siyuan/siyuan/data/
  1. 在服务器重新启动思源容器(参考前面回复的 docker run 命令)即可。

✅ 一键检查(群晖 SSH 终端)

# 测试: 群晖->控制面板->任务计划->选择创建的定时任务->上方点击运行
# 看日志
tail /volume1/docker/backup/siyuan/pull.log

完成后,群晖每天 3:00 自动把服务器新备份拉回 NAS,保留 30 天,无需人工干预

小伯安

发表回复