温馨提示×

GitLab在Linux上的备份策略

小樊
37
2025-11-28 20:37:36
栏目: 智能运维

Linux 上 GitLab 备份策略

一 核心范围与关键原则

  • 备份对象应覆盖三类数据:
    1. 应用数据(仓库、数据库、上传文件等);2) 配置与密钥(/etc/gitlab 下的配置,尤其是 gitlab-secrets.json 与可能的 gitlab.rb,涉及 2FA、Secure Files 等敏感数据的解密密钥);3) 主机关键材料(如 /etc/ssh 下的 SSH 主机密钥,避免机器恢复后出现中间人告警)。
  • 分离存放原则:将配置与密钥的备份与应用备份分开保存,降低加密数据与其密钥同时丢失或泄露的风险。
  • 版本一致性:执行恢复时,GitLab 版本应与备份时相同或更新,否则可能出现兼容性问题。
  • 保留策略:为备份设置保留周期并定期清理,避免无限制增长占用存储。

二 备份组件与存放位置

  • 应用数据备份:使用内置工具创建归档,默认生成到 /var/opt/gitlab/backups。可通过 gitlab.rbgitlab_rails[‘backup_path’] 指定自定义目录,修改后执行 gitlab-ctl reconfigure 生效。
  • 配置与密钥备份:使用 gitlab-ctl backup-etc,归档默认位于 /etc/gitlab/config_backup/,文件权限仅对 root 可读。可指定 –backup-path 自定义目录。
  • 保留时间:通过 gitlab.rbgitlab_rails[‘backup_keep_time’] 设置保留秒数(如 604800 表示 7 天),默认 0 表示不自动清理。配置备份支持按该保留时间清理,执行 gitlab-ctl backup-etc --delete-old-backups 删除过期备份。

三 自动化与异地容灾

  • 定时任务示例(root 用户):
    • 应用数据:每天 02:00 执行备份
      • 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
      • 说明:CRON=1 用于抑制非错误输出,适合定时任务。
    • 配置与密钥:每周 周二至周六 04:15 备份并拷贝最新一份到安全目录
      • 15 04 * * 2-6 gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/
  • 远程/离线拷贝思路:
    • 使用 rsync/scp/var/opt/gitlab/backups/secret/gitlab/backups 定期同步到独立存储或备份服务器,实现离线/异地容灾。
    • 建议配合 SSH 免密登录、按时间窗口仅传输新增/变更的归档,减少带宽与存储占用。

四 恢复流程与注意事项

  • 恢复步骤要点:
    1. 将备份归档放到配置的 backup_path(默认 /var/opt/gitlab/backups);
    2. 为保持一致性,先停止数据面服务:gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq
    3. 执行恢复(两种等效方式):
      • gitlab-rake gitlab:backup:restore BACKUP=时间戳前缀
      • 或 gitlab-backup restore BACKUP=时间戳前缀
    4. 启动服务:gitlab-ctl start,必要时执行 gitlab-ctl reconfigure
    5. 访问 Web 界面并抽样验证项目、用户、CI 变量与 2FA 状态。
  • 重要注意事项:
    • 恢复时 GitLab 版本需与备份时相同或更新
    • 若丢失 gitlab-secrets.json,将导致 2FA 用户无法登录且 Secure Variables 丢失;
    • 全机器恢复时,记得同时恢复 /etc/ssh 主机密钥以避免中间人告警;
    • 定期演练恢复流程与校验备份可用性,确保真实可用。

五 推荐实践清单

  • 配置与密钥:每日执行 gitlab-ctl backup-etc,与应用备份分目录/分存储保存,设置 backup_keep_time(如 7–30 天)。
  • 应用数据:每日定时全量备份,保留 7–30 天;每周将归档同步到异地/离线存储。
  • 监控与告警:为备份任务添加日志与告警(失败告警、磁盘空间阈值告警)。
  • 演练与审计:每季度进行一次恢复演练并留存报告,定期审计备份与访问控制。

0