基础设施备份与恢复方案¶
[!NOTE] 本文档保留当前这套 infra 的备份、恢复和灾难恢复方案,属于正式运维指南的一部分。
本文档回答两个问题:
- 当前这套 infra 怎么备份
- 某台关键节点重装后怎么恢复
1. 方案概览 (Infra Backup & Restore)¶
为了实现“方便”且“可靠”的恢复,我们采用 GitOps (配置) + Rclone (数据) 的轻量级方案。
1.1 方案架构¶
- 配置 (Config): 所有的
docker-compose.yml,traefik.yaml,.env(加密) 存放在私有 Git 仓库。 - 数据 (Data): 数据库文件、Bitwarden 数据通过 Rclone 定期同步到廉价对象存储 (如 Cloudflare R2 / Backblaze B2) 或个人网盘 (OneDrive/Google Drive)。
1.2 目录结构规范¶
建议在每台服务器上保持一致的目录结构,方便脚本批量处理:
/home/ops/docker/
├── .env # 全局环境变量 (Token, Passwords)
├── traefik/
│ ├── docker-compose.yml
│ └── config/
├── portainer/
│ └── docker-compose.yml
├── apps/
│ ├── autopcr/
│ └── pcrdb/
└── backup_scripts/ # 自动备份脚本
1.3 备份策略 (Backup Policy)¶
A. 配置文件 (Git)¶
- 频率: 每次修改配置后手动 Push。
- 操作:
cd /home/ops/docker git add . git commit -m "Update config: Add new service" git push
B. 持久化数据 (Rclone)¶
- 频率: 每天凌晨 3 点自动执行 (Crontab)。
- 工具:
rclone(支持几乎所有网盘)。 - 脚本示例 (
backup.sh):#!/bin/bash BACKUP_DIR="/home/ops/docker/apps" REMOTE_DEST="remote:backup/london3" # 配置好的 Rclone 远程名称 DATE=$(date +%F) # 1. 停止重数据服务 (可选,为了数据一致性,如 Bitwarden/MySQL) # docker stop bitwarden # 2. 打包数据目录 (Exclude logs/tmp) tar -czf /tmp/backup_${DATE}.tar.gz ${BACKUP_DIR} # 3. 上传到网盘 rclone copy /tmp/backup_${DATE}.tar.gz ${REMOTE_DEST}/ --delete-older-than 7d # 4. 恢复服务 & 清理 # docker start bitwarden rm /tmp/backup_${DATE}.tar.gz
2. 恢复流程 (Disaster Recovery)¶
假设 London-3 系统崩溃需重装:
- 重装系统: 运行 DD 脚本安装 Debian 12。
- 基础环境: 配置 User, SSH, Install Docker, Install Rclone。
- 恢复配置:
# 从 Git 拉取所有配置 git clone git@github.com:your/infra-repo.git /home/ops/docker - 恢复数据:
# 从网盘下载最新备份 rclone copy remote:backup/london3/latest_backup.tar.gz /tmp/ tar -xzf /tmp/latest_backup.tar.gz -C / - 启动服务:
cd /home/ops/docker docker compose up -d # 或 docker stack deploy ...