# 备份与恢复 统一备份恢复工具,支持远程(从本地 Mac 操作服务器)和本地(直接在服务器上执行)两种模式。 ## 快速上手 ```bash # 备份 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 # 远程(默认) bash scripts/backup/backup.sh # 本地 bash scripts/backup/backup.sh --local bash scripts/backup/restore.sh --local --full full-backup.tar.gz ``` ## 新服务器灾难恢复流程 ```bash # 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/` | ## 自动备份 ```bash # 每天凌晨 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 等动态文件,仅保存数据库 + 代码仓库 + 配置 - 建议定期验证备份文件可恢复性