由于业务需要,我们需要迁移备份原有的gitlab仓库,迁移要求gitlab新旧版本一致

1、备份旧的gitlab

查看gitlab版本

sudo cat /opt/gitlab/version-manifest.txt | grep "gitlab-ce"
##或者
sudo gitlab-rake gitlab:env:info | grep "GitLab version"

停止服务

sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
## 或者直接停止服务
sudo gitlab-ctl stop

备份gitlab数据库

sudo gitlab-backup create

默认会生成在 /var/opt/gitlab/backups/ 目录下,文件名 如:

1750765308_2025_06_24_16.7.6_gitlab_backup.tar

配置文件打包

sudo tar -cf gitlab_conf.tar /etc/gitlab

2、在新机器安装gitlab-ce

新主机系统ubuntu24.04 gitlab安装版本 17.1.1

# 安装基础包
sudo apt update
sudo apt install -y curl openssh-server ca-certificates tzdata perl
# 配置软件源
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
# 使用 apt-cache madison 命令可查看源中可用的版本列表
sudo apt-cache madison gitlab-ce
# 安装指定版本
sudo apt-get install gitlab-ce=17.1.1-ce.0

3、迁移

还原配置文件

sudo tar -xf gitlab_conf.tar -C /
sudo gitlab-ctl reconfigure

gitlab数据恢复

sudo gitlab-backup restore BACKUP=1750765308_2025_06_24_16.7.6

会提示

Be sure to stop Puma, Sidekiq... Do you want to continue (yes/no)?

输入 yes

随后会尝试清空数据库并导入数据

4、恢复后验证步骤

启动 GitLab 服务

sudo gitlab-ctl start

检查服务状态

sudo gitlab-ctl status

确保关键服务如 postgresql, puma, sidekiq 均为 run 状态。

Web 页面访问验证

访问 http://<your-gitlab-host>,确认是否可正常登录、浏览项目 。

可能会出现的错误

PostgreSQL 扩展权限错误

恢复时报错:

ERROR: must be owner of extension pg_trgm

ERROR: must be owner of extension btree_gist

解决方法:

使用超级用户 gitlab-psql 登录,并删除这两个扩展:

sudo gitlab-psql

-- 删除可能存在的扩展
DROP EXTENSION IF EXISTS pg_trgm;
DROP EXTENSION IF EXISTS btree_gist;
\q

然后重新执行恢复命令。

logrotate 报错无法 reconfigure

报错如下

runit_service[logrotate] ...
timeout: down: /opt/gitlab/service/logrotate/log: 0s, normally up, want up
处理方式:

手动清理 logrotate 服务文件并重启:

sudo sv stop /opt/gitlab/service/logrotate
sudo rm -rf /opt/gitlab/service/logrotate
sudo gitlab-ctl reconfigure

恢复后可能还需要的命令

创建缺失扩展

sudo gitlab-psql -d gitlabhq_production -c "CREATE EXTENSION pg_trgm;"
sudo gitlab-psql -d gitlabhq_production -c "CREATE EXTENSION btree_gist;"

检查数据库角色

sudo gitlab-psql
\du

确保角色 gitlab 存在并非超级用户即可。

参考链接:

GitLab 备份恢复与配置迁移详尽教程(实战版)_gitlab备份-CSDN博客