基于 rclone 的 Docker 定时备份解决方案,支持多目标备份和灵活的配置管理。
981
基于 rclone 的 Docker 定时备份解决方案,支持多目标备份和灵活的配置管理。
使用项目提供的 Docker 镜像
版本:
latest,dev(GHCR only), <TAG>
| Registry | Image |
|---|---|
| Docker Hub | jetsung/rclone-backup |
| GitHub Container Registry | ghcr.io/jetsung/rclone-backup |
| Tencent Cloud Container Registry(SG) | sgccr.ccs.tencentyun.com/jetsung/rclone-backup |
| Aliyun Container Registry(GZ) | registry.cn-guangzhou.aliyuncs.com/jetsung/rclone-backup |
# 克隆或创建项目目录
mkdir rclone-backup && cd rclone-backup
# 启动容器
docker compose up -d
首次运行时需要配置 rclone:
# 进入容器进行配置
docker exec -it rclone-backup /app/scripts/init-rclone.sh
# 或者直接进入容器
docker exec -it rclone-backup bash
rclone config
按照 rclone 的配置向导设置您的云存储服务(Google Drive、OneDrive、AWS S3 等)。
如果需要定时从云端同步数据到本地,编辑 config/config.json 文件,启用 sync_jobs 中的任务:
# 查看同步配置示例
docker exec rclone-backup /app/scripts/create-default-sync-config.sh
配置完成后重启容器以启动定时任务:
docker restart rclone-backup
编辑 config/config.json 来配置您的备份和同步任务:
{
"backup_jobs": [
{
"name": "documents_backup",
"enabled": true,
"source_path": "/data/documents",
"backup_mode": "copy",
"targets": [
{
"remote": "gdrive",
"path": "backup/documents",
"enabled": true
}
],
"schedule": "0 2 * * *",
"options": [
"--progress",
"--transfers=4",
"--checkers=8"
],
"hooks": {
"pre_backup": {
"enabled": true,
"script": "/app/hooks/compress-backup.sh",
"timeout": 1800,
"fail_on_error": true,
"description": "压缩备份目录为 tar.xz 格式"
},
"post_backup": {
"enabled": true,
"script": "/app/hooks/cleanup-compressed.sh",
"timeout": 60,
"fail_on_error": false,
"description": "清理临时压缩文件"
}
}
}
],
"sync_jobs": [
{
"name": "documents_sync",
"enabled": true,
"destination_path": "/data/synced/documents",
"sources": [
{
"remote": "gdrive",
"path": "shared/documents",
"enabled": true
}
],
"schedule": "0 1 * * *",
"sync_mode": "copy",
"options": [
"--progress",
"--transfers=4",
"--checkers=8"
]
}
]
}
name: 备份任务名称enabled: 是否启用此任务source_path: 源目录路径backup_mode: 备份模式
copy: 只复制新文件和更新的文件 (推荐,默认)sync: 完全同步,会删除目标中不存在于源的文件targets: 备份目标列表
remote: rclone 配置的远程名称path: 远程路径enabled: 是否启用此目标schedule: cron 表达式 (分 时 日 月 周)options: rclone 命令选项hooks: Hook 脚本配置(可选)
pre_backup: 备份前执行的脚本post_backup: 备份后执行的脚本enabled: 是否启用此 Hookscript: Hook 脚本路径timeout: 脚本执行超时时间(秒)fail_on_error: 脚本失败时是否终止备份任务description: Hook 描述(可选)name: 同步任务名称enabled: 是否启用此任务destination_path: 本地目标目录路径sources: 同步源列表
remote: rclone 配置的远程名称path: 远程路径enabled: 是否启用此源schedule: cron 表达式 (分 时 日 月 周)sync_mode: 同步模式
copy: 只复制新文件和更新的文件 (推荐)sync: 完全同步,会删除目标中不存在于源的文件options: rclone 命令选项.
├── docker/
│ └── Dockerfile
├── scripts/
│ ├── init-rclone.sh # rclone 初始化脚本
│ ├── backup-job.sh # 备份执行脚本
│ ├── sync-job.sh # 同步执行脚本
│ ├── create-default-config.sh # 创建默认备份配置
│ ├── create-default-sync-config.sh # 创建默认同步配置
│ ├── create-hook.sh # Hook 创建助手脚本
│ ├── test-hooks.sh # Hook 功能测试脚本
│ ├── setup-cron.sh # 定时任务设置
│ ├── rotate-logs.sh # 日志轮转脚本
│ ├── test-logging.sh # 测试日志功能
│ └── hooks/ # Hook 脚本目录
│ ├── compress-backup.sh # 压缩备份示例(支持多种格式)
│ ├── cleanup-compressed.sh # 清理压缩文件示例
│ ├── dump-database.sh # 数据库备份示例
│ ├── pre-backup-documents.sh # 文档备份前处理示例
│ └── post-backup-documents.sh # 文档备份后处理示例
├── config/
│ └── config.json # 备份和同步配置文件
├── docs/
│ └── hooks-examples.md # Hook 配置示例文档
├── data/
│ ├── rclone/ # rclone 配置目录
│ ├── backup/ # 备份源目录
│ ├── synced/ # 同步数据目录
│ └── logs/ # 日志目录
├── docker-compose.yml
├── docker-bake.hcl
├── entrypoint.sh
└── README.md
Hook 功能允许您在备份前后执行自定义脚本,实现更灵活的备份流程。
pre_backup: 在备份开始前执行,常用于:
post_backup: 在备份完成后执行,常用于:
使用内置的 Hook 创建助手:
# 创建备份前 Hook
docker exec rclone-backup /app/scripts/create-hook.sh pre-backup my-custom-hook
# 创建备份后 Hook
docker exec rclone-backup /app/scripts/create-hook.sh post-backup cleanup-hook
Hook 脚本执行时会自动设置以下环境变量:
BACKUP_JOB_NAME: 当前备份任务名称BACKUP_SOURCE_PATH: 备份源路径BACKUP_TIMESTAMP: 备份开始时间戳BACKUP_LOG_FILE: 备份日志文件路径{
"name": "compressed_backup",
"enabled": true,
"source_path": "/data/documents",
"backup_mode": "copy",
"targets": [
{
"remote": "gdrive",
"path": "backup/compressed",
"enabled": true
}
],
"schedule": "0 2 * * *",
"hooks": {
"pre_backup": {
"enabled": true,
"script": "/app/hooks/compress-backup.sh",
"timeout": 1800,
"fail_on_error": true,
"description": "压缩目录为 tar.xz 格式"
},
"post_backup": {
"enabled": true,
"script": "/app/hooks/cleanup-compressed.sh",
"timeout": 60,
"fail_on_error": false,
"description": "清理临时压缩文件"
}
}
}
{
"name": "database_backup",
"enabled": true,
"source_path": "/tmp/db-backup",
"backup_mode": "copy",
"targets": [
{
"remote": "s3",
"path": "database-backups",
"enabled": true
}
],
"schedule": "0 3 * * *",
"hooks": {
"pre_backup": {
"enabled": true,
"script": "/app/hooks/dump-database.sh",
"timeout": 3600,
"fail_on_error": true,
"description": "导出数据库到临时目录"
},
"post_backup": {
"enabled": true,
"script": "/app/hooks/cleanup-db-dump.sh",
"timeout": 60,
"fail_on_error": false,
"description": "清理数据库导出文件"
}
}
}
项目提供了几个示例 Hook 脚本:
log_hook_message 函数记录日志项目提供了测试脚本来验证 Hook 功能:
# 运行 Hook 功能测试
docker exec rclone-backup /app/scripts/test-hooks.sh
测试脚本会:
查看 Hook 配置示例文档 获取更多实用的 Hook 配置示例,包括:
0 2 * * * - 每天凌晨2点0 3 * * 0 - 每周日凌晨3点0 1 1 * * - 每月1号凌晨1点*/30 * * * * - 每30分钟# 测试日志功能(首次使用建议运行)
docker exec rclone-backup /app/scripts/test-logging.sh
# 查看备份日志
docker exec rclone-backup tail -f /var/log/backup/backup.log
# 查看同步日志
docker exec rclone-backup tail -f /var/log/backup/sync.log
# 查看 cron 日志
docker exec rclone-backup tail -f /var/log/backup/cron.log
# 查看容器日志
docker logs -f rclone-backup
# 查看所有日志文件
docker exec rclone-backup ls -la /var/log/backup/
# 执行特定的备份任务
docker exec rclone-backup /app/scripts/backup-job.sh "documents_backup"
# 执行特定的同步任务
docker exec rclone-backup /app/scripts/sync-job.sh "documents_sync"
# 创建自定义 Hook
docker exec rclone-backup /app/scripts/create-hook.sh pre-backup compress-photos
# 测试 Hook 功能
docker exec rclone-backup /app/scripts/test-hooks.sh
# 查看已配置的远程
docker exec rclone-backup rclone listremotes
# 测试连接
docker exec rclone-backup rclone lsd gdrive:
# 重新配置
docker exec rclone-backup rclone config
容器启动后立即退出
docker logs rclone-backup备份任务不执行
docker exec rclone-backup cat /etc/crontabs/root备份失败
# 进入容器调试
docker exec -it rclone-backup bash
# 手动测试 rclone 命令
rclone copy /data/backup gdrive:backup/test --dry-run -v
Apache License 2.0
Content type
Image
Digest
sha256:08f59562c…
Size
33.5 MB
Last updated
10 months ago
docker pull jetsung/rclone-backup