Gitlab服务器数据迁移及版本升级

公司目前使用的GITLAB服务器,docker方式部署,GITLAB版本为13.11.0,由于版本太老存在安全漏洞,原服务器还部署了其他应用,不方便做升级操作,解决思路是将数据迁移新版本的gitlab服务器。

由于gitlab数据备份恢复必须在同一版本之间进行,所以要在新的服务器部署同版本gitlab,恢复原服务器备份文件数据后再进行升级。

根据gitlab官方文档,gitlab服务器不支持跨大版本升级,只能按官网给出的升级路径一步步升级。

从当前的gitlab13.11.0升级到最新要依次完成以下版本升级:

gitlab/gitlab-ce:13.12.15-ce.0

gitlab/gitlab-ce:14.0.12-ce.0

gitlab/gitlab-ce:14.3.6-ce.0

gitlab/gitlab-ce:14.9.5-ce.0

gitlab/gitlab-ce:14.10.5-ce.0

gitlab/gitlab-ce:15.0.5-ce.0

gitlab/gitlab-ce:15.4.6-ce.0

gitlab/gitlab-ce:15.11.13-ce.0

gitlab/gitlab-ce:16.3.9-ce.0

gitlab/gitlab-ce:16.7.10-ce.0

gitlab/gitlab-ce:16.11.10-ce.0

gitlab/gitlab-ce:17.1.8-ce.0

gitlab/gitlab-ce:17.3.7-ce.0

gitlab/gitlab-ce:17.5.5-ce.0

gitlab/gitlab-ce:17.8.5-ce.0

gitlab/gitlab-ce:17.9.2-ce.0

一、新GITLAB服务器的安装部署

参见DOCKER模式部署GITLAB_docker部署gitlib-CSDN博客

二、原服务器数据备份及导出

1、停止GitLab服务进程‌

在容器内停止GitLab核心服务以冻结数据写入:

进入容器

docker exec -it gitlab bash

停止核心服务

gitlab-ctl stop puma

gitlab-ctl stop sidekiq

2、备份数据

gitlab-backup create

或者

gitlab-rake gitlab:backup:create

生成的备份文件如1741851022_2025_03_13_13.11.0_gitlab_backup.tar

3、数据导出到新服务器

备份文件可以直接在gitlab容器配置的data卷目录下的backups中找到

也可用

docker cp gitlab:/var/opt/gitlab/backups/1741851022_2025_03_13_13.11.0_gitlab_backup.tar /home复制出来

用scp或sftp 将备份文件和配置文件(gitlab-secrets.json和gitlab.rb)传输到新服务器上

三、数据恢复

在新服务器启动gitlab容器后

1、将备份文件配置文件复制到容器中

备份文件可以直接复制到配置的data卷目录下(例如 /gitlab/data/backups)

配置文件可以直接复制到配置的config卷目录下(例如 /gitlab/config)

cp /home/1741851022_2025_03_13_13.11.0_gitlab_backup.tar /gitlab/data/backups

或用docker cp

docker cp /home/1741851022_2025_03_13_13.11.0_gitlab_backup.tar gitlab:/var/opt/gitlab/backups/

2、进入容器

docker exec -it gitlab bash

3、修改备份文件权限

cd /var/opt/gitlab/backups

chown git:git /var/opt/gitlab/backups/1741851022_2025_03_13_13.11.0_gitlab_backup.tar

4、停止核心服务

gitlab-ctl stop puma

gitlab-ctl stop sidekiq

5、恢复数据

gitlab-rake gitlab:backup:restore BACKUP=1741851022_2025_03_13_13.11.0

这一步会有报错:

025-03-18 08:50:34 +0000 -- Restoring database ...

Restoring PostgreSQL database gitlabhq_production ...

ERROR: must be owner of extension pg_trgm

ERROR: must be owner of extension btree_gist

ERROR: must be owner of extension btree_gist

ERROR: must be owner of extension pg_trgm

虽有报错,数据恢复仍可完成,重启gitlab后登录可看到原服务器数据。

此错误是由于PostgreSQL扩展的所有者权限不匹配导致的,可采用以下方法消除:

进入GitLab容器

docker exec -it gitlab bash

进入PostgreSQL控制台

gitlab-psql -d gitlabhq_production

提升当前用户为超级用户

ALTER ROLE gitlab SUPERUSER;

退出PostgreSQL控制台

\q

恢复数据

gitlab-rake gitlab:backup:restore BACKUP=1741851022_2025_03_13_13.11.0

进入PostgreSQL控制台

gitlab-psql -d gitlabhq_production

撤销超级用户权限(安全恢复)

ALTER ROLE gitlab NOSUPERUSER;

退出PostgreSQL控制台

\q

最后退出容器,重启容器。

四、版本升级

1、停止容器

docker compose down

2、修改版本号

vi docker-compose.yml

3、启动容器

docker compose up -d

循环上述过程直至最新版本。

注:每次GITLAB容器启动后,后台升级任务需要一段时间才能完成,可在管理中心---监控---后台迁移/后台任务页面查看,迁移任务全部完成后才能进行下一版本升级,否则可能升级失败。

相关推荐
我命由我1234528 分钟前
35.Java线程池(线程池概述、线程池的架构、线程池的种类与创建、线程池的底层原理、线程池的工作流程、线程池的拒绝策略、自定义线程池)
java·服务器·开发语言·jvm·后端·架构·java-ee
爱知菜5 小时前
Windows安装Docker Desktop(WSL2模式)和Docker Pull网络问题解决
运维·docker·容器
影龙帝皖7 小时前
Linux网络之局域网yum仓库与apt的实现
linux·服务器·网络
月下雨(Moonlit Rain)7 小时前
Docker
运维·docker·容器
打工人你好7 小时前
UNIX域套接字(Unix Domain Sockets, UDS) 的两种接口
服务器·unix
技术小甜甜8 小时前
[Dify] 使用 Docker 本地部署 Dify 并集成 Ollama 模型的详细指南
运维·docker·容器·dify
AI云师兄8 小时前
MCP 实战系列(Day 2)- 动手搓个文件系统 MCP 服务器
服务器·人工智能·ai编程
学习中的程序媛~8 小时前
主服务器和子服务器之间通过NFS实现文件夹共享
运维·服务器
hi0_69 小时前
Linux 第三讲 --- 基础指令(三)
linux·运维·服务器·c++
窥见漫天星光-莹9 小时前
fisco-bcos 关于服务bash status.sh启动runing 中但是5002端口监听不到,出错的问题
linux·运维