一、背景
因考虑到开发的方便性,以及为了应对办公搬迁带来的无法对代码库访问导致工作限制, 所以决定把Gilab从线下的开发服务器迁移到线上服务器。
- 迁移实操
- 注意事项:
- 迁移注意新安装的Gitlab版本需要和旧版本一致, 否则无法使用还原的方式来还原旧系统备份的数据。
- 历史原因,目前GoGo使用的Gitlab版本是极狐版本, 具体版本号是 16.9.2-jh
- 操作步骤:
- 安装系统, 因为Gitlab的安装脚本不支持阿里云的原生系统(脚本没有识别),所以这里采用Rocky系统来安装Gitlab
- 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
- 在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
- 执行启动脚本, 一段时间后(Gitlab启动比较慢),Gitlab容器启动完成, 可以通过docker ps 查看容器状态,Status 显示为healthy 就表示启动完成
- 旧系统Gitlab数据备份
因旧Gitlab设定, 所以备份保存的文件位置为: /data/gitlab/data/backups 目录
docker exec gitlab gitlab-rake gitlab:backup:create BACKUP="$(date +%Y%m%d)_tmp"
- 把旧系统的Gitlab配置文件同步到新的Gitlab服务器中, 旧Gitlab配置文件的路径是:/data/gitlab/config/gitlab-secrets.json 新系统是相同的位置。
- 数据传递到新服务器, 注意数据需要放在 /data/gitlab/data/backups 目录, 否则在恢复数据的时候会提示找不到相应的文件, 同时为了避免出现文件权限的问题,请把刚上传的文件的权限设置成777。
chmod 755 20241216_tmp_gitlab_backup.tar
- 在新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
- 最后一步因为旧系统是把57622映射成Gitlab的22端口, 但因为在容器中直接使用是的22,所以Gitlab在WEB端显示的时候并没有对应的端口号, 所以还需要把这个端口加入到WEB端显示下载的部分, 修改/data/gitlab/config/gitlab.rb 文件, 把其中的 gitlab_rails['gitlab_shell_ssh_port'] 修改为57622
- 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条目并删除
四、完成以上操作后,实际验证所有数据无缝迁移到新系统中了, 用户使用没有任何异常。

Comments NOTHING