Ubuntu下基于Docker的Gitlab迁移

本文详细介绍了如何在Docker环境下备份和恢复GitLab服务,包括查看Docker容器映射、数据备份、安装相同版本Gitlab、数据还原等步骤,涉及目录创建、镜像拉取、配置文件迁移等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 备份

a)查看Docker的目录映射

        使用 docker container ls 命令,查看服务器上的容器清单,找到gitlab的容器的ID(CONTAINER ID)和镜像的名称(NAMES)。

[root@iZuf6hvskoa8hddrc49em0Z ~]# docker container ls
CONTAINER ID   IMAGE              COMMAND                  CREATED        STATUS                    PORTS                                                                                                               NAMES
b44059c3e4e4   gitlab/gitlab-ce   "/assets/wrapper"        4 months ago   Up 2 months (unhealthy)   0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:222->22/tcp, :::222->22/tcp, 0.0.0.0:8001->80/tcp, :::8001->80/tcp   gitlab

        使用命令 docker inspect [<CONTAINER ID> | <NAMES>] | grep Mounts -A 30 获取目录映射信息,具体如下所示:

[root@iZuf6hvskoa8hddrc49em0Z ~]# docker inspect gitlab | grep Mounts -A 30
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/home/gitlab/logs",
                "Destination": "/var/log/gitlab",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/gitlab/data",
                "Destination": "/var/opt/gitlab",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/home/gitlab/config",
                "Destination": "/etc/gitlab",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

        上述输出结果中,有三个目录映射,其中 Source是服务器目录,Destination是docker内部目录。稍候,在新的服务器中,我们需要手动创建这三个Source目录。

b)数据备份

        逐一执行下列命令,完成 gitlab 的数据备份。

        1)开启一个交互模式的终端

[root@iZuf6hvskoa8hddrc49em0Z ~]# docker exec -it gitlab /bin/bash
root@dev:/# 

        2)进入备份文件存放目录,删除原有的备份文件

root@dev:/# cd /var/opt/gitlab/backups
root@dev:/var/opt/gitlab/backups# rm * -f

        3)备份 Gitlab 数据

root@dev:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:create

        4)查看备份文件

root@dev:/var/opt/gitlab/backups# ls
1636968437_2021_11_15_14.0.1_gitlab_backup.tar

        5)停止 Gitlab 服务

root@dev:/var/opt/gitlab/backups# gitlab-ctl stop
ok: down: alertmanager: 0s, normally up
ok: down: gitaly: 0s, normally up
ok: down: gitlab-exporter: 0s, normally up
ok: down: gitlab-workhorse: 0s, normally up
ok: down: grafana: 1s, normally up
ok: down: logrotate: 0s, normally up
ok: down: nginx: 0s, normally up
ok: down: postgres-exporter: 1s, normally up
ok: down: postgresql: 0s, normally up
ok: down: prometheus: 1s, normally up
ok: down: puma: 0s, normally up
ok: down: redis: 0s, normally up
ok: down: redis-exporter: 1s, normally up
ok: down: sidekiq: 1s, normally up
ok: down: sshd: 0s, normally up

2. 安装Gitlab服务

a)创建目录

        执行下列命令创建目录映射用的目录

[root@iZuf67tb9ohgwgpdsddvloZ ~]# mkdir /home/gitlab
[root@iZuf67tb9ohgwgpdsddvloZ ~]# mkdir /home/gitlab/data
[root@iZuf67tb9ohgwgpdsddvloZ ~]# mkdir /home/gitlab/logs
[root@iZuf67tb9ohgwgpdsddvloZ ~]# mkdir /home/gitlab/config

b)获取原Gitlab服务的版本

        通过备份还原的方式,必须确保新服务器上的Gitlab版本与原来一致。

        1)获取原 Gitlab 服务的版本号

[root@iZuf67tb9ohgwgpdsddvloZ ~]# docker images
REPOSITORY         TAG           IMAGE ID       CREATED        SIZE
gitlab/gitlab-ce   14.0.1-ce.0   f85d08f83476   4 months ago   2.21GB

        如上面的TAG信息就是版本号,但是,很多情况下,安装时未指定版本号,而是默认安装最新版本,此时 docker images 返回的 TAG 如下所示:

[root@iZuf6hvskoa8hddrc49em0Z ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED        SIZE
gitlab/gitlab-ce   latest    f85d08f83476   4 months ago   2.21GB
sonatype/nexus3    latest    9bcc23eff098   4 months ago   701MB
nginx              latest    4f380adfc10f   4 months ago   133MB

        这种情况下,执行 docker inspect <IMAGE ID> 命令,如下:

[root@iZuf6hvskoa8hddrc49em0Z ~]# docker inspect f85d08f83476
[
    {
        "Id": "sha256:f85d08f83476fbe330906892b2817339c99e02901ac9a35479c5e2db334e64c0",
        "RepoTags": [
            "gitlab/gitlab-ce:latest"
        ],
        "RepoDigests": [
            "gitlab/gitlab-ce@sha256:3689c780a6a621298911992a5a475a35e44ea2215cc5b4498272cab9e5c206b2"
        ],

        获取RepoDigests中sha256:之后的12位字符(本案里是:3689c780a6a6),去 Docker Hub查找相应的版本号。

        在查询内容框中输入 docker images 返回结果中的REPOSITORY,这里就是 gitlab/gitlab-ce,获得如下查询结果:

         点击 gitlab/gitlab-ce ,进入明细界面,然后点击 TAG 标签,如下:

          与查询结果中的DIGEST逐一匹配之前获取的前12位字符(3689c780a6a6)。为了加快查找速度,关注一下 Docker Image 命令输出的CREATED列,从这个时间点着手,可以省去很多时间。找到相关记录后,其TAG值就是版本号。本案例结果如下(14.0.1-ce.0):

 c)拉取 Gitlab的Docker镜像

[root@iZuf67tb9ohgwgpdsddvloZ ~]# docker pull gitlab/gitlab-ce:14.0.1-ce.0

d)启动 gitlab

docker run --detach \
--privileged=true \
--hostname dev.company.com \
--publish 443:443 --publish 8001:80 --publish 2222:22 \
--name gitlab --restart always \
--volume /home/gitlab/config:/etc/gitlab \
--volume /home/gitlab/logs:/var/log/gitlab \
--volume /home/gitlab/data:/var/opt/gitlab f85d08f83476

        上面命令中各参数解释:

        1)privileged=true,给容器加上宿主机root权限,否则可能会报权限不足导致启动失败

        2)hostname为docker服务器的主机名

        3)端口映射依实际情况设定,例如:8001:80表示宿主服务器端口8001映射Docker的80端口

        4)restart always表示当docker关闭时,自动重启

        5)volume三个卷的设置就是之前的目录映射

        6)f85d08f83476为IMAGE ID。

        注意:2222端口号不可以改变,否则,IDEA可以PULL但PUSH失败,会报401错误

e)查看日志

        如果启动失败,可以使用下列命令查看日志

[root@iZuf67tb9ohgwgpdsddvloZ ~]# docker logs -n20 gitlab

        其中,20表示希望显示20条日志记录

3. 数据还原

a)复制备份文件

        在原服务器上通过下列命令将备份文件复制到目标服务器的 /var/opt/gitlab/backups 目录下

[root@iZuf67tb9ohgwgpdsddvloZ ~]# docker exec -it gitlab /bin/bash
root@dev:/# cd /var/opt/gitlab/backups
root@dev:/var/opt/gitlab/backups# ls
1636955947_2021_11_15_14.0.1_gitlab_backup.tar
root@dev:/var/opt/gitlab/backups# scp 16*.tar root@100.100.100.100:/home/gitlab/data/backups

        其中,16*.tar是指向备份文件,100.100.100.100是目标服务器的地址。终端会要求输入目标服务器的密码,输入密码回车后,文件即会复制到指定目录。

b)还原文件

        1)进入目标服务器容器

[root@iZuf67tb9ohgwgpdsddvloZ ~]# docker exec -it gitlab /bin/bash

        2)关闭数据连接服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

        3)定位到备份文件所在目录

cd /var/opt/gitlab/backups

        4)对备份文件授权,否则会还原时会报错

chmod 777 *

        5)执行下列命令,恢复数据

gitlab-rake gitlab:backup:restore BACKUP=1636955947_2021_11_15_14.0.1

        其中,BAKUP后的内容是备份文件名中的"_gitlab"字符前的内容。

        6)复制配置文件

        执行下列命令可以从原服务器上将gitlab的配置文件 gitlab.rb 和gitlab-secrets.json 复制到目标服务器的 /home/gitlab/config 目录下

root@dev:/# exit
exit
[root@iZuf67tb9ohgwgpdsddvloZ ~]# cd /home/gitlab/config
[root@iZuf67tb9ohgwgpdsddvloZ config]# ls
gitlab.rb  gitlab-secrets.json  initial_root_password  ssh_host_ecdsa_key  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key  ssh_host_ed25519_key.pub  ssh_host_rsa_key  ssh_host_rsa_key.pub  trusted-certs
[root@iZuf67tb9ohgwgpdsddvloZ config]# scp gitlab.rb root@100.100.100.100:/home/gitlab/config
[root@iZuf67tb9ohgwgpdsddvloZ config]# scp gitlab-secrets.json root@100.100.100.100:/home/gitlab/config

        其中,exit是用来从docker中退出的命令。

        7)重新加载配置

gitlab-ctl reconfigure

        8)完成数据恢复后,重启服务即可

gitlab-ctl start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值