GitLab是一个基于Git实现的代码仓库软件,并且具有完善的管理界面和权限控制,一般可以用于在企业、学校等内部网络搭建Git代码仓库,对代码进行管理。公司内部之前已经有了一个GitLab代码仓库,出于安全考虑,打算在一台新的服务器上重新搭建个GitLab,定期将原来GitLab仓库的数据迁移到新的GitLab上,对代码进行备份保护。
GitLab的搭建方法还是比较简单的,首先官网给出的推荐配置:
最少需要2核 2GB以上内存,不然直接挂掉。
安装依赖项:
sudo apt install curl openssh-server ca-certificates postfix
其中postfix是邮件服务器,因为是内网的环境,邮件是没有用到的,在安装的时候选择ok即可。接在来要安装GitLab,考虑到后续的数据迁移,在网上查了下资料,在GitLab v13之前如果做数据迁移的话,最好两个GitLab的版本是相同的。查看GitLab版本的方法:
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
发现公司之前装的版本是12.9.2,所以要在GitLab官网中找到对应的版本下载安装。
官网的下载地址是:https://packages.gitlab.com/gitlab/gitlab-ce。经过搜索发现有很多个版本,因为服务器是Ubuntu 18.04的系统,所以我们选择ubuntu/bionic,bionic就是Ubuntu 18.04系统的代号别名,xenial对应的则是16.04。题外话,Ubuntu 系统的代号取名非常生动,比如18.04是Bionic Beaver(仿生海狸),17.04是Zesty Zapus(开心的跳鼠),16.04是Xenial Xerus (好客的非洲地松鼠),感兴趣的同学可以去查询下。
点击进入后会看到以下的界面:
然后执行右上角的curl命令,curl是一种用于从网上获取数据(获取网页,下载文件)命令行工具:
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
执行完成之后就能用apt install方法直接安装GitLab:
sudo apt-get install gitlab-ce=12.9.2-ce.0
安装完成后,GitLab的配置文件为gitlab.rb, 位置在/etc/gitlab文件夹下,需要修改的内容:
下面介绍些GitLab常用的命令:
sudo gitlab-ctl stop // 停止GitLab服务
sudo gitlab-ctl reconfigure // 重新配置GitLab服务
sudo gitlab-ctl restart // 重启所有GitLab组件
sudo gitlab-ctl start // 启动所有GitLab组件
sudo systemctl enable gitlab-runsvdir.service // 启用开机自启动
在修改完配置文件后执行sudo gitlab-ctl reconfigure(如果在配置文件中修改过默认路径,在用reconfigure命令时可能会因为文件权限问题报错,比如在本例中要在/home/gitlab这个路径下执行reconfigure命令)和sudo gitlab-ctl restart 之后就能在设定的Web IP地址上显示GitLab的登入页面。GitLab默认管理员账号名为root,第一次登入会让你重新设置登入密码,然后就能正常申请账号使用。
在搭建完新的GitLab之后,我们需要将老GitLab中的数据迁移到新GitLab中,做备份。因为是服务器与服务器之间数据迁移,用网上的一种方法是,直接将老GitLab代码仓库/var/opt/gitlab/git-data里repository的数据直接拷贝到新GitLab代码仓库路径下,好像没有生效。所以在这里博主用的是使用gitlab-rake命令的方法。
首先通过gitlab-rake命令进行备份,备份时需要GitLab出于正常运行状态,直接用下面命令进行备份:
sudo gitlab-rake gitlab:backup:create
如果没有修改备份路径的话会默认在/var/opt/gitlab/backups下创建一个类似的压缩包文件:
将压缩包文件用scp命令拷贝到新服务器GitLab备份文件夹(/home/gitlab/backups)下,用sudo chmod 777命令修改压缩包文件权限。
在使用这个压缩包文件前要闭GitLab某些服务:
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
然后用gitlab-rake命令, 注意BACKUP=后面跟的不是压缩包文件的全称:
gitlab-rake gitlab:backup:restore BACKUP=1688374217_2023_07_03_12.9.2
经过一段时间等待后,gitlab-rake命令恢复了数据,但是账号的数据还需要格外将原服务器中/etc/gitlab/gitlab-secrets.json文件覆盖到新的服务器中。不然你可能接下来会看到402的报错。
最后执行sudo gitlab-ctl reconfigure和sudo gitlab-ctl restart就完成了,经过测试可以使用老GitLab的账号直接登入新GitLab,并且看到对应项目代码,使用git clone也没有问题,备份完成。
这是博主进经过测试,GitLab数据迁移的方法,如果小伙伴们有更好的方法,欢迎留言,非常感谢。