Docker 中 Gitlab 数据的备份和迁移

简介: 备份gitlab数据,并进行迁移恢复

背景

博主有一个阿里云的Centos服务器,虽然早听说了centos8不再提供支持的消息,但是一直也没有管自己的云服务,直到前几天阿里云打电话提醒尽快变更系统。刚好春节趁着没事,倒腾一下服务器。

服务器刚好也要到期了,本来我是打算新购一台,然后直接通过内网迁移数据的,但是发现有老用户续费有福利(云服务器ECS新春特惠)。3年老用户可以便宜两三百,每天还有抽奖。行吧,直接续费刚好也备份到本地一份数据。

其实如果数据单独一个云盘的话,完全没有那么麻烦,因为我使用的服务道是docker的,数据全部映射在宿主机上,单独云盘的话,只要系统盘一换,直接docker服务启动就完事了。当初为了省一些花销就直接在系统盘放数据。平时拿云服务只要是放个人的gitlab仓库,主要的数据也是这一块。

备份和验证

首先备份gitlab数据,通过gitlab的指令就可以了。

docker exec -t gitlab gitlab-rake gitlab:backup:create

如果你的docker容器名name不是gitlab的话,上面的命令自行修改一下。

随着CPU一阵飙升,等待完成就可以了。备份数据在容器的 /var/opt/gitlab/backups 目录下,如果你映射到了宿主机,就到指定的位置找就可以,文件名类似这样时间戳日期加gitlab版本号这样的: 1643891119_2022_02_03_13.12.7_gitlab_backup.tar

需要注意的是:

一些配置文件并不会被备份,需要自己手动备份一下 gitlab.rbgitlab-secrets.json

Deleting old backups ... skipping
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
Backup task is done.

配置文件

如果需要拷贝文件,文件比较大的情况下呢,拷贝后建议还是算一下md5做个一致性比较

md5sum -b gitlab/data/backups/1643891119_2022_02_03_13.12.7_gitlab_backup.tar 

md5sum

下载到本地验证使用的wsl命令行,当然用git bash也是可以的。

恢复

创建好同一版本的gitlab服务之后,无论是docker还是直接部署的服务,将备份文件放到同样的 backups目录下,执行恢复命令即可。

首先在新机器拉取同版本gitlab并创建容器,我的是13.12.7若不清楚具体版本号可以前往下面地址查询。
https://hub.docker.com/r/gitlab/gitlab-ce/tags

hostname是你的域名,容器创建根据自己需要进行参数修改和调整,特别注意版本一致。

docker pull gitlab/gitlab-ce:13.12.7-ce.0

docker run --detach \
  --hostname git.xxx.xxx \
  --publish 4433:443 --publish 8082:80 --publish 33:22 \
  --name gitlab \
  --restart always \
  --volume /work/gitlab/config:/etc/gitlab \
  --volume /work/gitlab/logs:/var/log/gitlab \
  --volume /work/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:13.12.7-ce.0

先进入容器停止相关数据连接服务

docker exec -it gitlab /bin/bash
gitlab-ctl stop puma
gitlab-ctl stop sidekiq

backups目录下只有一个备份文件时,可以使用以下命令:

gitlab-rake gitlab:backup:restore

停止服务

恢复备份

恢复完成后,启动服务

gitlab-ctl start

另外若有多个,可以使用参数,从指定时间戳的备份恢复

gitlab-rake gitlab:backup:restore BACKUP=1643891119

恢复完成后访问验证,看服务是否正常。

其他版本恢复

若使用非原版本的备份恢复就会出现:

恢复出错

这样问题的处理思路是先用同版本恢复,然后按照升级的方式来。

就是一点点升级版本,不要跨大版本升级:

如上方我的版本是13.12.7,可以先升级到13.12的最后一个版本13.12.15

docker pull gitlab/gitlab-ce:13.12.15-ce.0

然后删除旧容器,创建新拉的这个版本的容器,然后宿主机的数据就会被清洗为这个版本的,等待启动后,访问验证服务。

接下来继续升级

14.0.0 -> 14.1.0 -> 14.1.8 -> 14.2.0 -> 14.2.7 -> 14.6.1

这个版本一般按照第三个小版本从0到最后一个,然后升级中间的版本号,就不会错。具体的还是要看容器能不能跑起来。14.1.0无法直接到14.2.0但是,我试了14.2.7却可以直接到14.6.1

最后不要忘了清理一下垃圾镜像

清理垃圾镜像

相关文章
|
2月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
254 57
|
2月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
247 58
|
3月前
|
Ubuntu 安全 数据安全/隐私保护
在Docker容器中部署GitLab服务器的步骤(面向Ubuntu 16.04)
现在,你已经成功地在Docker上部署了GitLab。这就是我们在星际中的壮举,轻松如同土豆一样简单!星际旅行结束,靠岸,打开舱门,迎接全新的代码时代。Prepare to code, astronaut!
361 12
|
5月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
274 28
|
7月前
|
存储 缓存 Docker
docker: No space left on device处理与迁移目录
通过以上方法,可以有效地管理 Docker 的磁盘使用情况,并确保 Docker 运行环境的稳定性和效率。
673 34
|
8月前
|
自然语言处理 安全 Devops
GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效
对于正在使用 GitLab 国际站托管代码的企业和研发团队,除迁移至极狐 GitLab 外,国内其他主流的 DevOps 平台也具有完备的产品能力,为开发者提供了更多的选择。其中,阿里云云效也提供了针对常见代码托管平台如 GitHub、GitLab 简单便捷的迁移方案,帮助用户快速完成核心代码数据的迁移,确保代码资产安全。
|
10月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
723 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
10月前
|
关系型数据库 数据管理 应用服务中间件
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。
167 1
|
11月前
|
存储 Kubernetes Docker
|
11月前
|
存储 安全 数据管理
Docker中实现数据持久化
【10月更文挑战第8天】
346 1