前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在Rocky Linux 8.3 RC1上安装GitLab实现代码仓库同步容灾

在Rocky Linux 8.3 RC1上安装GitLab实现代码仓库同步容灾

原创
作者头像
欧巴云
修改于 2021-05-17 10:04:28
修改于 2021-05-17 10:04:28
1.1K0
举报
文章被收录于专栏:木子说木子说

文章声明:此文基于木子实操撰写

生产环境:Rocky Linux release 8.3, gitlab-ce-13.9.4-ce

问题关键字:gitlab备份,gitlab恢复,gitlab备份与恢复,gitlab迁移,gitlab容灾


前述

前几天一直在做RockyLinux中文社区SEO优化与博客系统镜像,所以一直没有更新Rocky Linux 系列教程,今天抽时间一定输出一篇。

为了确保代码仓库的连续可用性,木子计划再部署一套Gitlab服务器,与现有Gitlab服务器同步,并且为了实现异地容灾,木子采用了广州与北京双节点部署方案。

实现此需求的方案有很多:

  • 使用Git Clone命令
  • 使用Git Pull 与 Push命令
  • 使用Gitlab自带的镜像仓库功能(推荐,简单方便)
  • 使用第三方工具

因为Gitlab自带镜像仓库功能,所以木子采用了官方提供的方法,此方法存有一个问题,如果您是CE版(社区版)Gitlab,它只支持Git Push,也就是说它只支持从源Gitlab服务器到目标Gitlab服务器的同步,不支持Git Pull,换句话说就是只支持单向同步,如果需要实现双向同步,需要EE版(企业版)的支持。但对于我们来说单向同步已经能够满足基本需求了。Gitlab的镜像仓库功能是基于Git Pull事件监控进行同步的,所以同步速度也是非常快的,详细参考下图所示。

整个过程分成以下几步:

  • 部署Gitlab服务器(源Gitlab服务器版本与目标Gitlab服务器版本必须相同,是Gitlab包的版本)
  • 备份现在Gitlab服务器上的项目,然后在Gitlab目标服务器上还原
  • 配置每个仓库的镜像仓库

配置备份

备份文件名

备份文件名格式,采用时间戳+Gitlab版本号方式,如:TIMESTAMP时间戳_Gitlab版本号gitlab_backup.tar,由gitlab-ctl命令根据规则自动生成。

修改备份文件目录

备份文件默认保存的目录在/etc/gitlab/gitlab.rb文件中进行配置,缺省状态下备份文件会保存在/var/opt/gitlab/backups目录下,可以根据需要修改备份文件的保存目录。

代码语言:txt
AI代码解释
复制
gitlab_rails['backup_path'] = "/git-data/backups"

设置备份过期时间

代码语言:txt
AI代码解释
复制
# 保留时间以秒为单位
gitlab_rails['backup_keep_time'] = 604800

对应配置修改完成以后,需要使用gitlab-ctl reconfigure命令重新生成新的配置文件,并重启Gitlab服务生效配置。

代码语言:txt
AI代码解释
复制
# 重配Gitlab
gitlab-ctl reconfigure
# 重启Gitlab
gitlab-ctl restart

Gitlab自动备份

补充一句,可以使用gitlab-backup命令设置定时任务,每天备份一次Gitlab仓库,然后同步至其它地方(比如:xx云OSS),实现冷备功能。

代码语言:txt
AI代码解释
复制
# 创建定时任务,每天晚上2点整进行备份
crontab -e
0 2 * * * gitlab-backup create CRON=1

创建备份

备份文件

备份所生成的tar归档文件,实际是由如下目录所组成,各目录所保存的数据内容和目录名称如下所示:

目录名称

备份文件说明

db

数据库备份:主要为PostgreSQL数据库数据内容

uploads

附件数据备份

repositories

Git仓库数据备份

builds

CI Job输入日志等数据备份

artifacts

CI Job构件数据备份

lfs

LFS对象数据备份

registry

容器镜像备份

pages

GitLab Pages content数据备份

手工备份文件

因为执行备份命令的时候,出于安全因素考虑,并不会备份配置文件和密钥文件,所以需要手工进行备份与恢复:

代码语言:txt
AI代码解释
复制
/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb

开始备份

代码语言:txt
AI代码解释
复制
# 执行命令(GitLab 12.1之后版本)
gitlab-backup create
# 在执行备份的整个过程中,会有两个提示,直接yes就可以了。

# 执行命令(GitLab 12.1及之前版本)
gitlab-rake gitlab:backup:create

安装Gitlab服务器

如前面所述,我们需要安装与源Gitlab服务器相同版本的Gitlab包,才能够确保导入配置不会报错。

代码语言:txt
AI代码解释
复制
# 源Gitlab服务器查看Gitlab安装包,可以看到对应包为13.9.4(此方法仅适用于采用rpm安装包安装,如果您是二进制安装,请查看官方文档。)
[root@git backups]# rpm -qa | grep gitlab
gitlab-ce-13.9.4-ce.0.el7.x86_64

# 至Giltab目标服务器下载并安装对应Gitlab
[root@localhost ~]# curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/gitlab-ce-13.9.4-ce.0.el8.x86_64.rpm
[root@localhost ~]# dnf install gitlab-ce-13.9.4-ce.0.el8.x86_64.rpm

# 同样我们需要在gitlab.rb中配置备份目录gitlab_rails['backup_path'],并重新生成配置文件,重启Gitlab服务器。
cat > /etc/gitlab/gitlab.rb << EOF
# 域名设置
external_url 'https://sync.oubayun.com'
# 修改Gitlab备份路径
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/git-data/backups"
# 设置git数据存放目录
git_data_dirs({
  "default" => {
    "path" => "/git-data"
   }
})
# 启用Nginx
nginx['enable'] = true
# 启用http跳转https
nginx['redirect_http_to_https'] = true
registry_nginx['redirect_http_to_https'] = true
mattermost_nginx['redirect_http_to_https'] = true
# 配置Nginx证书
nginx['ssl_certificate'] = "/etc/gitlab/ssl/oubayun.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/oubayun.com.key"
# 配置加密协议与加密套件
nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256"
nginx['ssl_prefer_server_ciphers'] = "on"
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
EOF

# 重新生成配置
gitlab-ctl reconfigure

# 重启服务
gitlab-ctl restart

同步备份

从gitlab源服务器同步备份至gitlab目标服务器,并进行相应权限设置。

代码语言:txt
AI代码解释
复制
# 拉取备份文件
[root@gitsync ~]# scp -P 22 root@源Gilab服务器IP:/git-data/backups/1633974727_2021_05_17_13.9.4_gitlab_backup.tar /git-data/backups/

# 拉取密钥文件
[root@gitsync ~]# scp -P 22 root@源Gilab服务器IP:/etc/gitlab/gitlab-secrets.json /etc/gitlab/

# 拉取配置文件(木子因为两个配置文件不同,所以没有拉取,如果您是迁移服务器,就需要拉取过来,然后直接改域名解析IP即可。)
[root@gitsync ~]# scp -P 22 root@源Gilab服务器IP:/etc/gitlab/gitlab.rb /etc/gitlab/

# 设置压缩包用户权限为git:git
[root@gitsync ~]# cd /git-data/backups/
[root@gitsync backups]# chmod git:git 1633974727_2021_05_17_13.9.4_gitlab_backup.tar
[root@gitsync backups]# ls -l
total 20247212
-rw------- 1 git git 20732313600 May 17 16:08 1633974727_2021_05_17_13.9.4_gitlab_backup.tar

恢复备份

代码语言:txt
AI代码解释
复制
# 停止连接到数据库的进程,保证其余的GitLab服务运行
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

# 确认以上三个服务已经停止
sudo gitlab-ctl status

# 接下来,还原备份,并指定要还原备份的时间戳记:
sudo gitlab-backup restore BACKUP=1633974727_2021_05_17_13.9.4

# 恢复过程中可能报错:
ERROR: must be owner of extension pg_trgm
ERROR: must be owner of extension btree_gist
ERROR: must be owner of extension pg_trgm
# 可以忽略,官方回复:https://gitlab.com/gitlab-org/gitlab/-/issues/266988

# 最后提示
This task will now rebuild the authorized_keys file.
You will lose any data stored in the authorized_keys file.
Do you want to continue (yes/no)? yes

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.
Restore task is done.

# 根据需要还原gitlab.rb和gitlab-secrets.json,因为木子的gitlab.rb备份服务器与主服务器配置不同,所以没有进行还原,只还原了gitlab-secrets.json,如果您是从一台服务器直接恢复到另一台服务器,原有旧服务器不再需要了,就可以直接将gitlab.rb还原,并将对应域名解析切换至新服务器即可。

# 重新配置,重启并检查GitLab:
[root@gitsync git-data]# gitlab-ctl reconfigure
[root@gitsync git-data]# gitlab-ctl restart
[root@gitsync git-data]# gitlab-ctl status
[root@gitsync git-data]# gitlab-rake gitlab:check SANITIZE=true

注意:在安装Gitlab时如果您有初始化配置,会发现还原完后,新Gitlab服务器的账号密码会被原服务器的账号密码所覆盖。这时候登录可以很清晰的看到仓库对应的分支、提交记录等。

设置镜像仓库

镜像仓库设置比较简单,在源服务器进到对应仓库,设置--仓库--镜像仓库

Git仓库URL:https://<用户名>@<目标服务器git仓库地址>

如:

https://muzi@sync.oubayun.com/it/test.git

仓库登录密码:具有仓库管理员权限的密码,木子这里为muzi的密码。

设置完成以后,点击镜像仓库,再点击下面的立即更新按钮,马上进行同步。

镜像仓库的功能其实就是基于用户的提交事件进行同步镜像的,所以当您提交到主仓库的时候,备仓库也会立马更新。

当然官方有提供对应的API,如果您仓库比较多,可以通过脚本批量设置。

写在最后

此文适应于Gitlab服务器迁移、备份、恢复、容灾等需求的实现。相对于其它开源项目,gitlab对应的wiki真得非常丰富。

下篇预告:Rocky Linux 8.3 RC1 OpenSSH升级至openssh-8.6p1,如果您有任何想学习了解的技术,欢迎在下方留言,木子将根据需求输出对应基础技术博文。

参考文献

1 GitLab官方备份仓库设置文档:https://docs.gitlab.com/omnibus/settings/backups.html

1 GitLab官方备份与恢复文档:https://docs.gitlab.com/ce/raketasks/backup_restore.html

2 GitLab官方Nginx配置文档:https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port


五平台同步更新:

博客: 欧巴云

知乎: 欧巴云

51CTO: 欧巴云

云+社区: 欧巴云

微信公众号: 欧巴云

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS7安装维护Gitlab
下面是官网复制过来的官方安装方法,最简单的安装,在我大天朝,只能望天兴叹,你可翻墙安装或者略过这里,看下面的。
小弟调调
2018/09/11
5.1K0
Gitlab迁移
gitlab 配置文件:/etc/gitlab/gitlab.rb 重新加载配置:gitlab-ctl reconfigure 重启服务:gitlab-ctl restart 启动服务:gitlab-ctl start 停止服务:gitlab-ctl stop
cuijianzhe
2022/06/14
4670
私有化代码仓库Gitlab的落地与应用(一)
前段时间,接到任务:尝试搭建一个私有化的代码仓库给前端团队使用。刚好在此之前我用Docker搭建过一个Gitlab,但使用了几天,出现了诸多问题,维护起来也比较麻烦,最终决定按照传统方法重新搭建。截至目前,服务已平稳运行数月。本文主要记录《私有化代码仓库Gitlab的落地与应用》系列(一):Gitlab传统搭建方式及后台维护,内容主要分为以下几个部分:
大刚测试开发实战
2022/11/14
1.2K0
私有化代码仓库Gitlab的落地与应用(一)
gitlab备份与恢复
本文介绍了 GitLab 的备份与恢复功能,包括系统备份、配置文件备份和定时备份等。同时,还介绍了如何恢复备份的步骤。
shaonbean
2018/01/02
1.6K0
gitlab 备份&恢复
默认 Gitlab 的备份文件会创建在/var/opt/gitlab/backups文件夹中,格式为时间戳_日期_版本号_gitlab_backup.tar,例如:1515031353_2018_01_04_10.3.2_gitlab_backup.tar。 修改备份文件夹,需要修改配置文件/etc/gitlab/gitlab.rb中的:
陈不成i
2021/06/04
1.8K0
gitlab备份与还原
由于gitlab中存放的都是开发人员的工作成果,所以为了保证数据安全,我们会定期对数据进行备份,对gitlab进行备份将会创建一个包含所有库和附件的归档文件。对备份的恢复只能恢复到与备份时的gitlab相同的版本。将gitlab迁移到另一台服务器上的最佳方法就是通过备份和还原。gitlab提供了一个简单的命令行来备份整个gitlab ,并且能灵活的满足需求。
星哥玩云
2022/09/15
1.8K0
GitLab 备份与恢复
在 GitLab 中,备份和恢复是运维中非常关键的部分,尤其是数据的安全与一致性。以下是具体操作指南。
锅总
2024/11/25
2830
GitLab 备份与恢复
Gitlab安装部署及基础操作
环境说明 系统版本 CentOS 7.2 x86_64(较新版本的gitlab集成了更多功能,顺利运行起来的硬件要求较高,这里给了3G内存) 软件版本 gitlab-ce-10.8.4
仙人技术
2020/04/29
5.2K0
gitlab 部署
下载汉化补丁 git clone https://gitlab.com/xhang/gitlab.git #下载补丁 cat gitlab/VERSION #查看汉化版本 下载指定版本 https:/
以谁为师
2019/05/31
1.4K0
将gitlab备份到群辉nas的操作
CRON=1:环境设置,将告诉备份脚本禁止所有进度输出. 这样就不会收到带有作业输出的冗余电子邮件。
悟空宇
2024/03/26
9850
迁移 GitLab 小记
其他升级方式可以来这里看:Updating GitLab installed with the Omnibus GitLab package
宋天伦
2020/07/15
2.3K0
一些搬迁GitLab环境中碰见的问题和解决
因为单位机房搬迁,涉及到之前为运维开发搭建的GitLab环境也需要做迁移。旧环境中安装的时候很顺畅基本没有碰见什么问题(参考:http://blog.csdn.net/bisal/article/details/52515327),但这次新环境的安装着实费了一些功夫,碰见了一些棘手的问题,记录于此,对碰见这些问题的朋友们有所帮助。
bisal
2019/01/30
2K0
gitlab-11.1.4继续升级到15.9.3
基于:gitlab远古版本备份&还原&升级,twang2218/gitlab-ce-zh镜像指支持到了11.1.4图片
对你无可奈何
2023/03/10
1.8K0
GitLab如何进行备份恢复与迁移?
首先我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份。
全栈程序员站长
2022/06/29
1.3K0
GitLab 安装部署使用
GitLab:是一个基于Git实现的在线代码仓库托管软件,你可以用gitlab自己搭建一个类似于Github一样的系统,一般用于在企业、学校等内部网络搭建git私服。
小陈运维
2022/01/04
9910
Gitlab备份和恢复操作记录
前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录: 1)Gitlab的备份目录路径设置 [root@code-server ~]# vim /etc/gitlab/gitlab.rb gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/data/gitlab/backups" //gitlab备份目录 gitlab_rails['backup_archive_permis
洗尽了浮华
2018/01/23
1.7K0
相关推荐
CentOS7安装维护Gitlab
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文