定时自动备份GitLab到挂载的windows共享盘

概述

本文介绍定时自动备份GitLab;Gitlab安装在Centos7上,备份位置是局域网上另一台Windows电脑上的共享目录。Gitlab支持全量和增量备份,全量备份完成后会生成一个tar包,通过该tar包即可还原备份;但实测备份数据达大时,备份完成后打 tar 包时会报错。但全量备份时可以跳过生成 tar 包,这会极大的节约资源消耗,因此一般都推荐跳过;但跳过打 tar 包会使备份数据保留在中间目录中,创建新备份时,这些文件将被覆盖;即,不打 tar 包时,系统上只能有一个备份。

常见的备份方案

方案一:全量备份一次,并在执行备份时跳过生成 tar 包,然后在全量备份的基础之上进行增量备份,但增量备份只支持存储库,不支持增量备份其它数据;

方式二:(推荐)定时全量备份,以确保所有数据都被完整备份。

备份前准备

1.0>. 在Windows系统上创建共享目录,并确保能够正常访问;

2.0>. 在Centos7上安装 cifs-utils,请参考Linux离线安装软件:https://www.sidoc.cn/doc/1459.html

cifs-utils 用于在 Linux 中支持和实现 CIFS 协议。CIFS 协议是用于在不同计算机之间共享文件和资源的一种网络协议。cifs-utils 提供了在 Linux 系统上使用 mount 命令挂载 CIFS 共享的工具和文件系统类型。它包含了必要的工具和库,使得 Linux 操作系统能够与 Windows 共享文件夹进行交互。

其它注意事项

在 VMware ESXi 中导出虚拟系统时,要先在虚拟系统的“CD/DVD驱动器”配置中取消“打开电源时连接”选项;否则导出后的映像无法再次导入,会提示无法连接到原系统CD/DVD驱动器所连接的镜像。

配置Gitlab备份

1.0> 编辑配置文件:

vim /etc/gitlab/gitlab.rb

2.0> 配置备份路径:

gitlab_rails['backup_path'] = '/var/opt/gitlab/backups/windows_share' # 备份位置

挂载Windons共享目录

将局域网上另一台Windows电脑上的目录挂载到本地Linux的指定目录上;这样一来,在Linux上在向挂载目录中存放、删除文件,就相当于操作另一台Windows电脑上的共享目录。

1.0> 运行Gitlab的用户是“git”,因此要获取“git”用户的用户ID和组ID

## 获取用户"git"的用户ID
id -u git
## 获取用户“git”的组ID
id -g git

2.0> 在linux中挂载Windows共享文件夹

## a. 临时挂载(用于测试) -------------------------------------------------------------------------
## 系统重启或当前会话结束后会临时挂载会自动解除
## 参数一:windows共享文件夹的完整路径
## 参数二:linux本地的挂载目录
## 参数三:username:windows共享文件夹访问用户名
## 参数四:password:windows共享文件夹访问密码
## 参数五:uid:挂载目录的属主用户ID
## 参数六:gid:挂载目录的属主组ID
## 参数七:dir_mode:挂载目录中文件夹的权限
## 参数八:file_mode:挂载目录中文件的权限
mount.cifs //192.168.10.104/gitlab-backup /var/opt/gitlab/backups/windows_share -o username=EDY,password=nwadmin,uid=996,gid=994,dir_mode=0700,file_mode=0700

## b. 永久挂载 --------------------------------------------------------------------------------
## 编辑fstab配置文件,该文件用于定义系统启动时需要自动挂载的文件系统
vim /etc/fstab 
## 在文件尾部添加如下内容
//192.168.10.104/gitlab-backup /var/opt/gitlab/backups/windows_share cifs username=EDY,password=nwadmin,uid=996,gid=994,dir_mode=0700,file_mode=0700
## 验证 /etc/fstab 文件语法错误,并重新加载
mount -a

注:Gitlab在备份时会检查备份目录的权限;备份目录的属主必须为Gitlab的运行用户“git”,并且备份目录的权限必须为700,即只有属主可读写,更大或更小的权限都会导致Gitlab报错。

3.0> 挂载操作的常用命令

注:不要给同一个Linux目录挂载多个windwos共享目录,否则可能会发生意想不到的错误;因为每一次挂载都是叠加的,会导致多个Windows共享目录同时挂载到同一个Linux目录上;

注:不要将同一个Windows共享目录挂载到多个Linux目录上,否则可能导致以前的挂载目录在使用时发生意想不到的错误。

## 查看已挂载的目录
df -h

## 卸载已挂在的目录
sudo umount /var/opt/gitlab/backups/windows_share

4.0> 使Gitlab配置生效

sudo gitlab-ctl reconfigure

5.0> 执行备份Gitlab

注:备份过程中不要编辑备份目录,否则会导致GitLab备份中断和异常。

注:因为 gitlab.rb 和 gitlab-secrets.json 文件中包含敏感信息,因此备份时不包含这两文件,需要自行手动备份,详见下方“定时备份”

## SKIP=tar表示不要将备份文件打成tar包,这会使备份的文件和目录保留在中间文件的目录中,创建新备份时,这些文件将被覆盖,因为不打tar包时,系统上只能有一个备份;
sudo gitlab-backup create SKIP=tar

6.0> 还原备份

注:还原时,Gitlab必须处于启动状态,并将备份和还原的Gitlab版本必须完全相同。

sudo gitlab-backup restore

定时备份

## 切换到超级用户(root)
sudo su -

## 编辑 crontab 文件以创建定时任务
crontab -e

## 在 crontab 文件中添加以下内容,以安排每天凌晨 2 点进行自动备份
0 2 * * * /opt/gitlab/bin/gitlab-backup create SKIP=tar CRON=1
## 因为 gitlab.rb 和 gitlab-secrets.json 中包含敏感信息,因此备份时不包含这两文件,需要自行手动备份:
0 2 * * * /bin/cp -f /etc/gitlab/gitlab.rb /var/opt/gitlab/backups/windows_share/git-data/gitlab.rb
0 2 * * * /bin/cp -f /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/windows_share/git-data/gitlab-secrets.json

CRON=1指示备份脚本隐藏所有进度输出,以减少 cron 垃圾邮件;但在排查备份问题时,请替换CRON=1--trace以便输出详细记录。


Gitlab备份官方文档:https://docs.gitlab.com/ee/administration/backup_restore/backup_gitlab.html

举报

© 著作权归作者所有


1