- 首页 >
- 问答 >
-
智能运维 >
- Debian与GitLab的数据迁移步骤是什么
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 包
- 旧服务器备份
- 创建备份:sudo gitlab-rake gitlab:backup:create(备份文件位于 /var/opt/gitlab/backups)。
- 备份机密与配置:sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /root/backup/。
- 新服务器安装相同版本
- 添加仓库并安装指定版本(示例为 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。
- 传输备份
- 将旧服务器备份文件复制到新服务器的 /var/opt/gitlab/backups(可使用 scp)。
- 新服务器恢复
- 停止写入服务: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 覆盖新服务器同名文件(先备份新文件)。
- 启动与初始化
- 重新配置并启动: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。