Gitlab迁移:物理机至容器

Gitlab迁移:物理机至容器

背景

公司还在使用SVN作为版本控制工具,但是现在大家都更愿意使用git,于是在部门内部选了台服务器,直接物理机安装了gitlab。

Gitlab在物理机上运行了将近两年多的时间,遇到了不少小问题一直没能很好的解决。这两年容器技术发展的势如破竹,云化虚拟化已经快成为软件开发行业的事实标准。刚好最近新增搭建了一个私有云环境,于是决定将gitlab迁移到新的私有云环境中。

总体方案

gitlab的迁移非常简单,只需要将gitlab备份,然后将备份文件导入新的gitlab环境就可以,只有一点要求就算新旧gitlab必须为同样的版本,否则备份文件无法完成导入。

物理机上升级gitlab到最新版

物理机上的gitlab如果不是最新版的话,建议先升级到最新版。

以CentOS为例,使用下面的命令更新gitlab到最新版

yum install gitlab-ce -y

如果长时间未更新gitlab,尤其是垮了大版本号是无法直接升级的,需要按照提示先升级到中间过度版本。可以使用下面的命令查询具体版本号

$ yum list gitlab-ce --showduplicate
gitlab-ce.x86_64                  12.10.9-ce.0.el7                    gitlab-ce 
gitlab-ce.x86_64                  12.10.10-ce.0.el7                   gitlab-ce 
gitlab-ce.x86_64                  12.10.11-ce.0.el7                   gitlab-ce 
gitlab-ce.x86_64                  12.10.12-ce.0.el7                   gitlab-ce 
gitlab-ce.x86_64                  12.10.13-ce.0.el7                   gitlab-ce 
gitlab-ce.x86_64                  12.10.14-ce.0.el7                   gitlab-ce 
gitlab-ce.x86_64                  13.0.0-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.1-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.3-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.4-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.5-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.6-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.7-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.8-ce.0.el7                     gitlab-ce 
gitlab-ce.x86_64                  13.0.9-ce.0.el7                     gitlab-ce 

然后升级到特定的版本,下面是例子

yum install gitlab-ce-12.10.14 

部署gitlab的docker容器

部署docker容器的方法有很多,可以直接使用docker和docker compose等工具,也可以在UnRaid、群晖等系统中只用配套的docker管理工具进行部署。

其本质都是把 gitlab的docker镜像下载到本地,实例化容器时,做好端口映射和几个数据集卷的挂载,再对配置文件做必要的修改。默认情况下都会下载最新版本的docker镜像,有时docker镜像的最新版本和物理机上的最新版本可能不一致,需要指定安装特定版本的docker镜像。

以Gitlab为例,在官方镜像的页面上点击“tag”可以看到所有的版本

gitlab-gitlab-ce-Tags-Docker-Hub

Docker

使用下面的命令部署gitlab的docker镜像,端口映射和数据集挂载的参数对应关系为,左边是实体机,右边是容器

docker run -d --name='GitLab-CE' --net='bridge' \
-p '9080:9080/tcp'  \
-p '9443:9443/tcp'  \
-p '9022:22/tcp'  \
-v '/mnt/disk1/appdata/gitlab-ce/config':'/etc/gitlab':'rw'  \
-v '/mnt/disk1/appdata/gitlab-ce/data':'/var/opt/gitlab':'rw'  \
-v '/mnt/disk1/appdata/gitlab-ce/log':'/var/log/gitlab':'rw'  \
'gitlab/gitlab-ce'

UnRiad

现在很多公司和个人都有NAS,而UnRaid一款很不错的NAS系统。

先在UnRaid中安装插件市场,输入插件地址然后点击INSTALL就可以安装,安装好了之后就会多一个APPS的标签页。

Unraid-ca

https://raw.githubusercontent.com/Squidly271/community.applications/master/plugins/community.applications.plg

在APPS里面搜索gitlab,然后点击安装

gitlab-app

然后输入相应的配置,所有参数都是对应宿主机的配置,端口没冲突的话保持默认即可,数据集挂载的位置根据NAS的实际情况来设置就行。点击右上角的按钮可以打开高级设置,进而设置镜像的版本等内容。

gitlab-edit

配置好后,点击DONE,之后就开始下载镜像和部署容器。之后需要等待一段时间给系统进行各项功能和数据库的初始化,然后在浏览器访问 宿主机IP:9080 就可以使用gitlab了。

物理机备份

在物理机上使用下面的命令对gitlab中的所有数据进行备份

 gitlab-rake gitlab:backup:create

完成备份后,文件会存在于/var/opt/gitlab/backups/

$ ls /var/opt/gitlab/backups/
1604475190_2020_11_04_13.5.1_gitlab_backup.tar

将这个文件复制到gitlab容器里/var/opt/gitlab/backups/路径下。因为gitlab容器的数据卷挂载了宿主机的路径,所有也可以放到宿主机的相应位置。

进入容器的shell环境,可以使用下面的命令

docker exec -it 容器id /bin/bash

docker ps -a 可以看到所有容器的ID。

进入容器的shell环境后,进入备份文件所在目录,因为需要对备份文件解压,所以赋予备份文件可执行权限,然后执行恢复程序

cd /var/opt/gitlab/backups/
chmox 777 *
gitlab-rake gitlab:backup:restore BACKUP=1604475190_2020_11_04_13.5.1  force=yes

如果在宿主机进行备份时gitlab的版本,与现在容器中gitlab版本不一致的话,会看到版本不一致的错误。这时按照前文的内容使两个gitlab版本一致。另外记得把1604475190_2020_11_04_13.5.1修改为你所使用备份的文件名。

恢复的过程中可能会看到下面的报错或其他报错

ERROR:  must be owner of extension pg_trgm

但是只要备份程序没有中断就不用担心这些ERROR。

完成备份后,用原来的账号密码应该可以登录容器中的gitlab,并且可以看到原来所有的项目。

修改gitlab配置文件

容器所在宿主机的IP端口相较之前可能会发生变化,所以需要修改gitlab的配置文件。

进入容器的shell环境,然后编译配置文件

docker exec -it <容器id>  /bin/bash
vi /etc/gitlab/gitlab.rb 

找到## external_url,将其改为

external_url http://宿主机ip:9080

然后找到gitlab_rails['gitlab_shell_ssh_port'],将其改为

gitlab_rails['gitlab_shell_ssh_port'] = 9022

之后更新配置并重新启动

gitlab-ctl reconfigure
gitlab-ctl restart

至此,整个数据迁移工作就告以段落。

下一页
上一页