GitLab在Linux上的备份策略
小樊
37
2025-11-28 20:37:36
Linux 上 GitLab 备份策略
一 核心范围与关键原则
- 备份对象应覆盖三类数据:
- 应用数据(仓库、数据库、上传文件等);2) 配置与密钥(/etc/gitlab 下的配置,尤其是 gitlab-secrets.json 与可能的 gitlab.rb,涉及 2FA、Secure Files 等敏感数据的解密密钥);3) 主机关键材料(如 /etc/ssh 下的 SSH 主机密钥,避免机器恢复后出现中间人告警)。
- 分离存放原则:将配置与密钥的备份与应用备份分开保存,降低加密数据与其密钥同时丢失或泄露的风险。
- 版本一致性:执行恢复时,GitLab 版本应与备份时相同或更新,否则可能出现兼容性问题。
- 保留策略:为备份设置保留周期并定期清理,避免无限制增长占用存储。
二 备份组件与存放位置
- 应用数据备份:使用内置工具创建归档,默认生成到 /var/opt/gitlab/backups。可通过 gitlab.rb 的 gitlab_rails[‘backup_path’] 指定自定义目录,修改后执行 gitlab-ctl reconfigure 生效。
- 配置与密钥备份:使用 gitlab-ctl backup-etc,归档默认位于 /etc/gitlab/config_backup/,文件权限仅对 root 可读。可指定 –backup-path 自定义目录。
- 保留时间:通过 gitlab.rb 的 gitlab_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 免密登录、按时间窗口仅传输新增/变更的归档,减少带宽与存储占用。
四 恢复流程与注意事项
- 恢复步骤要点:
- 将备份归档放到配置的 backup_path(默认 /var/opt/gitlab/backups);
- 为保持一致性,先停止数据面服务:gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq;
- 执行恢复(两种等效方式):
- gitlab-rake gitlab:backup:restore BACKUP=时间戳前缀
- 或 gitlab-backup restore BACKUP=时间戳前缀
- 启动服务:gitlab-ctl start,必要时执行 gitlab-ctl reconfigure;
- 访问 Web 界面并抽样验证项目、用户、CI 变量与 2FA 状态。
- 重要注意事项:
- 恢复时 GitLab 版本需与备份时相同或更新;
- 若丢失 gitlab-secrets.json,将导致 2FA 用户无法登录且 Secure Variables 丢失;
- 全机器恢复时,记得同时恢复 /etc/ssh 主机密钥以避免中间人告警;
- 定期演练恢复流程与校验备份可用性,确保真实可用。
五 推荐实践清单
- 配置与密钥:每日执行 gitlab-ctl backup-etc,与应用备份分目录/分存储保存,设置 backup_keep_time(如 7–30 天)。
- 应用数据:每日定时全量备份,保留 7–30 天;每周将归档同步到异地/离线存储。
- 监控与告警:为备份任务添加日志与告警(失败告警、磁盘空间阈值告警)。
- 演练与审计:每季度进行一次恢复演练并留存报告,定期审计备份与访问控制。