gitlab部署
1、宿主机新建gitlab的数据存放目录
$ mkdir /data /data/gitlab /data/gitlab/data /data/gitlab/config /data/gitlab/logs
2、运行gitlab镜像
$ docker run --detach \
--hostname 服务器ip \
--publish 14443:443 --publish 18800:80 --publish 12220:22 \
--name gitlab \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab//data:/var/opt/gitlab \
gitlab/gitlab-ce:11.9.8-ce.0 //这里最好指定tag吧,因为恢复的时候用相同的tag才不会出现版本的问题
3、配置gitlab.rb
//修改 clone ssh时的端口 ssh://git@服务器ip:12220/groupname/xxxx.git
//如果使用的是默认端口就不需要改了
$ vim /data/gitlab/config/gitlab.rb //去掉注释 修改 gitlab_rails['gitlab_shell_ssh_port'] = 12220
//进入容器
$ docker exec -it gitlab /bin/bash
//容器中重新加载配置文件:
$ gitlab-ctl reconfigure
//容器中重启gitlab服务
$ gitlab-ctl restart
gitlab备份、恢复
1、利用crontab、rsync实现准实时备份 、恢复
1.1、利用crontab、rsync实现准实时备份
直接把 /data/gitlab目录下的内容同步到【文件存储】或【服务器】等。
crontab 添加下面任务 因为gitlab的服务器上挂载了阿里云的NAS文件存储,所以我这里直接在gitlab服务器上添加crontab任务,定时把文件同步到NAS上。
crontab任务: 0 */2 * * * /usr/bin/rsync -avzP --delete --exclude=‘backups’ /data/gitlab /mnt_nas/gitlab/raw_backups >> /mnt_nas/rsynclog/rsync-gitlab-raw-backup.log //最多会丢失2小时的内容,其实时间间隔可以再小点15分钟一次都可以 。
有时可能这样同步过来的数据再回复的时候可能会报错,但我这边试了很多次都没问题
1.2、恢复
基于同步过来的文件新建一个gitlab镜像
//可以把备份的文件拷贝到任何合适的地方来新建镜像
//注意修改gitlab.rb文件
$ docker run --detach \
--hostname 服务器ip \
--publish 14443:443 --publish 18800:80 --publish 12220:22 \
--name gitlab \
--restart always \
--volume /mnt_nas/gitlab/raw_backups/gitlab/config:/etc/gitlab \
--volume /mnt_nas/gitlab/raw_backups/gitlab/logs:/var/log/gitlab \
--volume /mnt_nas/gitlab/raw_backups/gitlab//data:/var/opt/gitlab \
gitlab/gitlab-ce:11.9.8-ce.0
2、利用crontab、gitlab-rake、rsync实现备份 、恢复
2.1、利用crontab、gitlab-rake、rsync实现备份
//添加下面crontab任务。
//docker exec -i 这个不能加t 即docker exec -it ,不然gitlab-rake gitlab:backup:create的命令执行不了
//STRATEGY=copy 使用复制策略
//因为我把NAS挂载到了/data/gitlab//data/backups的目录,所以执行下面任务会直接把备份的文件生成到NAS上,省去了rsync部分
crontab任务: 0 3 * * * docker exec -i gitlab gitlab-rake gitlab:backup:create STRATEGY=copy >> /mnt_nas/rsynclog/gitlab-rake-backup.log
//还要把/data/gitlab/config目录中的配置文件gitlab-secrets.json备份过来,我这边是把这个目录备份的,
crontab任务: 0 3,13 * * * /usr/bin/rsync -avzP --delete /data/gitlab/config /mnt_nas/gitlab/gitlab_rake_backups >> /mnt_nas/rsynclog/gitlab-config-backup.log
备份策略选项
该选项对gitlab 8.17及以上版本有效。
默认的备份策略是使用linux的tar/gzip命令。这在大多数情况下是没有问题的,但是当数据在打包过程中发生改变时,将会有错误抛出file changed as we read it,这会导致备份进程失败。为了解决这个问题,8.17引入了一个名为copy的备份策略,就是在调用tar、gzip时将数据拷贝到一个临时位置。不过也引入了另一个问题,将额外占用一倍的磁盘空间。 要使用复制策略而不是默认流策略,可以指定STRATEGY = copy。例如,sudo gitlab-rake gitlab:backup:create STRATEGY = copy。
2.2、恢复
重走一遍gitlab的部署
宿主机新建gitlab的数据存放目录
$ mkdir /data /data/gitlab /data/gitlab/data /data/gitlab/config /data/gitlab/logs
运行gitlab镜像
$ docker run --detach \
--hostname 服务器ip \
--publish 14443:443 --publish 18800:80 --publish 12220:22 \
--name gitlab \
--restart always \
--volume /data/gitlab/config:/etc/gitlab \
--volume /data/gitlab/logs:/var/log/gitlab \
--volume /data/gitlab//data:/var/opt/gitlab \
gitlab/gitlab-ce:11.9.8-ce.0 //这里最好指定tag吧,因为恢复的时候用相同的tag才不会出现版本的问题
配置gitlab.rb
//修改 clone ssh时的端口 ssh://git@服务器ip:12220/groupname/xxxx.git
//如果使用的是默认端口就不需要改了
$ vim /data/gitlab/config/gitlab.rb //去掉注释 修改 gitlab_rails['gitlab_shell_ssh_port'] = 12220
把备份的gitlab-secrets.json复制到/data/gitlab/config,把备份的仓储压缩包( 如:1587550111_2020_04_22_11.9.8_gitlab_backup.tar)复制到/data/gitlab/data/backups目录
执行恢复:
docker exec -i gitlab gitlab-rake gitlab:backup:restore BACKUP=1587550111_2020_04_22_11.9.8 force=yes (注1587550111_2020_04_22_11.9.8没有后缀_gitlab_backup.tar)
//重新加载配置文件:
$ docker exec -i gitlab gitlab-ctl reconfigure
//重启gitlab服务
$ docker exec -i gitlab gitlab-ctl restart
常见错误
1、备份恢复后出现 【gitlab服务迁移到新服务器后integrations报500错误】
需要用备份的gitlab-secrets.json覆盖掉新生成的gitlab-secrets.json文件
然后重新加载配置文件:
gitlab-ctl reconfigure
重启gitlab服务
gitlab-ctl restart
完毕