跳转至

基础设施备份与恢复方案

[!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 系统崩溃需重装:

  1. 重装系统: 运行 DD 脚本安装 Debian 12。
  2. 基础环境: 配置 User, SSH, Install Docker, Install Rclone。
  3. 恢复配置:
    # 从 Git 拉取所有配置
    git clone git@github.com:your/infra-repo.git /home/ops/docker
    
  4. 恢复数据:
    # 从网盘下载最新备份
    rclone copy remote:backup/london3/latest_backup.tar.gz /tmp/
    tar -xzf /tmp/latest_backup.tar.gz -C /
    
  5. 启动服务:
    cd /home/ops/docker
    docker compose up -d
    # 或 docker stack deploy ...