Laughing Kowalevski
Uncategorized 尚无浏览 2 分钟阅读

使用 Rclone 将 Komari 面板数据全自动备份至 Cloudflare R2

对于自建服务来说,数据安全永远是第一位的。最近我在折腾 Komari 面板时,为了防止 VPS 意外失联或数据损坏,研究了一套基于 Rclone 和 Cloudflare R2 的自动备份方案

这套方案的优点在于:

  1. 零成本:Cloudflare R2 提供了 10GB 的免费存储空间,且流出流量免费,对于备份配置文件和面板数据绰绰有余。
  2. 高可靠:数据存储在云端对象存储中,比本地备份更安全。
  3. 兼容性强:本文特别记录了在 Alpine / BusyBox 等精简版 Linux 系统下遇到的坑及解决方法。

准备工作

  1. 一个 VPS(已安装 Komari 面板)。
  2. 一个 Cloudflare 账号(已开通 R2 对象存储)。

第一步:配置 Cloudflare R2

  1. 登录 Cloudflare Dashboard,进入 R2 对象存储
  2. 点击 “创建存储桶”,命名为 komari-backup(或者你喜欢的名字)。
  3. 进入 R2 概览页面,在右侧点击 “管理 R2 API 令牌 (Manage R2 API Tokens)”
  4. 点击 “创建 API 令牌”
    • 权限 (Permissions):必须选择 Admin Read & Write(管理员读写),否则无法上传。
    • TTL:建议选择 Forever(永久)。
  5. 创建完成后,务必保存以下三个信息(只显示一次):
    • Access Key ID
    • Secret Access Key
    • S3 API Endpoint (链接格式如 https://<账号ID>.r2.cloudflarestorage.com)

第二步:安装 Rclone

(避坑提示:由于我的 VPS 使用的是精简版系统,默认没有 sudounzip 不支持高级参数,官方的一键脚本会报错。因此这里推荐使用通用的二进制安装法。)

在 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 开始配置:

  1. n (新建配置) -> 命名为 r2
  2. Storage: 选 s3 (Amazon S3 Compliant Storage)。
  3. Provider: 选 Cloudflare
  4. access_key_id: 填入第一步获取的 Access Key ID。
  5. secret_access_key: 填入第一步获取的 Secret Access Key。
  6. Region: 输入 auto(R2 全球自动分发)。
  7. Endpoint: 填入第一步获取的 S3 API 地址(不要带 bucket 名字)。
  8. 其他选项一路回车默认,最后输入 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

  1. 此文章尚无评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注