docker安装gitlab这里不做详细讲述,自行百度
这里用到crontab,如果服务器系统没有安装的话可以自己自行百度安装(主从机器都要执行脚本)
#编辑定时任务
crontab -e
# 进入到crontab定时任务编辑界面
30 23 * * * sh /var/backup.sh
参数说明: cron表达式 sh 执行的脚本目录
一、主机上的shell脚本
#创建备份文件重复
docker exec -i gitlab gitlab-rake gitlab:backup:create
#这里是gitlab 容器中备份文件再宿主机的挂载目录(根据自己情况来)
cd /opt/gitlab/data/backups
#此两步脚本是为了取得备份文件的动态前缀,每天备份文件根据日期生成
backupName=$(ls -lt /opt/gitlab/data/backups | grep gitlab_backup.tar | head -n 1 |awk '{print $9}');
backupName=${backupName:0:28}
#执行赋权
echo ${backupName}
#这里就开始进行从主机将备份文件复制到备用gitlab宿主机上
sshpass -p 123456
scp "/opt/gitlab/data/backups/"$backupName"_gitlab_backup.tar" root@192.168.180.xxx:"/opt/backups/gitlab/"$backupName"_gitlab_backup.tar"
说明:-p xxx备用机密码
scp 复制主机的文件(确保目录的正确)
用户名@备用机ip:"复制到备用的压缩文件(含目录)"
#如果怕占用服务器空间,备份文件复制完成之后,可以将主机的备份文件删除
二 备用机shell脚本
cd /opt/backups/gitlab
backupName=$(ls -lt /opt/backups/gitlab | grep gitlab_backup.tar | head -n 1 |awk '{print $9}');
backupName=${backupName:0:28}
echo ${backupName}
docker cp "/opt/backups/gitlab/"$backupName"_gitlab_backup.tar" gitlab:"/var/opt/gitlab/backups/"$backupName"_gitlab_backup.tar"
sleep 2
docker exec -i gitlab /bin/bash -c 'cd /var/opt/gitlab/backups && chmod 777 '$backupName'_gitlab_backup.tar && yes yes|gitlab-rake gitlab:backup:restore BACKUP='$backupName' && rm -rf '$backupName'_gitlab_backup.tar'