gitlab迁移实操记录

发布于 7 天前  4 次阅读


一、背景

因考虑到开发的方便性,以及为了应对办公搬迁带来的无法对代码库访问导致工作限制, 所以决定把Gilab从线下的开发服务器迁移到线上服务器。

  1. 迁移实操
  2. 注意事项:
  1. 迁移注意新安装的Gitlab版本需要和旧版本一致, 否则无法使用还原的方式来还原旧系统备份的数据。
  2. 历史原因,目前GoGo使用的Gitlab版本是极狐版本, 具体版本号是 16.9.2-jh
  3. 操作步骤:
  1. 安装系统, 因为Gitlab的安装脚本不支持阿里云的原生系统(脚本没有识别),所以这里采用Rocky系统来安装Gitlab
  2. Gitlab准备使用Docker的方式安装, 所以系统需要先安装Docker系统

dnf install -y dnf-plugins-core

dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

systemctl start docker

systemctl status docker

  1. 在Root用户目录下的shell目录,建立了一个Gitlab的Docker启动脚本,主要是为了记录相关的端口映射信息, 因为数据备份恢复的关系,所以这里Gitlab的版本是指定为16.9.2

docker run --detach \

--hostname git.xxxxxx.io \

--publish 57621:80 \

--publish 57623:443 \

--publish 57622:22 \

--name gitlab \

--restart always \

--volume /data/gitlab/config:/etc/gitlab \

--volume /data/gitlab/logs:/var/log/gitlab \

--volume /data/gitlab/data:/var/opt/gitlab \

--shm-size 256m \

registry.gitlab.cn/omnibus/gitlab-jh:16.9.2

  1. 执行启动脚本, 一段时间后(Gitlab启动比较慢),Gitlab容器启动完成, 可以通过docker ps 查看容器状态,Status 显示为healthy 就表示启动完成
  2. 旧系统Gitlab数据备份

因旧Gitlab设定, 所以备份保存的文件位置为: /data/gitlab/data/backups 目录

docker exec gitlab gitlab-rake gitlab:backup:create BACKUP="$(date +%Y%m%d)_tmp"

  1. 把旧系统的Gitlab配置文件同步到新的Gitlab服务器中, 旧Gitlab配置文件的路径是:/data/gitlab/config/gitlab-secrets.json 新系统是相同的位置。
  2. 数据传递到新服务器, 注意数据需要放在 /data/gitlab/data/backups 目录, 否则在恢复数据的时候会提示找不到相应的文件, 同时为了避免出现文件权限的问题,请把刚上传的文件的权限设置成777。

chmod 755 20241216_tmp_gitlab_backup.tar

  1. 在新Gitlab 容器中先停止几个关的服务,进入容器运行以下脚本,在恢复的过程中需要两次输入yes

#旧系统的Gitlab配置文件同步到新的Gitlab中

#配置文件路径: /data/gitlab/config/gitlab-secrets.json

#进入容器

docker exec -it gitlab bash

#停止相关的服务

gitlab-ctl stop nginx && gitlab-ctl stop puma && gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq

#执行数据恢复, 注意BACKUP的文件名前缀是对应的日期

gitlab-rake gitlab:backup:restore BACKUP=20241216_tmp

  1. 最后一步因为旧系统是把57622映射成Gitlab的22端口, 但因为在容器中直接使用是的22,所以Gitlab在WEB端显示的时候并没有对应的端口号, 所以还需要把这个端口加入到WEB端显示下载的部分, 修改/data/gitlab/config/gitlab.rb 文件, 把其中的 gitlab_rails['gitlab_shell_ssh_port'] 修改为57622
  2. Final Step: 重启Gitlab服务

#进入容器

docker exec -it gitlab bash

#重启服务

gitlab-ctl restart

三、迁移后的使用

git的数据传输是基于ssh协议, ssh协议在连接服务器时会记录服务器的指纹,且会把服务器的指纹记录到当前系统中,所以在Gitlab更换后,需要各个用户把原来记录的旧服务器指纹清除,重新记录新服务器指纹就可以了

Mac系统, 打开用户目录下的.ssh/know_hosts文件, 找到所有git.gogoep.io条目并删除

Windows系统,打开C:\Users\[你的用户名]\.ssh\known_hosts 文件, 找到所有git.gogoep.io条目并删除

四、完成以上操作后,实际验证所有数据无缝迁移到新系统中了, 用户使用没有任何异常。

曾许人间第一流
最后更新于 2025-11-28