在安装 gitlab 的时候,有使用命令sudo gitlab-rake gitlab:backup:create
备份用户数据。该备份路径是默认配置中的路径,我们可以对其进行修改。
此外,仅仅是备份在 gitlab 的主机中对数据丢失也有风险,例如硬盘坏了。
所以这里我简单列举了 gitlab-ce userdata(用户数据)备份到本机其它位置、备份到远程主机 2 种方式。
更多的,gitlab 还默认支持将用户数据备份到云端,配置中列示有 Amazon S3、Digital Ocean Spaces、 Google Cloud Storage 等。
具体详细的内容,可以查看官网的Backing up and restoring GitLab
常规备份设定——备份到本机其它位置
打开/etc/gitlab/gitlab.rb
文件,找到Backup Settings
区块。
可以看到,默认的备份地址配置gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
。
所以,只需要修改这一句,调整路径,例如gitlab_rails['backup_path'] = "/home/{username}/gitlab
,后续备份的用户数据,就在/home/{username}/gitlab 下了。
{username}为你的主机名。
备份到远程主机
备份到远程主机,一开始不是很清楚这个配置设定,看着那段英文字翻译成中文没有看懂,假装配置几次失败后,就放弃了。使用了透过 ssh 使用 scp 指令,编写脚本文件,将 gitlab 主机的用户数据,copy 到其它主机。
以上做法是 ok 的,实际运行这么久也没什么问题。不管,这里我还是说明一下,如何使用 gitlab 的配置完成备份时一并备份到远程主机。
当然,前提条件是,在局域网内,可以直接访问指定位置。如果本来就无法访问,那肯定是这么配置都没用的。
仔细查看官方文档的说明,整理出实现步骤:
- 将远程主机路径,挂载到 gitlab 主机,
- 将挂载地址的所有权赋予 git 账号,
- 在 gitlab.rb 中配置备份设定,
- 重新加载配置文件运行 gitlab。
ubuntu 中挂载远程主机共享文件夹
一般情况下,我们在 ubuntu 中,点击‘其它位置’–>’连接到服务器’–>输入服务器地址–>输入授权账号密码网域等,就可以直接访问到对应的位置。此次的挂载效果类似。
我的示例,是将 gitlab 服务器的用户数据,备份到一台 windows 系统的远程主机,所以需要将 windows 指定文件夹,挂在到 gitlab 所在的 ubuntu 系统。
1 gitlab 主机安装 cifs 工具
gitlab 主机是 ubuntu,运行sudo apt-get install cifs-utils
即可。
2 新加需要挂载的目标文件夹
我的示例,是想把 windows 系统中的//192.168.XX.XX/share/GitlabBackupDir
挂载到 ubuntu 中的/mnt/backups
中。
所以执行mkdir /mnt/backups
去创建对应文件夹,权限不够在前面加sudo
。
3 挂载文件夹
一般直接使用 mount 指令的话,是临时挂载,计算机重启之后就没有了。现在这个场景,比较适合永久挂在,所以调价配置到文件为佳。
在挂载前,仔细阅读一下官网这句话:
The directory pointed to by the local_root key must be owned by the git user when mounted (mounting with the uid= of the git user for CIFS and SMB) or the user that you are executing the backup tasks under (for Omnibus packages, this is the git user).
经过我的测试分析,它的意思大概说明,这个挂载的地址,本例中为/mnt/backups
,必须是执行挂载动作时的 git 用户,或者执行备份作业是的用户。使用 Omnibus packages 安装的 gitlab,这个执行的用户,就是 git 用户。
什么意思呢,简单理解就是,这个挂载地址文件夹的拥有者,必须是 git 用户。
到这里,我们再来添加挂载配置。
打开/etc/fstab
文件,在最后添加以下内容:
{被挂载的远程主机源路径} {gitlab主机的目标路径} cifs auto,username={远程主机的用户名},password={远程主机用户名的密码},domain={远程主机的网域},gid={ubuntu下git用户的gid},uid={ubuntu下git用户的uid} 0 0
空白留个 tab 键间隔或者空格就好了。各个间隔的参数含义,配置文件有说明,分别是
如果获取 git 用户的 uid 和 gid?在终端中输入id git
即可。
其它用户就是id {user}
。
我的挂载命令就是
//192.168.XX.XX/share/GitlabBackupDir /mnt/backups cifs auto,username=XXX,password=XXX,domain=XXX,gid=998,uid=998 0 0
要让挂载立即生效,执行sudo mount -a
即可。
查看是否挂载成功,执行mount
查看,应该可以看到类似如下一句:
……
//192.168.XX.XX/share/GitlabBackupDir on /mnt/backups type cifs (rw,relatime,vers=2.1,cache=strict,username=XXX,domain=XXX,uid=998,forceuid,gid=998,forcegid,addr=192.168.XX.XX,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1)
……
说明挂载成功。
额外说一句,如果只有临时挂载,重启就没有了,那就不写到配置文件,只需要在终端执行:
mount -t cifs {被挂载的远程主机源路径} {gitlab主机的目标路径} -o username="{username}",password="{password}",domain={domain}
注意:
- 如果是 windows10 系统,可能需要在最末加一句 vers=2.0,写在配置文件也是一样要加。
- 终端中输入 option 要加引号。写到配置时,不要加,否则会报错。
- 如果没有网域,当然就不用添加这个参数。
到这里挂载文件夹和赋予所有权给 git 用户已完成。
修改 gitlab.rb 对应配置文件
打开/etc/gitlab/gitlab.rb
文件,找到
# gitlab_rails['backup_upload_connection'] = {
# 'provider' => 'AWS',
# 'region' => 'eu-west-1',
# 'aws_access_key_id' => 'AKIAKIAKI',
# 'aws_secret_access_key' => 'secret123'
# }
# gitlab_rails['backup_upload_remote_directory'] = 'my.s3.bucket'
# gitlab_rails['backup_multipart_chunk_size'] = 104857600
最好复制一份,修改为:
gitlab_rails['backup_upload_connection'] = {
'provider' => 'Local',
'local_root' => '/mnt/backups'
}
gitlab_rails['backup_upload_remote_directory'] = 'gitlab_backups'
这个配置完成,那么在执行 geilab 备份时,会在/mnt/backups
文件夹下创建gitlab_backups
子文件夹,并放入该次备份的用户数据。
又因为这个路径,实际是 windows 下//192.168.XX.XX/share/GitlabBackupDir
的挂载路径,所以实际上,用户数据的备份文件,就在这里。
以上,就完成了备份到远程主机的操作。配置好之后可能执行sudo gitlab-rake gitlab:backup:create
命令测试一下,看是否在上述的路径下备份了用户数据。
当然,备份到 U 盘,外挂硬盘什么的,操作类似,不重复。至于备份到云,我没有这个条件,但是文檔也写得比较清楚,照做即可。
此外,编写脚本,使用其它系统指令也可以实现类似的效果,这个不用 gitlab 进行配置,所以不赘述。
实现定时备份
可以将备份操作写到 cron 定时备份任务中去,那么就可以省略手动备份的操作了。
这个比较简单,在终端执行sudo crontab -e
,或者
sudo su -
crontab -e
系统自动备份的话,用户还是用 root 较好
选择一个编辑器,在最末,加一句(示例是每天凌晨 2 点进行备份,等级优先)
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
注意,GitLab 12.1 及之前的版本, 使用 0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
.
保存,重启 cron 服务
sudo service cron restart
后续要修改,可以直接修改其文件,位置在/var/spool/cron/crontabs
文件夹,如果是 root 账户,这里面就有个 root 文件。如果是其它用户{user},那就是{user}文件。