1、本地部署完成的gitlab服务器上操作,手动备份
gitlab-rake gitlab:backup:create
特别说明: 如果/etc/gitlab/gitlab.rb 配置了参数“backup_path”的指定目录,则备份数据会直接到指定目录下,如果没有配置则备份数据到默认”/var/opt/gitlab/backups“下
2、自动定时备份gitlab数据,使用命令crontab -e,添加定时任务
crontab -e
根据自己部门的配置时间进行对应修改
//本部门白天都在提交数据,改成凌晨进行备份处理 0 0 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create
重启crontab
systemctl restart crond
3、本地配置自动清理备份数据,通过修改gitlab自己的配置实现
vim /etc/gitlab/gitlab.rb
将配置文件中backup_keep_time的注释取消掉
//备份保留7天(7*3600*24=604800) gitlab_rails['backup_keep_time'] = 604800
重新加载配置文件
gitlab-ctl reconfigure
本地备份完成。下一步配置远程备份
远程备份数据1、gitlab服务器A(172.16.10.90),备份服务器B(172.16.10.100)
2、配置密钥对,取消scp传输密码限制, 在A服务器上生成rsa证书ssh-keygen -t rsa一路回车即可。会在root下生成一个.ssh目录,里面存放id_rsa和id_rsa.pub两个证书,公共密钥保存在 /root/.ssh/id_rsa.pub,私有密钥保存在/root/.ssh/id_rsa
3、将生成的id_rsa.pub文件复制到B服务器上
mkdir -p /root/.ssh
//从A机器将公钥拷贝过去 scp /root/.ssh/id_rsa.pub root@172.16.10.100:/root/.ssh/
4、在备份服务器B上创建authorized_keys文件
touch /root/.ssh/authorized_keys
将scp过来的id_rsa.pub文件内容复制到authorized_keys中
cat id_rsa.pub >> authorized_keys
修改authorized_keys文件权限,如果给777权限,scp的时候还需要密码
chmod 400 authorized_keys
5、创建远程备份脚本
在gitlab服务器上创建脚本
vim /root/auto_backup_to_remote.sh //文件中添加如下内容 #!/bin/bash # gitlab 服务器备份路径 LocalBackDir=/var/opt/gitlab/backups # 远程备份服务器 gitlab备份文件存放路径 RemoteBackDir=/root/gitlab_backup # 远程备份服务器 登录账户 RemoteUser=root # 远程备份服务器 IP地址 RemoteIP=(备份服务器B的地址,请你自行修改) #当前系统日期 DATE=`date +"%Y-%m-%d"` #Log存放路径 LogFile=$LocalBackDir/log/$DATE.log # 查找 gitlab本地备份目录下 时间为60分钟之内的,并且后缀为.tar的gitlab备份文件 BACKUPFILE_SEND_TO_REMOTE=$(find $LocalBackDir -type f -mmin -60 -name '*.tar*') #新建日志文件 touch $LogFile #追加日志到日志文件 echo "Gitlab auto backup to remote server, start at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile echo "---------------------------------------------------------------------------" >> $LogFile # 输出日志,打印出每次scp的文件名 echo "---------------------The file to scp to remote server is: $BACKUPFILE_SEND_TO_REMOTE-------------------------------" >> $LogFile #备份到远程服务器 scp $BACKUPFILE_SEND_TO_REMOTE $RemoteUser@$RemoteIP:$RemoteBackDir #追加日志到日志文件 echo "---------------------------------------------------------------------------" >> $LogFile
修改脚本权限
chmod 777 auto_backup_to_remote.sh
创建日志存放目录
mkdir -p /var/opt/gitlab/backups/log
6、添加定时计划,使用命令crontab -e,将定时任务添加后保存
crontab -e
根据本地备份计划,推迟一个小时后上传
0 1 * * * /root/auto_backup_to_remote.sh -D 1
//重启crontab服务 systemctl restart crond
7、定时删除备份服务器上的备份文件,在备份服务器B上创建定时删除脚本。
//设置备份目录
mkdir -p /root/gitlab_backup
//创建定时删除脚本
vim /root/auto_remove_old_backup.sh
//向脚本中添加如下内容
#!/bin/bash
# 远程备份服务器 gitlab备份文件存放路径
GitlabBackDir=/root/gitlab_backup
# 查找远程备份路径下,超过14天且文件后缀为.tar 的 Gitlab备份文件 然后删除
find $GitlabBackDir -type f -mtime +14 -name '*.tar*' -exec rm {} ;
//修改脚本权限 chmod 777 auto_remove_old_backup.sh
添加定时任务,通过crontab命令
//添加任务 crontab -e //添加内容,每天凌晨3点执行删除过期备份任务 0 3 * * * /root/auto_remove_old_backup.sh //重启cron服务 systemctl restart crond
参考



