备份与恢复
统一备份恢复工具,支持远程(从本地 Mac 操作服务器)和本地(直接在服务器上执行)两种模式。
快速上手
# 备份
bash scripts/backup/backup.sh # 站点完整备份(推荐)
bash scripts/backup/backup.sh --db-only # 仅数据库
bash scripts/backup/backup.sh --full # 灾难备份
bash scripts/backup/backup.sh assets monitor # 仅指定站点
# 恢复
bash scripts/backup/restore.sh # 交互式恢复
bash scripts/backup/restore.sh 20260708_120000 # 指定时间戳
bash scripts/backup/restore.sh --db monitor file.db # 数据库恢复
bash scripts/backup/restore.sh --full backup.tar.gz # 灾难恢复
远程 vs 本地模式
|
远程模式(默认) |
本地模式 --local |
| 执行位置 |
本地 Mac |
服务器上 |
| Docker 操作 |
ssh txjp "docker ..." |
直接 docker ... |
| 文件传输 |
scp |
本地 cp |
| 适用场景 |
日常运维 |
灾难恢复 / 新服务器 |
# 远程(默认)
bash scripts/backup/backup.sh
# 本地
bash scripts/backup/backup.sh --local
bash scripts/backup/restore.sh --local --full full-backup.tar.gz
新服务器灾难恢复流程
# 1. 在新服务器上安装 Docker + Compose V2
# 2. 上传脚本和备份文件
scp scripts/backup/*.sh user@new-server:/root/docker/scripts/backup/
scp full-backup-20260708.tar.gz user@new-server:/root/docker/
# 3. 在新服务器上执行本地恢复
ssh user@new-server
cd /root/docker && bash scripts/backup/restore.sh --local --full full-backup-20260708.tar.gz
备份内容
| 站点 |
备份项 |
| assets |
assets.db + uploads/ + docker-compose.yml + .env + Dockerfile |
| issue |
issue.db + uploads/ + reports/ + docker-compose.yml + .env + Dockerfile |
| ldap |
users.db + docker-compose.yml + .env + Dockerfile |
| gitea |
gitea.db + git仓库/ + conf/ + docker-compose.yml |
| monitor |
monitor.db + docker-compose.yml + .env |
| oa |
docker-compose.yml + .env(无独立数据库) |
| shared |
nginx配置 + SSL证书 + Docker网络配置 |
备份存储
| 位置 |
路径 |
| 本地 |
/Users/niuniu/programs/docker/db-backups/ |
| 云端 |
/root/docker/db-backups/ |
自动备份
# 每天凌晨 3 点
0 3 * * * cd /Users/niuniu/programs/docker && bash scripts/backup/backup.sh
新增站点
无需修改脚本——自动发现 *-ai/docker-compose.yml 中含 DB 的站点。新站点只需在 backup.sh 的 case 语句中添加专用备份逻辑(或走 wildcard 通用备份)。
注意事项
- 备份前自动执行 WAL checkpoint,确保数据库完整性
- 恢复会重启相关容器,短暂影响服务
- Gitea 代码仓库备份较大(~130M),可单独调整备份频率
--full 灾难备份不含 uploads 等动态文件,仅保存数据库 + 代码仓库 + 配置
- 建议定期验证备份文件可恢复性