Debian上GitLab的备份与恢复流程
一 备份流程
手动创建备份
在 Omnibus 安装下,执行备份命令:sudo gitlab-backup create(GitLab 12.2+ 推荐),或 sudo gitlab-rake gitlab:backup:create(旧版本)。备份文件默认生成在 /var/opt/gitlab/backups,文件名形如 <时间戳>_gitlab_backup.tar。为保证一致性,可在备份前停止写入服务:sudo gitlab-ctl stop puma 与 sidekiq(老版本为 unicorn 与 sidekiq)。备份完成后启动服务:sudo gitlab-ctl start。
自定义备份路径与保留时间
编辑 /etc/gitlab/gitlab.rb:
gitlab_rails[‘backup_path’] = “/data/gitlab/backups”
gitlab_rails[‘backup_keep_time’] = 604800 # 保留7天(单位:秒)
修改后执行:sudo gitlab-ctl reconfigure 使配置生效。
定时自动备份
使用 Cron 定时执行备份,例如每天 02:00:
0 2 * * * /opt/gitlab/bin/gitlab-backup create
如需保留策略,可配合 find 删除过期包,或在 gitlab.rb 中设置 backup_keep_time。
配置文件与密钥的单独备份
备份 /etc/gitlab/gitlab.rb、/etc/gitlab/gitlab-secrets.json 及 /etc/ssl/(证书)等敏感配置与证书,这些默认不包含在备份包中,迁移或灾难恢复时必须单独妥善保存与恢复。
远程或离线归档
将备份文件拷贝到远程存储或离线介质,例如:
scp /var/opt/gitlab/backups/*.tar user@remote:/path/to/backups。
二 恢复流程
准备与版本匹配
在新环境安装同版本(或更高版本)的 GitLab,停止相关服务:sudo gitlab-ctl stop puma 与 sidekiq。将备份文件放到 /var/opt/gitlab/backups,并确保文件属主为 git:git(如需要执行:chown git:git <备份文件>)。如跨服务器恢复,先同步上述配置文件与密钥。
执行恢复
指定备份编号或时间戳前缀进行恢复:
迁移时的密钥与校验
跨服务器恢复务必恢复 gitlab-secrets.json,否则可能导致数据库加密字段无法解密。恢复后可运行:sudo gitlab-rake gitlab:doctor:secrets 检查密钥可用性,并可用 sudo gitlab-rake gitlab:check SANITIZE=true 做健康检查;必要时对制品、LFS、上传等做完整性校验。
三 关键注意事项
版本要求
恢复目标 GitLab 的版本应与备份时一致或更高,避免不兼容问题。
服务与一致性
备份时建议停止 puma/sidekiq(老版本为 unicorn/sidekiq),恢复时同样先停服务,恢复完成再启动,确保数据一致性。
配置文件与密钥
备份包不包含 gitlab.rb 与 gitlab-secrets.json,迁移/恢复必须单独处理,否则可能出现无法登录、CI 变量或加密数据不可用等问题。
备份保留策略
通过 backup_keep_time 或外部脚本定期清理过期备份,避免磁盘占满。
定期演练
定期在测试环境演练恢复流程,验证备份可用性与完整性,降低灾难恢复风险。