温馨提示×

如何在Debian上备份GitLab

小樊
36
2026-01-01 21:04:18
栏目: 智能运维

在 Debian 上备份 GitLab 的完整做法

一 准备与关键注意事项

  • 备份命令仅打包应用数据(仓库、数据库、上传等),不会包含敏感配置文件。请务必单独备份:/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json、以及 /etc/ssl/(证书与密钥)。恢复时缺少这些文件可能导致无法登录或 Runner 注册失败。备份文件还可能包含敏感信息,需妥善保护与传输加密。恢复前后建议保持 GitLab 版本一致,避免不兼容问题。

二 手动创建备份

  • Omnibus 包安装(Debian 常见)常用两种方式,任选其一:
    • 命令方式:执行 sudo gitlab-backup create 备份默认生成在 /var/opt/gitlab/backups,文件名类似 TIMESTAMP_VERSION_gitlab_backup.tar
    • Rake 方式(兼容旧版本或习惯 rake 的场景): sudo gitlab-rake gitlab:backup:create
  • 如需前台静默(便于 cron 不输出邮件),可加环境变量: sudo gitlab-rake gitlab:backup:create CRON=1
  • 以上两种方式均为官方支持的做法,选用与你环境一致的即可。

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

  • 编辑配置文件 /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 mkdir -p /data/gitlab/backups sudo chown -R git:git /data/gitlab/backups
  • 使配置生效: sudo gitlab-ctl reconfigure
  • 说明:修改 backup_path 后,备份与清理任务都会使用该新目录;保留时间到期后,旧包会被自动清理。

四 定时备份与异地容灾

  • 本地定时任务(crontab)示例:每天 02:00 执行 0 2 * * * /usr/bin/gitlab-backup create CRON=1 >> /var/log/gitlab/backup.log 2>&1
  • 异地备份脚本示例(推送到备份服务器):
    • 前提:已配置本机到备份机的 SSH 免密登录
    • 脚本(/usr/local/bin/gitlab_backup_remote.sh): #!/usr/bin/env bash set -e LOCAL_BACKUP_DIR=“/var/opt/gitlab/backups” REMOTE_USER=“backup” REMOTE_HOST=“192.0.2.10” REMOTE_DIR=“/data/gitlab/remote_backups” TS=$(date +%F-%H%M%S) LOG=“$LOCAL_BACKUP_DIR/backup_$TS.log” echo “[$TS] Start backup” >> “$LOG”

      执行备份

      if /usr/bin/gitlab-backup create; then echo “[$TS] Backup created” >> “$LOG” else echo “[$TS] Backup FAILED” >> “$LOG” exit 1 fi

      取最新 .tar 包并推送

      NEWEST=$(find “$LOCAL_BACKUP_DIR” -name ‘*.tar’ -mmin -5 | tail -n1) if [[ -n “$NEWEST” ]]; then scp -p “$NEWEST” “$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/” &&
      echo “[$TS] Sent $NEWEST to $REMOTE_HOST:$REMOTE_DIR” >> “$LOG” else echo “[$TS] No new .tar found” >> “$LOG” fi
    • 赋权并加入 cron(每天 02:30 推送): sudo chmod +x /usr/local/bin/gitlab_backup_remote.sh 30 2 * * * /usr/local/bin/gitlab_backup_remote.sh >> /var/log/gitlab/backup_remote.log 2>&1
  • 提示:若备份量大,可在脚本中加入 find … -mtime +N -delete 做本地保留策略,避免磁盘占满。

五 恢复步骤简要

  • 准备:在新/原服务器安装同版本 GitLab,先恢复配置文件与密钥(见第一部分),并确保备份包已就位(默认 /var/opt/gitlab/backups 或自定义的 backup_path)。
  • 停止相关进程(避免写入冲突): sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop sidekiq
  • 执行恢复(BACKUP 为备份编号或去掉后缀的 tar 名,二选一):
    • 使用编号:sudo gitlab-rake gitlab:backup:restore BACKUP=1687460936_2023_06_22_14.3.3
    • 使用文件名(不含 “_gitlab_backup.tar” 后缀):sudo gitlab-rake gitlab:backup:restore BACKUP=/var/opt/gitlab/backups/1687460936_2023_06_22_14.3.3
  • 恢复过程中按提示输入 yes 确认;完成后启动服务: sudo gitlab-ctl start
  • 验证:登录 Web,检查项目、仓库、LFS、Pages、Runner 等是否正常;必要时执行 gitlab-rake gitlab:check 做健康检查。

0