同福

迁移Gitlab仓库数据、用户数据的方法【20220916】

介绍

介绍

由于gitlab占用内存太高了,福哥打算把它迁移到一个托管服务器上面去,笔记托管服务器机器是自己的内存可以随便扩展嘛。

为了避免出现问题,福哥的目标gitlab使用了和源gitlab一样的版本,这里稍微费了点事。

大家跟着福哥学学如何迁移Gitlab的数据吧!

迁移

源gitlab

当前状态

这是福哥的源gitlab,里面已经有一些仓库了。

home/topic/2022/0909/12/327a034903a26a9dbbda36b390850fcd.png

查看版本

使用如下命令查看旧版本的版本号,因为gitlab不同版本之间的数据是不兼容的,所以我们必须使用相同版本的gitlab去安装目标gitlab。

docker exec gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

home/topic/2022/0909/13/7a1293fa3deca12e06e457362267364f.png

备份

进入gitlab容器里面。

docker exec -ti gitlab bash

执行gitlab-rake命令进行整体备份。

gitlab-rake gitlab:backup:create

备份文件存储在/var/opt/gitlab/backups/下面。home/topic/2022/0909/15/0936ac12f81e09cf8fbdc3e8f5e844a2.png

目标gitlab

拉取镜像

福哥从hub.docker.com里找到了gitlab-ce的12.1.3的tag。

home/topic/2022/0909/13/c572617df8272c8cb26427ce0a781624.png

福哥拉取了12.1.3版本的gitlab-ce镜像。

docker pull gitlab/gitlab-ce:12.1.3-ce.0

启动

使用如下命令启动gitlab容器,将9091端口映射出来。(这个9091端口是福哥选择的gitlab端口,后面福哥会把gitlab默认端口80改成9091)

docker run -tid --name gitlab -h gitlab --publish 9091:9091 --restart always --memory 4g --memory-swap -1 gitlab/gitlab-ce:12.1.3-ce.0

进入gitlab容器。

docker exec -ti gitlab bash

打开/etc/gitlab/gitlab.rb配置文件,更改gitlab默认端口。

sed -i "s/# nginx\['listen_port'\].*/nginx\['listen_port'\] = 9091/" /etc/gitlab/gitlab.rb | grep listen_port

更新gitlab配置。

gitlab-ctl reconfigure

重新启动gitlab服务。

gitlab-ctl restart

初始化密码

这里设置root密码。

home/topic/2022/0909/14/73b86168bfd4c4c646bf4219f377c7b8.png

安装完毕

现在目标gitlab安装完毕!

home/topic/2022/0909/14/8bacccebd6a4987ddf84daaa9cbb9c17.png

复制备份文件

从源gitlab的备份目录下面把备份好的tar压缩包复制到新gitlab相同目录下面。

停止gitlab数据操作服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

恢复

授权压缩包777权限,要不会提示拒绝访问。

home/topic/2022/0909/15/66f18ac48423e0b983f3fdd1a8c6fdb0.png执行如下命令恢复数据,可以看到BACKUP参数是压缩包文件名的“_gitlab_backup.tar”前面的部分。

gitlab-rake gitlab:backup:restore BACKUP=1662706721_****_09_09_12.1.3

重启gitlab

现在可以重启gitlab了!

gitlab-ctl restart

最新状态

可以看到目标gitlab里面可以看到全部的内容。

home/topic/2022/0916/14/bafbadc834c758937567eb7959ba2a7b.png

总结

今天福哥带着大家学会了迁移Gitlab仓库数据、用户数据的方法。Gitlab比较恶心的是,它虽然有一个git-data目录,但是即使把它映射出来,在Gitlab重构之后还是无法识别,原来是因为Gitlab在推广一个教Gitaly的东西。

哎,慢慢来吧~~