gitlab部署升级代码备份和还原

运维

0.前言

GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务,可通过Web界面进行访问公开的或者私人项目。作为一个开源免费的web端代码仓库管理平台,Gitlab是很多中小型公司做代码版本控制的不二选择,所以今天我们就来部署一个gitlab玩一下。

1.环境准备

准备一台服务器,开始今天的实践之旅,配置如下:

操作系统ip地址CPU内存磁盘空间
Rocky8 Linux10.173.100.616核64G500G

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

picture.image 最终如果显示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地址,可以看到如下界面:

picture.image 初始账号为:root,初始密码在/etc/gitlab/initial_root_password文件下面(改文件为临时文件,将在24小时后删除),获取初始密码命令如下:

cat /etc/gitlab/initial_root_password |grep Password: 

显示信息如下:

Password: POho9+/NinBruLEiytvVa8QOZG98ERy13GuDxIIVm6c

在登录界面输入账号密码,即可进入gitlab,建议进入管理界面之后修改一下gitlab的root账号密码,登录成功后显示界面如下:

picture.image 之后就可以通过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"。
具体信息如下图所示: picture.image 创建完成之后就可以开始做代码备份了,命令如下:

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上检查一,可以看到之前的群组和项目都恢复了,如下图所示:

picture.image

6.总结

作为一个使用了多年gitlab的老鸟,感觉gitlab还是很好用的,操作简单,运行稳定,还支持ci/cd。从上面测操作可以看到gitlab部署,代码备份和还原也都非常的简单,对于需要代码仓库管理平台的公司,强烈案例一波吧。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论