温馨提示×

Debian与GitLab的数据迁移步骤是什么

小樊
51
2026-01-09 16:13:43
栏目: 智能运维

Debian 上 GitLab 数据迁移步骤

一 迁移总览与前置检查

  • 明确迁移方式:优先使用官方备份/恢复(包含数据库、仓库、上传文件等),适合一次性整机迁移;若仅需迁移部分仓库,可采用逐个镜像推送的方式。
  • 版本一致性:新旧实例的 GitLab 版本必须一致(含 CE/EE 与补丁号)。查看版本:cat /opt/gitlab/embedded/service/gitlab-rails/VERSION。
  • 规划停机窗口:为保证一致性,备份与恢复阶段建议短暂停写服务。
  • 网络与目录:确保新服务器可访问旧服务器备份目录,备份默认位于 /var/opt/gitlab/backups,迁移前后注意目录权限与属主。

二 标准迁移步骤 Omnibus 包

  1. 旧服务器备份
  • 创建备份:sudo gitlab-rake gitlab:backup:create(备份文件位于 /var/opt/gitlab/backups)。
  • 备份机密与配置:sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /root/backup/。
  1. 新服务器安装相同版本
  • 添加仓库并安装指定版本(示例为 CE):
    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
    sudo EXTERNAL_URL=“http://新服务器IP或域名” apt-get install gitlab-ce=版本号-ce.0
  • 初次配置:sudo gitlab-ctl reconfigure。
  1. 传输备份
  • 将旧服务器备份文件复制到新服务器的 /var/opt/gitlab/backups(可使用 scp)。
  1. 新服务器恢复
  • 停止写入服务:sudo gitlab-ctl stop puma && sudo gitlab-ctl stop sidekiq(如使用 unicorn 则停 unicorn)。
  • 执行恢复(BACKUP 为时间戳编号,不含 .tar):
    sudo gitlab-rake gitlab:backup:restore BACKUP=时间戳编号
  • 恢复机密文件:用旧服务器的 /etc/gitlab/gitlab-secrets.json 覆盖新服务器同名文件(先备份新文件)。
  1. 启动与初始化
  • 重新配置并启动:sudo gitlab-ctl reconfigure && sudo gitlab-ctl start。
  • 首次登录:如未保留原 root 密码,可通过控制台设置:
    sudo gitlab-rails console
    u = User.where(username: ‘root’).first; u.password=‘新密码’; u.password_confirmation=‘新密码’; u.save!; exit

三 仅迁移部分仓库的替代方案

  • 在旧实例导出每个仓库(镜像方式):
    git clone --mirror https://旧地址/组/仓库.git
    cd 仓库.git
    git remote set-url origin https://新地址/组/仓库.git
    git push --mirror
  • 说明:此方法只迁移代码与引用,不会迁移 Issues、Merge Requests、Wiki、Runner、权限与配置 等,适合补充性迁移或选择性搬迁。

四 常见问题与排错要点

  • 版本不一致导致恢复失败:两端必须同版本(含 CE/EE 与补丁号),必要时先在旧实例升级后再备份迁移。
  • 恢复时报错 “PG::ConnectionBad … /var/opt/gitlab/postgresql/.s.PGSQL.5432”:
    停止 GitLab:sudo gitlab-ctl stop;修正权限:sudo chmod 755 /var/opt/gitlab/postgresql;重启 runsvdir:sudo systemctl restart gitlab-runsvdir;重新配置:sudo gitlab-ctl reconfigure;再启动:sudo gitlab-ctl start。
  • 扩展权限错误(如 must be owner of extension pg_trgm/btree_gist):通常为数据库权限/初始化问题,优先确保版本一致与全新实例初始化完成;必要时检查 PostgreSQL 配置与数据目录权限。
  • 页面 500 或 Runner 注册异常:可能与加密 token 有关,可在紧急情况下清空相关加密字段(会重置 Runner 注册与部分令牌):
    gitlab-psql -d gitlabhq_production
    UPDATE projects SET runners_token=null, runners_token_encrypted=null;
    UPDATE namespaces SET runners_token=null, runners_token_encrypted=null;
    UPDATE application_settings SET runners_registration_token_encrypted=null;
    UPDATE application_settings SET encrypted_ci_jwt_signing_key=null;
    UPDATE ci_runners SET token=null, token_encrypted=null;
  • 备份文件权限:传输后确保备份文件对 GitLab 运行用户可读(必要时 chmod 644/600,避免 777 在生产环境长期使用)。

五 迁移后验证清单

  • 登录新实例,核对 用户/组/项目数量与权限、SSH/HTTP 拉取推送、子组与项目可见性。
  • 验证 CI/CD:运行流水线、注册 Runner、查看变量与 Secret 是否生效。
  • 检查 Wiki、Issues、Merge Requests、Milestones、Labels 等是否完整。
  • 验证 LFS、Pages、容器镜像库(Registry) 与备份前一致(如启用)。
  • 如涉及域名或端口变更,更新本地仓库 remote URL 与 /etc/gitlab/gitlab.rb 的 external_url 后执行 sudo gitlab-ctl reconfigure。

0