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

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

清理垃圾镜像

相关文章
|
1月前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
137 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
1月前
|
关系型数据库 数据管理 应用服务中间件
【赵渝强老师】Docker的数据持久化
在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。
|
2月前
|
存储 Kubernetes Docker
|
2月前
|
存储 安全 数据管理
Docker中实现数据持久化
【10月更文挑战第8天】
49 1
|
2月前
|
存储 数据库 Docker
|
2月前
|
存储 安全 Docker
docker中数据持久化(Volumes)
【10月更文挑战第3天】
69 4
|
2月前
|
存储 Kubernetes 数据库
docker数据持久化问题
【10月更文挑战第4天】
34 2
|
2月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
73 3
|
3月前
|
存储 数据管理 应用服务中间件
Docker的数据管理实战篇
关于Docker数据管理实战的教程,涵盖了Docker数据卷的使用、特点、场景以及数据卷容器的概念和应用。
71 13
Docker的数据管理实战篇
|
3月前
|
存储 Docker 容器
Docker工作目录迁移
Docker工作目录迁移
下一篇
DataWorks