如何设置Gitlab服务器备份

时间:2020-03-05 15:31:14  来源:igfitidea点击:

Gitlab是存储所有GIT存储库的绝对解决方案。
即使有一些人忽略它,备份是一个重要的活动,因为反复磨损过于烦躁,并且增加了他们作为开发人员的挫败感。
因此,自动化备受吉特拉采购库的整个过程是一个好主意。
我会在这里解释如何实现这一点。

在我上一篇文章中,我已经解释了如何在Ubuntu服务器上安装安全的Gitlab。
在本文中,我将解释如何备份其数据。
每个人都应该遵循的一种基本方法是每天,每周和每月备份,因为如果一个人失败了。
切勿将备份保存在Gitlab Server本身上,因为如果服务器崩溃,那么备份也会丢失。
让我们看看如何备份Gitlab Server并在远程服务器上存储。

创建备份

Gitlab有一个内置任务,可以备份其数据和存储库。
但我们需要确保我们将此备份脚本运行为Git用户来维护一致和正确的文件权限。

root@theitroad:/home/git/gitlab# sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
done
Dumping repositories ...
done
Dumping uploads ...
done
Creating backup archive: 1479023906_gitlab_backup.tar ... done
Deleting tmp directories ... done
Deleting old backups ... skipping

备份是在Gitlab安装下的"/home/git/gitlab/tmp/backup"文件夹中创建的。

root@theitroad:/home/git/gitlab/tmp/backups# ll
total 68
drwxr-xr-x 2 git git 4096 Nov 13 07:58 ./
drwxr-xr-x 7 git git 4096 Nov 13 07:58 ../
-rw-r--r-- 1 git git 61440 Nov 13 07:58 1479023906_gitlab_backup.tar

备份配置文件

Gitlab备份实用程序仅备份数据和存储库。
但作为一种安全措施,总是建议将备份保留在恢复Gitlab应用程序备份时可以使用的配置文件。
我愿意备份整个"Gitlab"配置文件夹。
我创建了一个备份.sh脚本来备份gitlab配置文件夹,并将其保存在我们的gitlab backup文件夹"/home/git/gitlab/tmp/backups/config-backups /"下。
请看下面的备份脚本:

#!/bin/sh
umask 0077;
cd /home/git/gitlab/
tar -czf /home/git/gitlab/tmp/backups/config-backups/config.$(date +%s).tgz config

我们可以添加此脚本以在Cron中运行以根据需要自动备份这些配置文件。
我安排了每个星期一凌晨2点运行。
我会在后面的部分解释这个cron。

在服务器之间启用SSH密钥身份验证

我们需要为Gitlab源上的root创建一个ssh键,并将公钥复制到Gitlab备份服务器,以在帐户同步期间增强服务器之间的SSH连接。

Gitlab SRC Server的IP = 104.131.169.217 Gitlab Dest Server的IP = 104.236.195.186

root@theitroad:/home/git/gitlab/tmp/backups# ssh-keygen
root@theitroad:# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

一旦完成,可以验证备份服务器上的授权键。

root@-backupnode:~/.ssh# cat authorized_keys

同步备份文件

其中我们正在使用名为lsyncd的实时同步守护程序。
它用于在特定时间间隔后本地和远程同时同步或者复制文件和目录。
它在后端使用rsync&ssh。
它监视源服务器上的目录,如果源端上发生任何更改或者修改,则Lsyncd将在特定时间间隔之后在其备份服务器上复制相同。

我们只需在源服务器上安装此操作。
我们可以只需一个命令安装此软件包。

root@theitroad:/homes# apt-get install lsyncd

接下来,我们需要设置LSYNCD的配置文件,以使其根据需要工作。
首先,我们需要从"/usr/share"文件夹中复制lrsync.lua文件并将其复制到/etc文件夹。

我在/etc /文件夹中创建了一个"lsyncd"文件夹,并在那里复制这个文件。

root@theitroad-:/etc# mkdir /etc/lsyncd
root@theitroad-:/etc# cp -rp /usr/share/doc/lsyncd/examples/lrsync.lua /etc/lsyncd/lsyncd.conf.lua

将以下行添加到配置文件中,如屏幕截图中。

我们会将"default.rsync"更改为"default.rsyncssh"以启用rsync过ssh,并且我们应该用"主机"和"targetdir"变量替换"目标"变量。
此外,我们需要为LSYNCD创建一个日志目录和日志/状态文件。

root@theitroad-:/etc# mkdir -p /var/log/lsyncd/
root@theitroad-:/var/log/lsyncd# touch lsyncd.log lsyncd-status.log

最后,我们需要重新启动并启用源服务器上的LSYNCD服务。

root@theitroad-:/etc/lsyncd#systemctl restart lsyncd
root@theitroad-:/etc/lsyncd# systemctl status lsyncd

配置Cron作业

我们的下一个任务是在源服务器上配置CronJobs以生成Git存储库备份文件。
我们甚至可以创建一个cronjob以从备份文件夹清除较旧的备份。
让我们通过使用Cron作业来自动化所有这些。

我创建了三个cronjobs,如下所示:

# m h dom mon dow command
0 1 * * 1 cd /home/git/gitlab && sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
0 3 * * 1 find /home/git/gitlab/tmp/backups/*.tar -mtime +30 -exec rm {} \;
0 2 * * 1 /root/backup.sh
  • 每周创建Gitlab数据和应用程序备份,周一每周凌晨1点
  • 删除从备份文件夹删除超过30天的备份。
  • 每个星期一返回配置文件夹凌晨2点

我使用命令"crontab -e -u root"将这些添加到我的根cron中。

请注意:Gitlab Backup文件夹中的任何文件更改将自动更新到远程备份服务器。

验证备份

最后,我通过登录我的远程备份服务器验证了备份服务器上的备份。

root@backupnode:/home/gitlab/backup# pwd
/home/gitlab/backup
root@backupnode:/home/gitlab/backup# ls -R
.:
1479107412_gitlab_backup.tar 1479108008_gitlab_backup.tar 1479108610_gitlab_backup.tar config-backups
1479107710_gitlab_backup.tar 1479108309_gitlab_backup.tar 1479108912_gitlab_backup.tar
./config-backups:
config.1479189401.tgz config.1479189661.tgz config.1479189781.tgz config.1479189901.tgz
config.1479189601.tgz config.1479189721.tgz config.1479189841.tgz

两台服务器上的备份文件保持完全相同。