docker GitLab 代码自动备份
一、前提
之前使用docker部署了一个GitLab,其容器启动时的参数如下:
# docker run -d --hostname gitlab.example.com\ -p 443:443 -p 8181:80 -p 2222:22 \ --name gitlab \ --restart always \ -v /srv/gitlab/config:/etc/gitlab \ -v /srv/gitlab/logs:/var/log/gitlab \ -v /srv/gitlab/data:/var/opt/gitlab \ -v /etc/localtime:/etc/localtime gitlab/gitlab-ce:latest
现在想实现GitLab的自动备份。
系统是centos7
二、手动备份
因为采用docker安装,只有进入GitLab的docker容器(本例子名字为gitlab)内,有关于gitlab-rake gitlab:backup:create 命令只能在gitlab容器内使用,所以在手动备份时,需要进入容器。
docker exec -it gitlab bash
gitlab-rake gitlab:backup:create
可以在系统的/srv/gitlab/data/backups目录下会多一个“**.tar”的文件
三、自动备份
我们利用crontab定时执行任务,cron服务是Linux的内置服务,但是其不会自动开机启动。
1、cron服务的启停
/sbin/service crond start 服务启动 /sbin/service crond stop 服务停止 /sbin/service crond restart 服务重新启动 /sbin/service crond reload 服务重新加载配置
系统在root用户下,crontab -e
命令编辑设置定时任务。
2、设置cron服务开机启动
在/etc/rc.d/rc.local脚本中加入/sbin/service crond start
即可。
3、cron基本格式
* * * * * command 分 时 日 月 周 命令 其中, 第1列表示分钟,1~59,每分钟用*表示 第2列表示小时,1~23,(0表示0点) 第3列表示日期,1~31 第4列表示月份,1~12 第5列表示星期,0~6(0表示星期天) 第六列表示要运行的命令。
4、GitLab自动备份
新建备份的sh文件:在/root 下新建gitlab_backup.sh ,内容如下:
#! /bin/bash case "$1" in start) docker exec gitlab gitlab-rake gitlab:backup:create ;; esac
测试 执行gitlab_backup.sh start,如果/srv/gitlab/data/backups 下有新生成的tar包,即可说明sh文件写对了。
新增定时任务:使用crontab -e 进入定时任务编辑界面,新增如下内容:
0 2 * * * /root/gitlab_backup.sh start
保存,重新加载配置和启动或重启cron服务即可。
对于开机自启动cron服务,需要reboot验证。
四、定时将备份上传到另一台服务器
主要通过scp在Linux系统之间进行文件传输,scp是基于SSH登录的,需要我们进行免密码登录的操作。
1、安装sshpass
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz tar xvzf sshpass-1.05.tar.gz 进入解压后文件夹 ./configure make make install
此时sshpass安装完成。
2、设置gitlab_upload.sh
在/root
下新建gitlab_upload.sh
,内容如下:
#! /bin/bash backdir='/srv/gitlab/data/backups' latestFileName=`ls $backdir -t|head -n 1` cd "$backdir" sshpass -p [passwd] scp "$latestFileName" root@[hostID]
定时任务的设定同上。