Debian环境下GitLab如何备份恢复
小樊
39
2025-11-23 13:45:04
Debian环境下GitLab备份与恢复
一 备份步骤
- 停止写入服务(可选但推荐):执行 sudo gitlab-ctl stop unicorn 与 sudo gitlab-ctl stop sidekiq,减少备份过程中数据变更带来的不一致风险。
- 创建备份包:执行 sudo gitlab-rake gitlab:backup:create,默认生成在 /var/opt/gitlab/backups,文件名形如 <时间戳>_gitlab_backup.tar。
- 修改备份路径与保留时间:编辑 /etc/gitlab/gitlab.rb,设置 gitlab_rails[‘backup_path’] = “/data/gitlab/backups” 与 gitlab_rails[‘backup_keep_time’] = 604800(保留7天,单位为秒),保存后执行 sudo gitlab-ctl reconfigure 使配置生效。
- 定时备份示例:每天 02:00 自动备份
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
- 远程备份(可选):将备份同步到远端存储,例如
scp /var/opt/gitlab/backups/*.tar user@remote:/path/to/remote/backups
- 配置文件与敏感信息单独备份(强烈建议):手动备份 /etc/gitlab/gitlab.rb、/etc/gitlab/gitlab-secrets.json 与 /etc/gitlab/ssl/ 等,这些不会自动包含在备份包中。
二 恢复步骤
- 准备与版本匹配:在新/目标服务器安装同版本(或更高版本)GitLab,并将备份文件放到目标机器的 /var/opt/gitlab/backups(或 gitlab.rb 中配置的 backup_path)。
- 停止写入服务:执行 sudo gitlab-ctl stop unicorn 与 sudo gitlab-ctl stop sidekiq。
- 执行恢复:执行 sudo gitlab-rake gitlab:backup:restore BACKUP=BACKUP_NUMBER(BACKUP_NUMBER 为文件名中的时间戳前缀,如 1494780002;也可使用完整文件名前缀)。恢复过程中会出现两次确认,输入 yes 继续。
- 启动服务:执行 sudo gitlab-ctl start(或 sudo gitlab-ctl restart)。
- 验证:登录 Web 界面检查项目、用户、Runner、CI/CD 变量与配置是否完整一致。
三 迁移场景要点
- 同版本迁移:按“备份→拷贝到新机→恢复→启动→验证”的顺序执行,确保网络、存储、域名与 EXTERNAL_URL 配置正确。
- 跨版本迁移:目标实例版本需与源实例一致或更高,避免对象/结构不兼容。
- 配置与密钥:将旧机的 gitlab.rb 与 gitlab-secrets.json 覆盖到新机对应位置,再执行 reconfigure,以确保加密属性、LDAP/SMTP、Runner 注册等正常。
四 自动化与运维建议
- 备份保留策略:在 gitlab.rb 中设置 backup_keep_time(秒),例如 604800 表示保留7天;也可配合 find 或脚本定期清理过期包。
- 定时任务示例:
- 每天 02:00 备份:0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
- 每周一、三、五 08:30 备份:0 8 * * 1,3,5 /bin/sh /var/opt/gitlab/backups/gitlabbak.sh
- 备份脚本范式:
#!/bin/bash
/opt/gitlab/bin/gitlab-rake gitlab:backup:create
sleep 10
find /var/opt/gitlab/backups -name “*.tar” -type f -mtime +10 -delete
- 异地容灾:结合 rsync/scp/对象存储定期将备份文件复制到远程位置,做到本地短期保留、异地长期留存。
五 常见问题与注意事项
- 版本要求:恢复时目标 GitLab 版本需与备份时一致或更高,避免元数据/对象不兼容。
- 配置文件不在备份包:务必单独备份并妥善存放 gitlab.rb、gitlab-secrets.json、SSL 证书等敏感配置。
- 覆盖风险:恢复会覆盖现有数据,操作前确认备份文件正确、环境一致,并在低峰时段执行。
- 服务状态:恢复前后注意 unicorn/sidekiq 的停启顺序,必要时执行全量重启(gitlab-ctl restart)。
- 定期演练:定期在测试环境验证备份可用性,确保真实故障时可快速恢复。