对于自建服务来说,数据安全永远是第一位的。最近我在折腾 Komari 面板时,为了防止 VPS 意外失联或数据损坏,研究了一套基于 Rclone 和 Cloudflare R2 的自动备份方案。
这套方案的优点在于:
- 零成本:Cloudflare R2 提供了 10GB 的免费存储空间,且流出流量免费,对于备份配置文件和面板数据绰绰有余。
- 高可靠:数据存储在云端对象存储中,比本地备份更安全。
- 兼容性强:本文特别记录了在 Alpine / BusyBox 等精简版 Linux 系统下遇到的坑及解决方法。
准备工作
- 一个 VPS(已安装 Komari 面板)。
- 一个 Cloudflare 账号(已开通 R2 对象存储)。
第一步:配置 Cloudflare R2
- 登录 Cloudflare Dashboard,进入 R2 对象存储。
- 点击 “创建存储桶”,命名为
komari-backup(或者你喜欢的名字)。 - 进入 R2 概览页面,在右侧点击 “管理 R2 API 令牌 (Manage R2 API Tokens)”。
- 点击 “创建 API 令牌”:
- 权限 (Permissions):必须选择 Admin Read & Write(管理员读写),否则无法上传。
- TTL:建议选择
Forever(永久)。
- 创建完成后,务必保存以下三个信息(只显示一次):
- Access Key ID
- Secret Access Key
- S3 API Endpoint (链接格式如
https://<账号ID>.r2.cloudflarestorage.com)
第二步:安装 Rclone
(避坑提示:由于我的 VPS 使用的是精简版系统,默认没有 sudo 且 unzip 不支持高级参数,官方的一键脚本会报错。因此这里推荐使用通用的二进制安装法。)
在 SSH 终端执行以下命令:
Bash
# 1. 下载 Rclone Linux 主程序
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
# 2. 解压(即使是 BusyBox 的 unzip 也能解压)
unzip rclone-current-linux-amd64.zip
# 3. 进入目录并安装
cd rclone-*-linux-amd64
cp rclone /usr/bin/
chown root:root /usr/bin/rclone
chmod 755 /usr/bin/rclone
# 4. 验证安装
rclone version
看到版本号说明安装成功。
第三步:配置 Rclone 连接 R2
输入 rclone config 开始配置:
- n (新建配置) -> 命名为
r2。 - Storage: 选
s3(Amazon S3 Compliant Storage)。 - Provider: 选
Cloudflare。 - access_key_id: 填入第一步获取的 Access Key ID。
- secret_access_key: 填入第一步获取的 Secret Access Key。
- Region: 输入
auto(R2 全球自动分发)。 - Endpoint: 填入第一步获取的 S3 API 地址(不要带 bucket 名字)。
- 其他选项一路回车默认,最后输入
y确认保存。
测试连接是否成功:
Bash
rclone lsd r2:
如果能列出你的存储桶名字,说明配置通了!
第四步:编写自动备份脚本
Komari 的默认安装目录通常在 /opt/komari。我们编写一个脚本,将该目录打包并上传。
创建脚本文件:
Bash
cat > /root/r2_backup.sh <<EOF
#!/bin/sh
# --- 新增:强制指定环境变量,确保能找到 rclone ---
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ------------------------------------------------
# ================= 配置区域 =================
LOCAL_DIR="/opt/komari" # 需要备份的目录
REMOTE_NAME="r2" # Rclone 配置名
BUCKET_NAME="komari-backup" # R2 存储桶名
BACKUP_NAME="komari_\$(date +%Y-%m-%d).tar.gz"
# ===========================================
echo "正在开始备份..."
# 1. 打包压缩
cd /opt
tar -czf "/tmp/\$BACKUP_NAME" komari
if [ \$? -eq 0 ]; then
echo "打包成功: /tmp/\$BACKUP_NAME"
else
echo "打包失败!"
exit 1
fi
# 2. 上传到 Cloudflare R2 (存入 backup 文件夹)
rclone copy "/tmp/\$BACKUP_NAME" "\$REMOTE_NAME:\$BUCKET_NAME/backup"
if [ \$? -eq 0 ]; then
echo "上传成功!"
# 3. (可选) 删除云端 30 天前的旧备份,节省空间
rclone delete "\$REMOTE_NAME:\$BUCKET_NAME/backup" --min-age 30d
# 4. 清理本地临时文件
rm -f "/tmp/\$BACKUP_NAME"
echo "本地清理完成,任务结束。"
else
echo "上传失败,请检查网络或配置。"
fi
EOF
赋予脚本执行权限:
Bash
chmod +x /root/r2_backup.sh
你可以先手动运行一次 /root/r2_backup.sh 看看是否提示“上传成功”。
第五步:设置定时任务 (Crontab)
最后,通过 Crontab 实现每天凌晨自动运行。
输入 crontab -e,添加如下一行(例如每天凌晨 3:00 执行):
代码段(按 i 进入编辑,粘贴,按 Esc 然后输入 :wq 保存退出):
# 每天凌晨 3:00 执行,并将日志写入 backup.log
0 3 * * * /bin/bash /root/r2_backup.sh >> /root/backup.log 2>&1
总结
至此,一套完整的异地自动备份方案就搭建完成了。
- 成本:$0
- 维护:全自动,无需人工干预
- 效果:每天凌晨自动打包
/opt/komari并上传到 Cloudflare R2,同时自动清理 30 天前的旧备份。
数据无价,建议大家尽早给自己的服务加上这把“安全锁”!
0