温馨提示×

linux gitlab如何迁移

小樊
73
2026-07-01 07:43:01
栏目: 智能运维

在 Linux 环境下迁移 GitLab(从一台服务器迁移到另一台,或本机大版本升级前的迁移),最稳妥、官方推荐的做法是 通过备份 + 恢复。下面我按 常用场景 给你一套完整、可落地的迁移方案。


一、迁移方式概览

迁移方式 适用场景 推荐度
备份 + 恢复 整机迁移、升级、灾备 ⭐⭐⭐⭐⭐
Docker 镜像迁移 GitLab 跑在 Docker ⭐⭐⭐⭐
直接复制数据目录 同源同版本 ⭐⭐(风险高)

生产环境强烈推荐:备份 + 恢复


二、迁移前准备(必做)

1️⃣ 确认 GitLab 版本一致(非常重要)

目标服务器 GitLab 版本 ≥ 源服务器版本(主版本一致)

查看版本:

gitlab-rake gitlab:env:info
# 或
cat /opt/gitlab/version-manifest.txt

❗ 不同大版本直接恢复会失败。


2️⃣ 停止 GitLab(源服务器)

sudo gitlab-ctl stop

三、在源服务器创建完整备份

1️⃣ 执行备份

sudo gitlab-rake gitlab:backup:create

备份完成后,文件位于:

/var/opt/gitlab/backups/

文件名示例:

1690000000_2024_01_01_gitlab_backup.tar

2️⃣ 备份配置文件(非常重要)

sudo cp /etc/gitlab/gitlab.rb /root/gitlab.rb.bak
sudo cp -R /etc/gitlab/ssl /root/gitlab_ssl.bak
sudo cp /etc/gitlab/gitlab-secrets.json /root/gitlab-secrets.json.bak

⚠️ 丢失 gitlab-secrets.json 会导致:

  • CI/CD 变量无法解密
  • Runner 无法使用
  • 仓库 HTTPS 异常

四、传输备份文件到目标服务器

scp /var/opt/gitlab/backups/*.tar root@目标服务器IP:/var/opt/gitlab/backups/
scp /root/gitlab.rb.bak root@目标服务器IP:/root/
scp /root/gitlab-secrets.json.bak root@目标服务器IP:/root/

五、在目标服务器恢复 GitLab

1️⃣ 安装与源服务器相同版本的 GitLab

示例(Ubuntu / Debian):

sudo apt-get update
sudo apt-get install -y gitlab-ee=16.7.2-ee.0

指定版本安装(示例):

sudo apt install gitlab-ee=16.7.2-ee.0

或 CentOS / RHEL:

yum install gitlab-ee-16.7.2-ee.0.el8

2️⃣ 恢复配置文件

sudo cp /root/gitlab.rb.bak /etc/gitlab/gitlab.rb
sudo cp /root/gitlab-secrets.json.bak /etc/gitlab/gitlab-secrets.json

如有 SSL:

sudo cp -R /root/gitlab_ssl.bak /etc/gitlab/ssl

3️⃣ 重新配置 GitLab

sudo gitlab-ctl reconfigure

4️⃣ 停止部分服务(恢复前)

sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

5️⃣ 恢复备份

sudo gitlab-rake gitlab:backup:restore BACKUP=1690000000_2024_01_01

⚠️ 只需写文件名前缀,不要 .tar

过程中会询问:

  • 是否覆盖数据库 ✅
  • 是否清除缓存 ✅

6️⃣ 启动 GitLab

sudo gitlab-ctl start

验证状态:

sudo gitlab-ctl status

六、迁移后验证

sudo gitlab-rake gitlab:check

浏览器访问 GitLab:

  • 项目是否完整
  • 用户 & 权限是否正常
  • CI Runner 是否可用

七、常见问题

❓ 版本不一致怎么办?

✅ 先升级源 GitLab → 再备份 → 再迁移


❓ Docker 版 GitLab 如何迁移?

docker exec -t gitlab gitlab-backup create
docker cp gitlab:/etc/gitlab/gitlab-secrets.json .
docker cp gitlab:/etc/gitlab/gitlab.rb .

恢复时挂载相同目录即可。


❓ 迁移后 SSH 无法拉代码?

  • 检查 /etc/gitlab/gitlab.rb 中:
gitlab_rails['gitlab_shell_ssh_port'] = 22
  • 重新生成 SSH host keys 或拷贝旧服务器 /etc/ssh/

八、迁移时间估算

数据规模 备份 恢复
10 GB 5 分钟 5–10 分钟
100 GB 20–40 分钟 30–60 分钟

如果你愿意,可以告诉我:

  • GitLab 版本
  • Omnibus 还是 Docker
  • 是否跨大版本升级

我可以给你 精确到命令的迁移方案

0