温馨提示×

GitLab在Linux系统中如何进行备份和恢复

小樊
32
2025-12-24 10:34:51
栏目: 智能运维

GitLab在Linux系统中的备份与恢复

一 备份

  • 使用内置命令创建备份(Omnibus 包推荐)
    • 执行:sudo gitlab-backup create(等效于 sudo gitlab-rake gitlab:backup:create)。备份默认生成在 /var/opt/gitlab/backups/,文件名形如:1750765308_2025_06_24_16.7.6_gitlab_backup.tar。建议同时备份配置文件:sudo tar -cf gitlab_conf.tar /etc/gitlab。备份内容包含仓库、数据库、用户与权限等核心数据。
  • 修改备份目录与保留策略
    • 编辑 /etc/gitlab/gitlab.rb
      • gitlab_rails['manage_backup_path'] = true
      • gitlab_rails['backup_path'] = "/data/gitlab/backups"
      • gitlab_rails['backup_archive_permissions'] = 0644
      • gitlab_rails['backup_keep_time'] = 604800(保留 7 天,单位为秒)
    • 使配置生效:sudo gitlab-ctl reconfigure
  • 定时与远程备份
    • 定时任务示例(每天 02:00):0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1CRON=1 用于抑制非错误输出)。
    • 远程备份示例(免密 SCP):在备份服务器放置公钥后,scp -P 22 /var/opt/gitlab/backups/*.tar root@192.0.2.10:/data/backup/。可配合日志与清理脚本实现全自动化。

二 恢复

  • 版本与环境检查
    • 恢复目标机的 GitLab 版本应与备份时一致或兼容(推荐相同版本)。查看版本:sudo cat /opt/gitlab/version-manifest.txt | grep "gitlab-ce"
  • 停止关键服务
    • 执行:sudo gitlab-ctl stop pumasudo gitlab-ctl stop sidekiq(或一次性 sudo gitlab-ctl stop)。
  • 放置备份文件
    • 将备份 tar 包放到 /var/opt/gitlab/backups/(如使用自定义备份目录,请放到相应目录)。
  • 执行恢复
    • 执行:sudo gitlab-backup restore BACKUP=1750765308_2025_06_24_16.7.6(只需填写时间戳前缀,命令会自动补全)。过程中会提示确认,输入 yes 继续。
  • 启动与验证
    • 启动:sudo gitlab-ctl start;检查状态:sudo gitlab-ctl status。访问 Web 页面验证项目、用户、权限是否正常。

三 迁移与注意事项

  • 迁移场景
    • 将备份文件与配置文件一同迁移到新机器:
      • 数据:scp /var/opt/gitlab/backups/1750*.tar target:/var/opt/gitlab/backups/
      • 配置:scp gitlab_conf.tar target:~/ && ssh target "sudo tar -xf gitlab_conf.tar -C /" && sudo gitlab-ctl reconfigure
    • 在新机器上按“恢复”步骤执行。
  • 重要注意事项
    • 版本要求:恢复时 GitLab 版本需与备份时一致或兼容,避免对象/扩展不兼容。
    • 服务停止:恢复前务必停止 Puma/Sidekiq,避免写入冲突。
    • 配置文件与密钥:备份命令不会包含 /etc/gitlab/SSH 主机密钥,迁移时请单独备份与恢复。
    • 数据库扩展:若恢复时报错如 “must be owner of extension pg_trgm/btree_gist”,可在恢复前用 gitlab-psql 删除扩展或调整属主后再恢复,恢复后必要时重建扩展。
    • 定期演练:定期在测试环境验证备份可用性,并校验仓库、LFS、Runner、Pages、Webhooks 等是否完整。

0