docker gitlab部署、备份和恢复

本文详细介绍GitLab的部署步骤,包括宿主机目录创建、镜像运行及端口映射。同时,深入探讨两种备份恢复策略:一是通过crontab与rsync实现准实时备份;二是利用crontab、gitlab-rake与rsync进行备份,涵盖备份策略选择及常见错误处理。

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

完毕

### 在 Docker 中配置执行 GitLab 备份 要在 Docker 环境中对 GitLab 进行备份,可以按照以下方法操作: #### 创建备份文件目录 在开始备份之前,需要确保容器内的备份路径已准备好。可以通过进入容器并创建相应的目录来完成此步骤: ```bash docker exec -it <gitlab_container_name> bash -c "mkdir -p /var/opt/gitlab/backups" ``` 上述命令用于在指定的 GitLab 容器中创建 `/var/opt/gitlab/backups` 路径[^2]。 #### 执行备份命令 一旦确认备份目录存在,即可运行备份命令以生成实际的备份文件。以下是几种常见的备份方式及其对应的命令: 1. **默认备份策略** 使用 `gitlab-backup create` 命令可触发一次完整的 GitLab 数据库文件系统的备份过程: ```bash docker exec -t <gitlab_container_name> gitlab-backup create ``` 此命令会在容器内部自动处理数据打包工作,并将其存储到先前定义好的备份目录中[^1]。 2. **复制模式下的备份 (STRATEGY=copy)** 如果希望采用更安全的数据拷贝机制,则可通过设置环境变量 `STRATEGY=copy` 来实现这一目标: ```bash docker exec -it <gitlab_container_name> gitlab-rake gitlab:backup:create STRATEGY=copy ``` 该选项特别适用于生产环境中,因为它能够减少因锁定数据库而导致的服务中断风险[^3]。 #### 敏感文件的手动备份 值得注意的是,在任何情况下都应额外注意两个重要的配置文件——`gitlab.rb` `gitlab-secrets.json` 的保护情况。由于这些文件包含了影响系统正常运作的关键参数信息,因此建议用户单独对其进行妥善保存: ```bash docker cp <gitlab_container_name>:/etc/gitlab/gitlab.rb ./local_backup/ docker cp <gitlab_container_name>:/etc/gitlab/gitlab-secrets.json ./local_backup/ ``` 以上脚本片段展示了如何利用 `docker cp` 工具将必要的敏感资料提取至主机上的特定位置以便长期存档用途[^4]。 通过遵循上述指导原则,便可以在基于 Docker部署场景里成功实施针对 GitLab 实例的有效备份解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值