为了防止gitlab服务器硬盘损坏等问题导致代码丢失,最好定时自动备份git仓库并保存在远程文件服务器上,下面是我的配置过程
- gitlab存储的目录
在ubuntu中默认的gitlab仓库是在 /var/opt/gitlab/git-data/repositories 中,gitlab的备份文件保存在 /var/opt/gitlab/backups 之中
- 修改备份保存的目录和保存时间
我这里gitlab服务器挂载了两块硬盘,git仓库在第一块硬盘(/),于是我想要将gitlab的备份放在第二块硬盘中(/backups).如果没有这样的需求,只是将git备份在远程服务器的话,这一步可以省略.
-
修改gitlab配置文件
打开/etc/gitlab/gitlab.rb
sudo vi /etc/gitlab/gitlab.rb
找到
#gitlab_rails['manage_backup_path'] = ture #gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
两行,去掉注释符号'#',然后将 /var/opt/gitlab/backups 改成自己想要存放的备份文件路径 /backups
找到
#gitlab_rails['backup_keep_time'] = 604800
去掉注释符号'#',将604800改成自己想要的保存时间,这里单位是秒,604800表示一周,我改成了86400,最多保存一天
-
更新gitlab配置
sudo gitlab-ctl reconfigure
-
-
创建备份脚本并设置权限
touch /home/gitlab/auto-backup.sh echo "gitlab-rake gitlab:backup:create" > /home/gitlab/auto-backup.sh sudo chmod +x /home/gitlab/auto-backup.sh
-
尝试运行一遍auto-backup.sh脚本,看看在/backups目录下是否生成.tar格式的gitlab备份文件
-
设置定时运行备份脚本
我这边设置的在每天的凌晨2点进行备份
sudo echo "0 2 * * * root /home/gitlab/auto-backup.sh -D 1" >> /etc/crontab
sudo service cron restart
- 将备份的文件copy到远程文件服务器
修改自动备份脚本 auto-backup.ssh ,在备份完成后将文件copy到远程文件服务器
echo "sshpass -p $remote_password scp -r /backups $remote_user@$remote_host:$dir" >> /home/gitlab/auto-backup.sh
这里 $remote_password 替换成远程服务器的登录密码, $remote_user 是远程服务器登录用户, $remote_host 是远程服务器域名或IP, $dir 是远程服务器的保存目录
至此,gitlab服务器的备份硬盘和远程文件服务器上都有一份gitlab的备份文件
网友评论