Gitlab安装体验一文介绍了如何在阿里云上安装Gitlab,安装是很简单方便,但是出于数据安全的考虑,我们需要做一些备份,以防万一。
本文重点介绍Gitlab的日常备份及迁移恢复
Gitlab创建备份
使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份:
1 | gitlab-rake gitlab:backup:create |
使用以上命令会在/var/opt/gitlab/backups
目录下创建一个名称类似为1393513186_gitlab_backup.tar
的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1393513186
是备份创建的日期。
Gitlab修改备份文件默认目录
你也可以通过修改/etc/gitlab/gitlab.rb
来修改默认存放备份文件的目录
1 | gitlab_rails['backup_path'] = '/mnt/backups' |
/mnt/backups
修改为你想存放备份的目录即可,修改完成之后使用gitlab-ctl reconfigure
命令重载配置文件即可。
Gitlab恢复备份
同样, Gitlab的从备份恢复也非常简单
1 | 停止相关数据连接服务 |
Gitlab迁移
迁移如同备份与恢复的步骤一样,只需要将老服务器/var/opt/gitlab/backups
目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups
即可(如果你没修改过默认备份目录的话)。
但是需要注意的是新服务器上的Gitlab的版本必须与创建备份时的Gitlab版本号相同。
比如新服务器安装的是最新的7.60版本的Gitlab,那么迁移之前,最好将老服务器的Gitlab升级为7.60在进行备份。
Gitlab定时自动异地备份
由于Gitlab部署在了阿里云上,把Gitlab再备份在本地意义不是特别大,所以这里利用了家里的NAS做了一个简单的异地备份。
服务器备份脚本
在阿里云服务器上创建如下脚本,存储在/home/scripts/gitlab_backup.sh
文件中
1 | !/bin/bash |
NAS免密登录阿里云
异地备份思路需要在NAS上登录到阿里云服务器上执行对应的备份命令并下载文件,所以需要让NAS可以免密登录阿里云服务器,以定时自动执行这个任务。
免密登录的配置,可以参考SSH免密登录配置
NAS服务器脚本
SSH进入NAS,然后创建脚本,自动在服务器上执行备份,并下载到NAS本地来。脚本存储在/volume1/homes/gitlab_back/scripts/gitlab_backup_download.sh
文件中。
1 | !/bin/bash |
然后配置群晖的定时任务,每天自动执行。
自动清理历史备份文件
由于阿里云的存储空间有限,所以对Gitlab的历史备份文件需要定期删除,释放磁盘空间。
同样在/home/scripts/gitlab_auto_del_backup.sh
文件中存储自动清理历史备份的脚本内容。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27!/bin/bash
清理多余的历史备份
Gitlab 备份地址
LocalBackDir=/var/opt/gitlab/backups
备份日志文件
LogFile=$LocalBackDir/remote_clean.log
新建备份日志文件
touch $LogFile
echo "--------------------------------------------------------------------- " >> $LogFile
echo "Gitlab auto clean local backup, start at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
找到3*24*60分钟前,以tar结尾的文件并删除
find $LocalBackDir -type f -mmin +4320 -name "*.tar" -exec rm -rf {} \;
$?符号显示上一条命令的返回值,如果为0则代表执行成功,其他表示失败
if [ $? -eq 0 ];then
追加日志到日志文件
echo "Gitlab auto clean local backup success at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
else
追加日志到日志文件
echo "Gitlab auto clean local backup failed at $(date +"%Y-%m-%d %H:%M:%S")" >> $LogFile
fi
然后赋予执行权限1
chmod u+x /home/scripts/gitlab_auto_del_backup.sh
配置定时任务1
2
3crontab -e
0 3 * * * /home/scripts/gitlab_auto_del_backup.sh