以下操作均在root用户中操作
首先需要知道gitlab容器中备份文件存放的位置,和与本机映射的位置。
gitlab的备份一般是在/var/opt/gitlab/backer 路径中,但是由于我一开始配置gitlab容器的时候不小心将/var/opt/gitlab/backer 路径写成了/ar/opt/gitlab/backer 少了一个V,导致我本机目录下无法找到,所以我更改了一下我的备份路径,关于如何更改备份路径请自行百度。
不知道映射路径的可以使用docker iptables命令查询
1.首先使用docker ps查看容器信息 比如我的gitlab容器ID是279fe051b113
然后使用
docker inspect 279 | grep Mounts -A 20 ID
不用全部打,写前几位就可以了 也可是容器名字。
source 是我们本机的
destination 是容器内地址
2.GitLab自动备份
新建备份的sh文件:在/root 下新建gitlab_backup.sh ,内容如下:
#! /bin/bash
case "$1" in
"start")
docker exec gitlab gitlab-rake gitlab:backup:create
;;
esac
测试 输入 sh gitlab_backup.sh start
如果/srv/gitlab/data/backups 下有新生成的tar包,即可说明sh文件写对了。
新增定时任务:使用crontab -e 进入定时任务编辑界面,新增如下内容:
0 2 * * * /root/sh gitlab_backup.sh start
保存 ctrl+X -> Y
3.安装挂载window工具
apt-get install cifs-utils
设置开机自动挂载到Window文件服务器,首先打开这个文件
1 sudo vim /etc/fstab
然后在文件的最后一行输入(前面一个地址是你的window共享目录地址,后面是linux目录地址,username是window的用户名,password是window用户名 密码)
1 //192.168.0.2/data/dataset /media/dataset cifs username= admin,password=123456 0 0
下面这种操作是只挂载一次,重启后不会自动挂载(这个坑了我好久)
输入下面命令
sudo mount -t cifs -o userneme=root,password=123456,uid=1000,gid=1000 //192.168.1.112/A1 /mnt/A1
uid=user,gid=user中输入你ubuntu的用户名,可以用命令id [你的用户名]来查看你的uid和gid;
username是window下的设置folder共享时的用户;
password是username对应的密码;
//192.168.1.112/d中192.168.1.112是windows的IP地址,A1是你要共享的windows目录;
/mnt/A1是你新建的文件夹,用来映射到window共享文件夹的;
//192.168.1.112/A1 就是你window共享文件夹的地址
4.创建自动复制到共享文件夹的sh脚本
vim gitlab_upload.sh
#!/bin/bash
backdir='/home/user/docker/gitlab/config'
cd "$backdir"
name=$(ls -t|head -n 1)
cp $name /home/user/mnt/share
这个脚本的意思是将备份文件拷贝到共享目录/home/user/mnt/share中
5.重复上面的crontab-e 让系统自动运行 稍微比备份推迟个几分钟
6.删除前一天的备份文件
创建自动删除脚本
vim auto_delete.sh
#!/bin/bash
backdik='/home/user/docker/gitlab/config'
find "$backdik" -name "*gitlab_backup.tar" -ctime +1 -type f -exec rm -rf {} \;
crotab-e同上,时序最好就是在备份和拷贝到window共享目录之后执行
dackdik是你的备份目录