温馨提示×

CentOS上GitLab的备份与恢复策略

小樊
34
2025-11-07 21:57:42
栏目: 智能运维

CentOS上GitLab备份与恢复策略

一、备份策略

1. 备份方式与命令

使用GitLab提供的gitlab-rake命令创建全量备份,涵盖仓库代码、数据库(PostgreSQL)、用户/组权限、SSH密钥等所有关键数据。执行命令:
sudo gitlab-rake gitlab:backup:create
该命令会在默认路径生成压缩包(格式:TIMESTAMP_gitlab_backup.tar,如1700000000_2025-03-17_15.0.0_gitlab_backup.tar)。

2. 备份路径配置

默认备份路径为/var/opt/gitlab/backups,可通过修改/etc/gitlab/gitlab.rb配置文件调整:

gitlab_rails['backup_path'] = "/mnt/backups"  # 自定义路径(如挂载的磁盘分区)
gitlab_rails['backup_archive_permissions'] = 0644  # 备份文件权限(可选)

修改后需运行sudo gitlab-ctl reconfigure使配置生效。

3. 自动化备份设置

通过crontab设置定时任务,实现每日自动备份(如凌晨2点):

crontab -e

添加以下行(CRON=1表示立即执行,忽略定时任务的延迟):
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
保存后,cron会自动执行备份任务。

4. 远程备份增强安全性

使用rsync将本地备份同步到远程服务器(如remote-server-ip/remote/backups目录),避免本地磁盘故障导致数据丢失:

rsync -avz /var/opt/gitlab/backups/ user@remote-server-ip:/remote/backups/

可将此命令添加到crontab中,与本地备份同步执行。

5. 备份保留策略

通过gitlab_rails['backup_keep_time']配置项设置备份保留时间(单位:秒),例如保留30天:

gitlab_rails['backup_keep_time'] = 30 * 24 * 60 * 60  # 30天

修改后运行sudo gitlab-ctl reconfigure,GitLab会自动清理过期备份。

二、恢复策略

1. 恢复前准备

  • 停止相关服务:确保数据一致性,停止unicorn(应用服务器)、sidekiq(后台任务处理器)等服务:
    sudo gitlab-ctl stop unicorn
    sudo gitlab-ctl stop sidekiq
    
    若需彻底隔离数据,可同时停止nginx(Web服务器)。

2. 恢复操作步骤

  • 放置备份文件:将备份文件(如1700000000_2025-03-17_15.0.0_gitlab_backup.tar)复制到备份路径(如/var/opt/gitlab/backups)。
  • 执行恢复命令:使用BACKUP参数指定备份文件的时间戳(即文件名中的TIMESTAMP部分):
    sudo gitlab-rake gitlab:backup:restore BACKUP=1700000000
    
    执行后会提示“是否覆盖现有数据”,输入yes确认。

3. 恢复后操作

  • 启动GitLab服务:恢复完成后,启动所有服务:
    sudo gitlab-ctl start
    
    或逐一启动:sudo gitlab-ctl start unicorn && sudo gitlab-ctl start sidekiq && sudo gitlab-ctl start nginx
  • 验证恢复结果:通过GitLab Web界面登录,检查仓库、用户、权限等数据是否完整,确保服务正常运行。

4. 版本一致性要求

恢复时,GitLab版本必须与备份时的版本一致或更高(如备份时为15.0.0,恢复时可使用15.0.x或15.1.x)。若版本不匹配,需先升级/降级GitLab至对应版本,再进行恢复。

三、注意事项

  • 数据一致性:备份前确保GitLab服务稳定,无正在进行的写入操作(如推送代码、修改用户信息),避免备份数据损坏。
  • 备份文件安全:备份文件包含敏感信息(如用户密码哈希、SSH密钥),需存储在安全位置(如加密磁盘、私有云存储),限制访问权限。
  • 定期测试恢复:每季度至少测试一次备份文件的恢复流程,确保备份有效性(如备份文件未损坏、恢复命令能正常执行)。
  • 监控备份状态:通过ls -l /var/opt/gitlab/backups定期检查备份文件是否存在,通过du -sh /var/opt/gitlab/backups监控备份文件大小,避免磁盘空间耗尽。

0