使用gitlab-rake命令创建备份时,默认的配置可将备份文件上传到AWS S3保存,而在国内若要上传到阿里云的OSS时,如何实现呢?
新版本的gitlab(本文使用的gitlab-ce 10.2.2)也提供了上传gitlab备份文件到OSS的功能,同时也包含上传到Google, OpenStack Swift, Rackspace这些云存储的功能,当然那些都是国外的服务了,国内使用Ali OSS是比较方便的了。gitlab的文档中默认提供了如何上传到AWS S3的方法,并提供了示例,但是对于阿里云OSS,只是说可以上传,由于没有示例,参数则需要自己去摸索。gitlab使用Fog Library(http://fog.io/) 实现与各个云平台的对象存储交互,将备份文件上传到这些对象存储的。仔细查找了这里面有关阿里云OSS访问的内容和部分配置,搜索和试验了几个小时后,终于成功将备份上传到了阿里OSS。
第一步,修改/etc/gitlab/gitlab.rb配置文件,修改如下内容:
gitlab_rails['backup_upload_connection'] = {
'provider' => 'aliyun',
'aliyun_accesskey_id' => '有权限访问存储桶的用户key',
'aliyun_accesskey_secret' => '有权限访问存储桶的密钥',
'aliyun_oss_endpoint' => 'http://oss-cn-shanghai-internal.aliyuncs.com',
'aliyun_oss_bucket' => 'my-backup', //OSS桶
'aliyun_oss_location' => 'shanghai' //此行内容不关键,但必须要有
}
gitlab_rails['backup_upload_remote_directory'] = 'gitlab' //存储gitlab备份的桶子目录
第二步,执行gitlab-ctl reconfigre让上步的配置生效
第三步,执行gitlab-rake gitlab:backup:create,等命令成功结束后,到阿里云的OSS桶中检查,就会发现备份文件已经自动上传了。
进一步将gitlab备份命令加入到crontab中,实现每日自动备份上传到阿里云,这样就可以将代码安全的有一个异地备份了。在gitlab.rb中修改gitlab_rails['backup_keep_time'] = 86400这行的值,可以控制gitlab本地备份目录中保存历史文件的时间长度,这样可避免本地的文件过多将磁盘空间耗尽。
另外,一般代码库的备份文件都不会小了,为了节省阿里云上面存储桶的存储成本,可以给存储桶设置文件的生命周期,比如超过30天的文件转入冷存储设备或删除,以降低存储成本。
至此,一个自动化的gitlab代码云端备份就大功造成了。