温馨提示×

CentOS上GitLab如何备份

小樊
41
2025-11-23 19:43:08
栏目: 智能运维

CentOS 上 GitLab 备份与恢复实操指南

一 备份范围与准备

  • 备份内容应包含:代码仓库与数据库(由 GitLab 自带工具导出)、以及关键配置与密钥。建议额外备份:/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json,如使用自签证书则同时备份 /etc/gitlab/ssl/。这些文件不包含在默认备份包中,但对恢复至关重要。默认备份文件位于 /var/opt/gitlab/backups,文件名通常形如 <时间戳>_gitlab_backup.tar

二 手动创建备份

  • 执行备份命令(Omnibus 包安装):
    • 命令:sudo gitlab-rake gitlab:backup:create
    • 完成后在 /var/opt/gitlab/backups 查看生成的 .tar 包。
  • 仅备份数据库(可选,便于拆分存储):
    • 命令:gitlab-rake gitlab:backup:create SKIP=artifacts,builds,registry,pages,lfs,uploads
  • 源码安装(非 Omnibus)路径可能不同,请进入安装目录后执行相同 rake 命令。

三 配置备份路径与保留策略

  • 编辑配置文件:sudo vim /etc/gitlab/gitlab.rb
  • 常用参数示例:
    • 自定义备份目录:
      • 设置:gitlab_rails[‘backup_path’] = “/mnt/backups”
      • 如目录不存在需先创建,并确保 GitLab 用户有读写权限。
    • 保留时间(秒),例如保留 7 天
      • 设置:gitlab_rails[‘backup_keep_time’] = 604800
    • 归档权限(可选):
      • 设置:gitlab_rails[‘backup_archive_permissions’] = 0644
  • 使配置生效:sudo gitlab-ctl reconfigure

四 定时自动备份与远程拷贝

  • 使用 cron 定时(推荐以 root 身份添加任务):
    • 示例(每天 02:00 执行):
      • 命令:0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
    • 说明:CRON=1 为 GitLab 的标记参数,用于区分定时任务产生的日志与告警。
  • 远程备份到备份服务器(免密 SSH 示例):
    • 在备份服务器创建备份目录(如 /data/gitlab-backups),在 GitLab 服务器生成 SSH 密钥并将公钥追加到备份服务器的 ~/.ssh/authorized_keys,确保权限为 600/700
    • 在 GitLab 服务器添加定时任务(示例每天 03:00 同步到备份服务器):
      • 命令:0 3 * * * rsync -avz --delete /var/opt/gitlab/backups/ backup_user@192.0.2.10:/data/gitlab-backups/
    • 如需压缩归档后再传,可先打包再 scp/rsync。

五 恢复与注意事项

  • 恢复步骤(Omnibus 包):
    • 将备份文件放到目标机器的 /var/opt/gitlab/backups(或配置中指定的 backup_path)。
    • 停止相关进程以确保一致性:
      • 命令:gitlab-ctl stop unicorngitlab-ctl stop sidekiq
    • 执行恢复(使用备份编号,即文件名中 下划线前 的时间戳,如 1393513186):
      • 命令:gitlab-rake gitlab:backup:restore BACKUP=1393513186
    • 启动服务:gitlab-ctl start
    • 如配置了 Puma,恢复时可能需要改为停止 puma 而非 unicorn
  • 关键注意事项:
    • 版本一致性:恢复环境的 GitLab 版本应尽量与备份时一致,避免不兼容。
    • 配置与密钥:恢复后确保 gitlab.rbgitlab-secrets.json 已正确放置并权限正确,否则可能导致 2FARunnerLDAP 等功能异常。
    • 存储与保留:备份文件较大,需预留足够磁盘空间;按业务需求设置 backup_keep_time 并定期清理。
    • 一致性:恢复前尽量避免新的写入操作,减少数据不一致风险。
    • 演练与校验:定期在测试环境验证备份的完整性与可恢复性。

0