GitLab自动备份及还原

发布时间 2024-01-12 14:25:38作者: 博小群

零:前言
想要实现GitLab自动备份,可以借助GitLab自带的备份脚本以及Linux系统的crontab定时任务功能。
有些同志可能没接触过crontab——Linux系统中自带的一个定时任务管理工具,可以通过它设置系统定期执行某些命令或脚本。在下文相关部分我会再浅浅的说一下配置。
一、自动备份
1.1GitLab备份脚本
GitLab自带了备份脚本,可以通过执行命令gitlab-rake gitlab:backup:create来进行备份。备份文件默认会保存在/var/opt/gitlab/backups目录下。当然这些配置是可以更改的:
打开GitLab的配置文件/etc/gitlab/gitlab.rb。

设置备份文件存放路径

gitlab_rails['backup_path'] = "/mnt/backups"

设置备份文件的权限

gitlab_rails['backup_archive_permissions'] = 0644

设置备份文件保留时间(单位为秒),超过该时间的备份文件将被自动清理

gitlab_rails['backup_keep_time'] = 604800
设置完成后别忘了重新加载配置文件
sudo gitlab-ctl reconfigure
重新启动GitLab服务
sudo gitlab-ctl restart
到这一步你已经按照自己的心意配置好了备份脚本的功能,可以试一试手动备份了,友情提示:最好确保你的仓库没有处于交互状态下。
什么?你问我怎么进行手动备份?好吧,请看:
GitLab自带了备份脚本,可以通过执行命令gitlab-rake gitlab:backup:create来进行备份。看这种垃圾文章也不可一目十行,去看看你配置好的路径下有没有备份文件吧。
还有一件事:在备份 GitLab 时,gitlab.rb 和 gitlab-secrets.json 配置文件中包含敏感数据,并未包含在备份文件中,这个就要靠你自己了,在仓库迁移到新服务器的时候一定要做好备份
gitlab.rb 文件包含 GitLab 的配置参数,如端口号、域名、SSL 设置等。
gitlab-secrets.json 文件则包含了一些关键的安全密钥,比如加密用的 token、私钥和公钥等。
1.2定时任务
接下来我们就要借助crontab的力量了,我们既然可以通过执行命令进行备份,那么我们找一个管家,按照咱们的意愿执行命令,这不就可以实现自动备份了吗。crontab就是这个管家。
本文未涉及crontab服务的安装过程,请依照不同系统安装好再继续向下观看!
当然“机无完机”,管家也是有依赖的,crontab定时任务依赖于系统时间,如果系统时间不准确,可能会导致定时任务执行时间不准确。开始搞事之前先确认一下机器的时间吧。
每个用户都有一个crontab文件,它包含了要运行的命令或脚本以及运行这些命令的时间计划,文件通常保存在/var/spool/cron目录中。这样是不是每添加一个定时任务,就需要修改一下这个目录下的文件呢,当然按照我说这句话的语义来判断,你肯定知道了还有别的方法。别搜索了,请看:
-u:指定要操作的用户。默认情况下,crontab 命令将会使用当前用户的 crontab 文件。
-e:打开指定用户的 crontab 文件以进行编辑。如果文件不存在,则会创建一个新的 crontab 文件。
-l:列出指定用户的 crontab 文件中的所有条目。
-r:删除指定用户的 crontab 文件。在运行此命令之前,程序会提示你确认是否要删除。
-i:当运行 -r 命令时提示用户进行确认。
-n:在群集环境中,指定要运行 crontab 的主机。
-c:在群集环境中,获取当前运行 crontab 的主机。
-s:设置 SELinux 上下文。
-x :启用调试模式,方便调试 crontab 任务。
1.2.1添加备份命令
打开编辑模式
crontab -e
添加命令行
在这可能有个问题,请确认一下 /usr/bin/gitlab-rake符号链接是否存在,如果存在按照下文添加即可。如果不存在,则需要你自行找到“gitlab-rake命令行工具”在哪个路径下,并把下文路径“/usr/bin/gitlab-rake”替换成对应路径。

每天凌晨 02:00执行备份脚本命令

0 2 * * * /usr/bin/gitlab-rake gitlab-rake gitlab:backup:create
具体来说,0 2 * * * 是 cron 时间格式的一部分,表示分别为 分钟、小时、日期、月份、星期几,你可以根据你的需求修改。在这个例子中,它代表的是:
0:在 0 分钟执行;
2:在 2 点(也就是凌晨两点)执行;
*:每个值都匹配,即每个日期、月份及星期都匹配;
*:每个值都匹配,即每个月份都匹配;
*:每个值都匹配,即每个星期都匹配。
1.2.2查看定时任务
输入命令查看正在运行的定时任务,如果发现了刚才添加的命令就大功告成了。
crontab -l
二、备份还原
2.1停止 GitLab 组件
在还原过程中,需要停止 GitLab 组件以保证数据的一致性。

负责 Web 请求的流量控制、负载均衡和应用进程管理的组件

sudo gitlab-ctl stop unicorn

处理异步任务的核心组件,例如发送电子邮件、构建代码等

sudo gitlab-ctl stop sidekiq
2.2还原数据
执行以下命令来还原备份文件,其中 表示备份文件的时间戳和版本,备份文件在哪找不用我bb了吧。
sudo gitlab-backup restore BACKUP=
这是一个备份文件:1687165982_2023_06_19_16.0.4_gitlab_backup.tar。以它为例:
就应该替换为1687165982_2023_06_19_16.0.4
还原的过程中会输入两次yes,待其跑完流程后,如果是你在一个新的服务器将仓库迁移过去别忘了把gitlab.rb 和 gitlab-secrets.json 配置文件也替换过去。
2.3启动GitLab 服务
执行以下命令启动 GitLab 服务:
sudo gitlab-ctl start