如何设置Gitlab服务器备份
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
两台服务器上的备份文件保持完全相同。