0.前言
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务,可通过Web界面进行访问公开的或者私人项目。作为一个开源免费的web端代码仓库管理平台,Gitlab是很多中小型公司做代码版本控制的不二选择,所以今天我们就来部署一个gitlab玩一下。
1.环境准备
准备一台服务器,开始今天的实践之旅,配置如下:
操作系统 | ip地址 | CPU | 内存 | 磁盘空间 |
---|---|---|---|---|
Rocky8 Linux | 10.173.100.6 | 16核 | 64G | 500G |
gitlab组件比较多,还是比较吃内存的,所以内存可以稍微给大一点。
2.部署gitlab
服务器准备好之后,就可以开始部署了。
2.1 下载rpm包
本次我们采用rpm包的方式部署gitlab,首先需要到官网下载rpm包,下载地址:https://packages.gitlab.com/gitlab/gitlab-ce
因为本次部署还涉及到gitlab升级,所以下载两个版本的gitlab,分别是:
gitlab-ce-17.11.0-ce.0.el8.x86_64.rpm
gitlab-ce-17.11.1-ce.0.el8.x86_64.rpm
在官网选中要下载的rpm包,之后点击下载按钮即可。
2.2 安装gitlab
在官网下载好rpm包之后,将其放到服务器指定目录,比如:/data/rpm/install,部署就很简单了,一条命令即可,如下所示:
cd /data/rpm/install
yum install -y gitlab-ce-17.11.0-ce.0.el8.x86_64.rpm
最终如果显示complete字样,说明gitlab安装完成。
2.3 修改gitlab配置
gitlab配置文件为/etc/gitlab/gitlab.rb,主要要修改的配置为gitlab web端访问地址:
external_url 'http://10.173.100.6'
推荐修改为gitlab所在服务器的IP地址。
2.4 导入gitlab配置
配置修改之后,可以通过gitlab管理工具导入配置,命令如下:
gitlab-ctl reconfigure
导入配置文件的过程比较漫长,请耐心等待,如果最后出现:"gitlab Reconfigured!"字样,说明配置导入完成。
2.5 启动gitlab服务
配置导入完毕,下一步就是启动gitlab了,命令如下:
gitlab-ctl start
出现如下信息,说明服务启动完成:
ok: run: alertmanager: (pid 3780962) 143s
ok: run: gitaly: (pid 3780905) 146s
ok: run: gitlab-exporter: (pid 3780923) 145s
ok: run: gitlab-kas: (pid 3779898) 276s
ok: run: gitlab-workhorse: (pid 3780877) 147s
ok: run: logrotate: (pid 3779505) 300s
ok: run: nginx: (pid 3781202) 1s
ok: run: node-exporter: (pid 3780915) 146s
ok: run: postgres-exporter: (pid 3780995) 143s
ok: run: postgresql: (pid 3779705) 282s
ok: run: prometheus: (pid 3780934) 144s
ok: run: puma: (pid 3780003) 224s
ok: run: redis: (pid 3779551) 294s
ok: run: redis-exporter: (pid 3780925) 145s
ok: run: sidekiq: (pid 3780038) 218s
2.6 查看gitlab服务
服务启动之后,可以查看下gitlab各个组件服务的运行情况,命令如下:
gitlab-ctl status
输出信息如下:
run: alertmanager: (pid 3780962) 303s; run: log: (pid 3780711) 338s
run: gitaly: (pid 3780905) 306s; run: log: (pid 3779636) 447s
run: gitlab-exporter: (pid 3780923) 305s; run: log: (pid 3780277) 354s
run: gitlab-kas: (pid 3779898) 436s; run: log: (pid 3779922) 435s
run: gitlab-workhorse: (pid 3780877) 307s; run: log: (pid 3780141) 371s
run: logrotate: (pid 3779505) 460s; run: log: (pid 3779513) 459s
run: nginx: (pid 3781409) 2s; run: log: (pid 3780201) 367s
run: node-exporter: (pid 3780915) 306s; run: log: (pid 3780259) 361s
run: postgres-exporter: (pid 3780995) 303s; run: log: (pid 3780768) 332s
run: postgresql: (pid 3779705) 442s; run: log: (pid 3779763) 439s
run: prometheus: (pid 3780934) 304s; run: log: (pid 3780659) 342s
run: puma: (pid 3780003) 384s; run: log: (pid 3780031) 381s
run: redis: (pid 3779551) 454s; run: log: (pid 3779564) 453s
run: redis-exporter: (pid 3780925) 305s; run: log: (pid 3780601) 349s
run: sidekiq: (pid 3780038) 378s; run: log: (pid 3780075) 375s
2.7 访问gitlab
之前我们将gitlab web地址修改为了服务器IP地址,现在通过服务器IP即可访问gitlab了,在浏览器键入IP地址,可以看到如下界面:
初始账号为:root,初始密码在/etc/gitlab/initial_root_password文件下面(改文件为临时文件,将在24小时后删除),获取初始密码命令如下:
cat /etc/gitlab/initial_root_password |grep Password:
显示信息如下:
Password: POho9+/NinBruLEiytvVa8QOZG98ERy13GuDxIIVm6c
在登录界面输入账号密码,即可进入gitlab,建议进入管理界面之后修改一下gitlab的root账号密码,登录成功后显示界面如下:
之后就可以通过gitlab来管理私有代码仓库了。
3.升级gitlab
到目前为止,gitlab已经部署完成,并且可以正常访问了,接下来我们来看看如何对gitlab进行升级。
首先我们来看下现有的gitlab版本,命令如下:
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
显示如下:
17.11.0
可以看到是我们刚刚部署的17.11.0版本。
gitlab版本升级路径,可以查看:
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path
这个网址,要注意的是gitlab只支持一个小版本一个小版本的升级。
之前我们已经下载了待升级的rpm包,只需要执行安装命令,就可以完成升级了:
yum install -y gitlab-ce-17.11.1-ce.0.el8.x86_64.rpm
更新完成之后,我们再看下版本号:
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
显示信息如下:
17.11.1
可以看到版本已经更新到了17.11.1。
4.gitlab代码备份
在代码备份之前,我们先造一些测试用的group和project,直接在gitlab上操作即可,我这里创建了一个群组a-test-group,包含两个子群组a-backend-test-group、a-frotend-test-group,群组a-backend-test-group里面包含一个项目"Test Backend Project",群组a-frotend-test-group里面包含一个项目"A Frontend Project"。
具体信息如下图所示:
创建完成之后就可以开始做代码备份了,命令如下:
gitlab-rake gitlab:backup:create
信息输出如下:
2025-04-24 06:30:02 UTC -- Dumping repositories ... done
2025-04-24 06:30:02 UTC -- Dumping uploads ...
2025-04-24 06:30:02 UTC -- Dumping uploads ... done
2025-04-24 06:30:02 UTC -- Dumping builds ...
2025-04-24 06:30:02 UTC -- Dumping builds ... done
2025-04-24 06:30:02 UTC -- Dumping artifacts ...
2025-04-24 06:30:02 UTC -- Dumping artifacts ... done
2025-04-24 06:30:02 UTC -- Dumping pages ...
2025-04-24 06:30:02 UTC -- Dumping pages ... done
2025-04-24 06:30:02 UTC -- Dumping lfs objects ...
2025-04-24 06:30:02 UTC -- Dumping lfs objects ... done
2025-04-24 06:30:02 UTC -- Dumping terraform states ...
2025-04-24 06:30:02 UTC -- Dumping terraform states ... done
2025-04-24 06:30:02 UTC -- Dumping container registry images ... [DISABLED]
2025-04-24 06:30:02 UTC -- Dumping packages ...
2025-04-24 06:30:02 UTC -- Dumping packages ... done
2025-04-24 06:30:02 UTC -- Dumping ci secure files ...
2025-04-24 06:30:02 UTC -- Dumping ci secure files ... done
2025-04-24 06:30:02 UTC -- Dumping external diffs ...
2025-04-24 06:30:02 UTC -- Dumping external diffs ... done
2025-04-24 06:30:02 UTC -- Creating backup archive: 1745476201_2025_04_24_17.11.1_gitlab_backup.tar ...
2025-04-24 06:30:02 UTC -- Creating backup archive: 1745476201_2025_04_24_17.11.1_gitlab_backup.tar ... done
2025-04-24 06:30:02 UTC -- Uploading backup archive to remote storage ... [SKIPPED]
2025-04-24 06:30:02 UTC -- Deleting old backups ... [SKIPPED]
2025-04-24 06:30:02 UTC -- Deleting tar staging files ...
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/db
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/repositories
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/ci_secure_files.tar.gz
2025-04-24 06:30:02 UTC -- Cleaning up /var/opt/gitlab/backups/external_diffs.tar.gz
2025-04-24 06:30:02 UTC -- Deleting tar staging files ... done
2025-04-24 06:30:02 UTC -- Deleting backups/tmp ...
2025-04-24 06:30:02 UTC -- Deleting backups/tmp ... done
2025-04-24 06:30:02 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2025-04-24 06:30:02 UTC -- Backup 1745476201_2025_04_24_17.11.1 is done.
2025-04-24 06:30:02 UTC -- Deleting backup and restore PID file at [/opt/gitlab/embedded/service/gitlab-rails/tmp/backup_restore.pid] ... done
最后显示"done"这个字样,并且没有报错的话,就说明代码备份完成了。
可以在备份目录查看备份包,命令如下:
ll /var/opt/gitlab/backups/
输出信息如下:
-rw-------. 1 git git 634880 Apr 24 13:35 1745472902_2025_04_24_17.11.0_gitlab_backup.tar
-rw-------. 1 git git 706560 Apr 24 14:30 1745476201_2025_04_24_17.11.1_gitlab_backup.tar
可以看到有两个备份包,一个是刚才升级的时候自动生成的17.11.0版本的备份包,另外一个是刚刚执行备份命令生成的,到此备份就完成了,一条命令即可,还是很简单的。
5.gitlab代码还原
现在我们在gitlab上把之前创建的测试用的群组和项目都删掉(只需删除a-test-group),删除完成之后我们来恢复一下备份包,命令如下:
gitlab-rake gitlab:backup:restore BACKUP=1745476201_2025_04_24_17.11.1
注意:恢复的备份包名只到数字最后一位即可。 输出信息如下:
...............
2025-04-24 06:57:41 UTC -- Deleting tar staging files ...
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/db
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/repositories
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/ci_secure_files.tar.gz
2025-04-24 06:57:41 UTC -- Cleaning up /var/opt/gitlab/backups/external_diffs.tar.gz
2025-04-24 06:57:41 UTC -- Deleting tar staging files ... done
2025-04-24 06:57:41 UTC -- Deleting backups/tmp ...
2025-04-24 06:57:41 UTC -- Deleting backups/tmp ... done
2025-04-24 06:57:41 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need to restore these files manually.
2025-04-24 06:57:41 UTC -- Restore task is done.
2025-04-24 06:57:41 UTC -- Deleting backup and restore PID file at [/opt/gitlab/embedded/service/gitlab-rails/tmp/backup_restore.pid] ... done
出现"done"字眼,说明数据恢复完成,我们到gitlab上检查一,可以看到之前的群组和项目都恢复了,如下图所示:
6.总结
作为一个使用了多年gitlab的老鸟,感觉gitlab还是很好用的,操作简单,运行稳定,还支持ci/cd。从上面测操作可以看到gitlab部署,代码备份和还原也都非常的简单,对于需要代码仓库管理平台的公司,强烈案例一波吧。