通过 rclone 自动备份 Lsky Pro(兰空图床)数据至 OneDrive

这是一篇关于如何在远程 Linux 服务器上通过 rclone 自动备份 Lsky Pro(兰空图床)数据至 OneDrive 的技术指南。

方案简介

本方案通过 Shell 脚本集成 mariadb-dump 数据库导出、tar 文件压缩及 rclone 同步功能。适用于 Docker 部署且无法直接使用浏览器进行 OAuth 授权的远程服务器。

我目前的安装环境为:Debian GNU/Linux 13 (trixie)+1Panel面板,docker部署的Lsky pro和对应数据库 mariadb,见图:

image-20260219154223533

备份核心数据列表

数据类型 路径/来源 重要性
数据库 容器内 mariadb-dump 导出 高(包含所有图片索引与用户数据)
配置文件 /data/lsky-pro/.env 高(包含 APP_KEY,丢失将导致无法解析图片路径)
存储数据 /data/lsky-pro/storage/app/uploads 高(所有原图文件)
安装锁 /data/lsky-pro/installed.lock 中(防止重复触发初始化安装)

第一步:远程服务器配置 Rclone

由于远程服务器无法打开浏览器,需采用“授权传递”模式。

  1. 服务器端启动配置

    执行 rclone config,创建名为 onedrive 的配置。在 Use auto config? 处输入 n

  2. 本地端获取 Token

    在本地电脑(Windows/Mac)下载 rclone,运行服务器给出的命令:

    rclone authorize "onedrive" "XXXXXXXX"

  3. 完成授权

    将本地浏览器授权后生成的 JSON Token 粘贴回服务器。

rclone具体配置方法

注意:博主Onedrive账号为office 365,以下实际使用以此为例

安装

1
curl https://rclone.org/install.sh | sudo bash

1. 远程服务器端操作

  1. 执行 rclone config

  2. 输入 n 新建配置,命名为 onedrive

  3. Storage 选择 Microsoft OneDrive(通常编号在 30 左右,请核对列表)。

  4. client_idclient_secret:直接回车跳过(使用默认值)。

  5. region:选择 global (通常是 1):经实际使用,一定要选1,虽然4有365和china字样,不要选4

  6. 关键步骤: 当出现 Use auto config? 时,输入 n (即:Edit advanced config? [y/n] n 之后,询问 Use auto config? 时选 n)。

  7. 此时服务器会显示一行命令,类似:

    rclone authorize "onedrive" "XXXXXXXXX"


2. 本地电脑操作 (Windows/Mac)

  1. 在你的本地电脑(有浏览器的机器)上下载 rclone ,如果为mac或linux直接使用上述脚本安装即可。

  2. 打开终端(CMD、PowerShell 或 Terminal)。

  3. 输入服务器上给出的那行命令:

    1
    rclone authorize "onedrive" "XXXXXXXXX"
  4. 此时本地电脑会自动弹出浏览器,登录你的 OneDrive 账号并点击“授权”。

    PixPin_2026-02-19_14-25-54

  5. 授权成功后,本地终端会返回一段 JSON 格式的 Token(以 {"access_token":...} 开头)。

    PixPin_2026-02-19_14-27-25

  6. 复制这段完整的 JSON 字符串。


3. 返回远程服务器完成配置

  1. 将本地获取的 Token 粘贴回服务器的 result> 提示符处。

  2. Your choice>:选择 OneDrive Personal or Business (通常是 1)。

  3. Chose drive to use:rclone 会列出检测到的盘符,具体可打开网页版onedrive,下面的字符与浏览器地址对应上即可。

    PixPin_2026-02-19_14-32-56

  4. Is that OK?:确认配置,输入 y

  5. 退出配置。

4. 验证连接

在服务器上执行以下命令,看是否能列出文件:

1
rclone lsd onedrive:

PixPin_2026-02-19_14-35-54


第二步:编写自动化备份脚本

在服务器创建脚本文件,例如 /root/my_shells/lsky_backup.sh。脚本同时上传至zhyong26/Mac_shells: 个人使用脚本

注意查看脚本备注,需根据实际修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash

# --- 基础配置 ---
DB_CONTAINER="1Panel-mariadb-HnT9 根据实际替换" # 数据库容器名
DB_USER="lsky-pro 根据实际替换" # 数据库用户名
DB_PASS="xxxxxxxxxxxxxx 根据实际替换" # 数据库密码
DB_NAME="lsky-pro 根据实际替换" # 数据库名
SOURCE_DIR="/data/lsky-pro 根据docker目录映射" # Lsky Pro 挂载根目录
BACKUP_TEMP_DIR="/data/backups/temp" # 临时目录
REMOTE_NAME="onedrive 根据实际替换" # rclone配置名
REMOTE_PATH="Backup/LskyPro" # 远程存储路径
RCLONE_CONF="$HOME/.config/rclone/rclone.conf"

DATE=$(date +%Y%m%d)
FILE_NAME="lsky_full_backup_$DATE.tar.gz"

# --- 环境准备 ---
mkdir -p $BACKUP_TEMP_DIR

# --- 1. 导出数据库 ---
# 注意:-u 和 -p 后不要加中括号或空格
# 备份命令:mariadb-dump,如果为mysql,备份命令为 /usr/bin/mysqldump 或 mysqldump
docker exec $DB_CONTAINER mariadb-dump -hlocalhost -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_TEMP_DIR/db_backup_$DATE.sql

# 校验 SQL 文件是否存在
if [ ! -s "$BACKUP_TEMP_DIR/db_backup_$DATE.sql" ]; then
echo "Database export failed."
exit 1
fi

# --- 2. 打包核心文件 ---
tar -czvf $BACKUP_TEMP_DIR/$FILE_NAME \
-C / \
${BACKUP_TEMP_DIR#/}/db_backup_$DATE.sql \
${SOURCE_DIR#/}/.env \
${SOURCE_DIR#/}/storage/app/uploads \
${SOURCE_DIR#/}/installed.lock

# --- 3. 同步至 OneDrive ---
rclone --config "$RCLONE_CONF" copy $BACKUP_TEMP_DIR/$FILE_NAME $REMOTE_NAME:$REMOTE_PATH

# --- 4. 清理 ---
rm -rf $BACKUP_TEMP_DIR/*
# 自动保留最近 30 天的远程备份
rclone --config "$RCLONE_CONF" delete $REMOTE_NAME:$REMOTE_PATH --min-age 30d

第三步:设置定时任务 (Crontab)

配置脚本每天凌晨 02:00 自动执行。

  1. 赋予执行权限

    chmod 700 /root/my_shells/lsky_backup.sh

  2. 编辑 Crontab

    输入 crontab -e 并添加以下行:

    1
    00 02 * * * /bin/bash /root/my_shells/lsky_backup.sh > /dev/null 2>&1

首先执行一次,脚本,即可在onedrive上查看备份好的文件了,这样再也不怕珍贵的图片丢失了。

PixPin_2026-02-19_14-45-07

下载下来后,可查看备份目录。上述所列的四个重要文件,包括数据库就全部备份好了。

image-20260219161019787


关键技术点提示

  • 权限安全:脚本内包含明文密码,必须通过 chmod 700 确保仅 Root 用户可读。
  • 容器执行环境mariadb-dump 命令在容器内执行,若容器镜像非 MariaDB(如 MySQL),请根据实际镜像名调整命令。
  • 配置文件路径:在 Crontab 中运行脚本时,环境变量与登录 Shell 不同,脚本中应使用绝对路径引用 rclone.conf
  • 数据完整性:建议定期从 OneDrive 下载备份包,并在本地测试环境中尝试恢复,以验证备份的有效性。

AI 总结 (Qwen API)

生成时间: 2026-02-19 16:12:25

深度总结:

本文是一篇面向运维实践者的生产级图床数据容灾方案指南,聚焦于 Lsky Pro(兰空图床)在 Docker 环境下的全量自动化备份体系构建。其核心价值不仅在于“如何备份”,更在于系统性解决了远程无图形界面服务器(如 VPS)对接 OneDrive 这类需 OAuth 交互的云存储所面临的授权断点难题——通过创新采用“本地授权 + Token 传递”模式,绕过传统 rclone config --auto 的浏览器依赖限制,实现安全、可复现的配置闭环。

技术方案采用分层备份策略
数据库层:通过 docker exec 调用容器内 mariadb-dump 实现一致性逻辑备份(规避文件锁与事务不一致风险);
配置层:精准提取 .env(含关键 APP_KEY,丢失将导致所有图片 URL 解析失败);
静态资产层:压缩 uploads/ 目录保障原始图片完整性;
状态控制层:保留 installed.lock 防止误恢复引发重复初始化。

脚本设计强调健壮性与可维护性:包含 SQL 导出校验、绝对路径显式声明、环境变量隔离处理(适配 Crontab)、自动清理策略(30 天远端保留),并嵌入关键安全提示(如密码明文保护、权限最小化 chmod 700)。整套流程已验证于 Debian 13 + 1Panel + Docker 栈,具备强落地性与跨平台参考价值。


核心关键词标签(3–5个):

#rclone #LskyPro #自动化备份 #OneDrive同步 #Docker运维