温馨提示×

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.rbgitlab-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.rbgitlab-secrets.json、SSL 证书等敏感配置。
  • 覆盖风险:恢复会覆盖现有数据,操作前确认备份文件正确、环境一致,并在低峰时段执行。
  • 服务状态:恢复前后注意 unicorn/sidekiq 的停启顺序,必要时执行全量重启(gitlab-ctl restart)。
  • 定期演练:定期在测试环境验证备份可用性,确保真实故障时可快速恢复。

0