Files
user-system/docs/runbooks/03-backup-restore.md
long-agent 3b0bcf0ff7 fix: P0问题修复 - JWT配置、安全扫描、备份、Runbook
P0 问题修复(按照 gap analysis):

1. JWT密钥配置修复
   - config.yaml 移除占位符,改为空字符串
   - 添加测试验证 JWT_SECRET 环境变量覆盖功能

2. Docker 部署完善
   - 添加 deploy.resources 限制(内存 512M,CPU 0.5)
   - 添加 healthcheck 健康检查
   - 添加 restart: unless-stopped 重启策略

3. 安全扫描集成
   - 创建 scripts/security/run-gosec.sh 安全扫描脚本
   - 创建 scripts/security/workflow-template.yml CI工作流模板
   - 运行 gosec 扫描发现 6 个 HIGH 级别整数溢出问题

4. 备份自动化
   - 创建 scripts/backup/backup.sh 自动备份脚本
   - 支持 SQLite 数据库和配置文件备份
   - 支持备份验证、自动清理、恢复功能

5. Runbook 文档
   - 创建 docs/runbooks/ 目录
   - 添加 4 个核心 Runbook:服务启动、服务停止、备份恢复、日志分析
   - 添加 README.md 索引文档
2026-04-08 22:31:43 +08:00

3.2 KiB
Raw Blame History

备份恢复 Runbook

触发条件

  • 数据损坏或丢失
  • 升级失败需要回滚
  • 灾难恢复

警告

恢复操作会覆盖当前数据!

在执行恢复前:

  1. 确认当前数据已无法修复
  2. 记录当前状态
  3. 通知相关人员

恢复步骤

1. 确认备份存在

# 列出所有备份
./scripts/backup/backup.sh --list

# 验证最新备份
./scripts/backup/backup.sh --verify

2. 停止服务

# 停止服务(保持容器运行以便回滚)
docker compose stop

3. 备份当前数据(以防万一)

# 复制当前数据库
cp ./data/user_management.db ./data/user_management.db.bak.$(date +%Y%m%d)

# 复制当前配置
cp ./configs/config.yaml ./configs/config.yaml.bak.$(date +%Y%m%d)

4. 执行恢复

# 从最新备份恢复
./scripts/backup/backup.sh --restore

# 或指定特定备份恢复
# 1. 解压备份到临时目录
mkdir -p /tmp/restore
tar -xzf ./backups/user-management_YYYYMMDD_HHMMSS.tar.gz -C /tmp/restore

# 2. 手动复制文件
cp /tmp/restore/*/database.db ./data/user_management.db
cp /tmp/restore/*/config.yaml ./configs/config.yaml

# 3. 清理临时目录
rm -rf /tmp/restore

5. 验证恢复

# 重启服务
docker compose restart

# 检查服务状态
docker compose ps

# 检查日志无错误
docker compose logs | grep -i error

# 验证数据库
sqlite3 ./data/user_management.db "SELECT COUNT(*) FROM users;"

# 测试 API
curl http://localhost:8080/api/v1/health

6. 验证数据完整性

# 检查用户数量
curl http://localhost:8080/api/v1/users | jq '.total'

# 检查最近的日志
curl http://localhost:8080/api/v1/logs/login | jq '.total'

时间点恢复Point-in-Time Recovery

如果需要恢复到特定时间点:

  1. 找到最近的备份

    ls -la ./backups/
    
  2. 识别恢复点之前的数据

    • 检查备份中的数据时间戳
  3. 执行恢复

    # 解压备份
    mkdir -p /tmp/restore
    tar -xzf ./backups/user-management_YYYYMMDD_HHMMSS.tar.gz -C /tmp/restore
    
  4. 手动恢复数据

    # 使用 SQLite 的挽回工具
    sqlite3 ./data/user_management.db
    

回滚步骤

如果恢复失败:

# 恢复之前的手动备份
cp ./data/user_management.db.bak.* ./data/user_management.db
cp ./configs/config.yaml.bak.* ./configs/config.yaml

# 重启服务
docker compose restart

恢复后检查清单

  • 服务正常运行
  • 健康检查通过
  • 用户数据完整
  • 配置正确
  • 日志正常
  • 通知相关人员恢复完成

灾难恢复(全面故障)

如果服务器完全不可用:

  1. 在新服务器上部署

    # 克隆代码
    git clone <repository-url>
    cd user-management
    
    # 安装 Docker
    ./scripts/deploy/simple_deploy.sh
    
  2. 恢复数据

    # 从备份服务器复制备份文件
    scp user@backup-server:/path/to/backups/*.tar.gz ./backups/
    
    # 执行恢复
    ./scripts/backup/backup.sh --restore
    
  3. 验证服务

    curl http://localhost:8080/api/v1/health
    

联系人

  • 运维负责人:[填写]
  • DBA如有[填写]
  • 项目经理:[填写]