温馨提示×

GitLab在Linux上如何备份

小樊
36
2025-12-10 15:31:00
栏目: 智能运维

Linux上备份GitLab的完整做法

一 备份范围与准备

  • 备份对象应包含两部分:
    1. 应用数据(仓库、数据库、上传文件、CI变量等),由内置 rake 任务导出为 tar 包;
    2. 配置与密钥(位于 /etc/gitlab/,尤其是 gitlab-secrets.jsongitlab.rb),需单独离线保存,避免与加密数据一同丢失。
  • 建议将配置与备份分开放置,并妥善保护密钥文件。必要时一并备份 /etc/ssh/ 下的主机密钥,避免机器恢复后出现中间人告警。

二 手动创建备份

  • 应用数据备份(推荐):执行内置任务,备份包默认生成在 /var/opt/gitlab/backups
    命令:sudo gitlab-rake gitlab:backup:create
    如需自定义备份目录,在 /etc/gitlab/gitlab.rb 中设置:
    gitlab_rails[‘backup_path’] = ‘/your/backup/path’
    修改后执行:sudo gitlab-ctl reconfigure
  • 配置文件备份:使用专用命令导出 /etc/gitlab 为 tar 归档。
    命令:sudo gitlab-ctl backup-etc
    可指定目录:sudo gitlab-ctl backup-etc --backup-path /secret/gitlab/backups
    归档默认仅 root 可读写,安全性更高。

三 自动化与保留策略

  • 定时备份应用数据(示例:每天 02:00 执行):
    编辑 root 的 crontab:sudo crontab -e -u root
    添加:0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
  • 定时备份配置(示例:每周二至周六 04:15 执行):
    15 04 * * 2-6 gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/
  • 备份保留时间:在 /etc/gitlab/gitlab.rb 中设置保留秒数(如 7 天 = 604800):
    gitlab_rails[‘backup_keep_time’] = 604800
    清理过期配置备份:sudo gitlab-ctl backup-etc --delete-old-backups
    说明:配置备份的保留时间同样受 backup_keep_time 控制。

四 备份文件校验与异地容灾

  • 校验要点:
    • 查看备份目录是否生成 .tar 文件:ls -l /var/opt/gitlab/backups
    • 定期做恢复演练,确保备份可用;备份文件含敏感信息,需限制访问权限并加密存储。
  • 异地/离线拷贝示例(在备份完成后执行):
    • 拷贝最新备份到远程:
      scp /var/opt/gitlab/backups/$(ls -t /var/opt/gitlab/backups | head -n1) user@backup-server:/path/to/backup/
    • 远程按时间清理旧备份(示例保留 3 天):
      find /path/to/backup/ -type f -mtime +3 -name ‘.tar’ -delete
      提示:也可在脚本中结合 find、scp、日志轮转实现全自动本地+异地备份与清理。

五 恢复要点与常见注意事项

  • 恢复前准备:
    • 目标实例的 GitLab 版本需与备份时相同或更高
    • 为保证一致性,先停止相关进程:sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq。
  • 执行恢复:
    • 将备份文件放到 /var/opt/gitlab/backups(或已配置的 backup_path);
    • 执行:sudo gitlab-rake gitlab:backup:restore BACKUP=<时间戳前缀>
      例如:BACKUP=1687460936_2023_06_22_14.3.3(不要带 “_gitlab_backup.tar” 后缀);
    • 恢复完成后启动服务:sudo gitlab-ctl start(或 restart)。
  • 重要提醒:
    • 仅备份 rake 包不包含 /etc/gitlabgitlab-secrets.json;恢复后若缺失密钥,2FASecure Variables 将不可用;
    • 恢复后建议执行:sudo gitlab-ctl reconfigure;
    • 若使用容器/PgBouncer/Patroni,备份命令与挂载卷策略不同,需按官方说明调整。

0