docker部署的gitlab迁移

背景: 将docker部署的gitlab迁移到另一台服务器

查看gitlab版本

[root@gitlab ~]# docker exec gitlab gitlab-rake gitlab:env:info

System information
System:     
Current User:   git
Using RVM:  no
Ruby Version:   2.7.2p137
Gem Version:    3.1.4
Bundler Version:2.1.4
Rake Version:   13.0.6
Redis Version:  6.0.14
Git Version:    2.32.0
Sidekiq Version:5.2.9
Go Version: unknown

GitLab information
Version:    14.2.3
Revision:   2324101daeb
Directory:  /opt/gitlab/embedded/service/gitlab-rails
DB Adapter: PostgreSQL
DB Version: 12.7
URL:        http://172.16.140.174
HTTP Clone URL: http://172.16.140.174/some-group/some-project.git
SSH Clone URL:  git@172.16.140.174:some-group/some-project.git
Using LDAP: yes
Using Omniauth: yes
Omniauth Providers: 

GitLab Shell
Version:    13.19.1
Repository storage paths:
- default:  /var/opt/gitlab/git-data/repositories
GitLab Shell path:      /opt/gitlab/embedded/service/gitlab-shell
Git:        /opt/gitlab/embedded/bin/git


查看映射关系

[root@gitlab ~]# docker inspect gitlab | grep Mount -A 20
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": [
                "/opt/gitlab/config:/etc/gitlab",
                "/opt/gitlab/logs:/var/log/gitlab",
                "/opt/gitlab/data:/var/opt/gitlab/"
            ],
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {
                "22/tcp": [
                    {
                        "HostIp": "",
                        "HostPort": "10022"
--
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/opt/gitlab/config",
                "Destination": "/etc/gitlab",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/gitlab/logs",
                "Destination": "/var/log/gitlab",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/opt/gitlab/data",
                "Destination": "/var/opt/gitlab",

1. 将旧服务器的gitlab 镜像打包导出

[root@gitlab ~]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED       SIZE
assaflavie/runlike      latest    e178428d4a3c   2 years ago   283MB
gitlab-backup           latest    4066f53ab230   2 years ago   2.26GB
gitlab/gitlab-ce        latest    fe83bde77572   2 years ago   2.25GB
elleflorio/svn-server   latest    b8cc2d411214   2 years ago   49.7MB
[root@gitlab ~]# docker save -o gitlab.tar gitlab/gitlab-ce:latest

导入到新服务器

[root@localhost ~]# docker load -i gitlab.tar 
Loaded image: gitlab/gitlab-ce:latest
[root@localhost ~]# docker images
REPOSITORY         TAG           IMAGE ID       CREATED       SIZE
gitlab/gitlab-ce   14.2.3-ce.0   fe83bde77572   2 years ago   2.25GB
gitlab/gitlab-ce   latest        fe83bde77572   2 years ago   2.25GB

2. 查看旧服务器gitlab的运行信息

[root@gitlab ~]# docker pull assaflavie/runlike:latest
latest: Pulling from assaflavie/runlike
a0d0a0d46f8b: Pull complete 
14df950e5a79: Pull complete 
86a31cc9e913: Pull complete 
c6e88c3a8cca: Pull complete 
843e00801cfc: Pull complete 
8c7a43c10170: Pull complete 
1b52f4e484f7: Pull complete 
d2414af5b173: Pull complete 
e784d6354f86: Pull complete 
90bffe34dc9b: Pull complete 
616b184e3902: Pull complete 
Digest: sha256:a213a7d8e2a26ef0167b5d9a8d71c799cbb1fd52e350dbb69558ba3853a61889
Status: Downloaded newer image for assaflavie/runlike:latest
docker.io/assaflavie/runlike:latest
[root@gitlab ~]# alias runlike="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike"
[root@gitlab ~]# runlike  gitlab
docker run --name=gitlab --hostname=a88968cb1dcc --mac-address=02:42:ac:11:00:02 --env=PATH=/opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=LANG=C.UTF-8 --env=EDITOR=/bin/vi --env=TERM=xterm --volume=/opt/gitlab/config:/etc/gitlab --volume=/opt/gitlab/logs:/var/log/gitlab --volume=/opt/gitlab/data:/var/opt/gitlab/ --volume=/etc/gitlab --volume=/var/log/gitlab --volume=/var/opt/gitlab -p 10022:22 --expose=443 -p 80:80 --restart=always --runtime=runc --detach=true gitlab/gitlab-ce /assets/wrapper
[root@gitlab ~]# runlike  -p gitlab
docker run \
    --name=gitlab \
    --hostname=a88968cb1dcc \
    --mac-address=02:42:ac:11:00:02 \
    --env=PATH=/opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
    --env=LANG=C.UTF-8 \
    --env=EDITOR=/bin/vi \
    --env=TERM=xterm \
    --volume=/opt/gitlab/config:/etc/gitlab \
    --volume=/opt/gitlab/logs:/var/log/gitlab \
    --volume=/opt/gitlab/data:/var/opt/gitlab/ \
    --volume=/etc/gitlab \
    --volume=/var/log/gitlab \
    --volume=/var/opt/gitlab \
    -p 10022:22 \
    --expose=443 \
    -p 80:80 \
    --restart=always \
    --runtime=runc \
    --detach=true \
    gitlab/gitlab-ce \
    /assets/wrapper

在新服务器创建相同版本的gitlab容器

创建映射目录

[root@localhost opt]# mkdir gitlab
[root@localhost opt]# cd gitlab/
[root@localhost gitlab]# mkdir logs data config

新服务器运行容器

docker run \
    --name=gitlab \
    --hostname=172.16.140.11 \
    --env=PATH=/opt/gitlab/embedded/bin:/opt/gitlab/bin:/assets:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
    --env=LANG=C.UTF-8 \
    --env=EDITOR=/bin/vi \
    --env=TERM=xterm \
    --volume=/opt/gitlab/config:/etc/gitlab \
    --volume=/opt/gitlab/logs:/var/log/gitlab \
    --volume=/opt/gitlab/data:/var/opt/gitlab/ \
    --volume=/etc/gitlab \
    --volume=/var/log/gitlab \
    --volume=/var/opt/gitlab \
    -p 10022:22 \
    --expose=443 \
    -p 80:80 \
    --restart=always \
    --runtime=runc \
    --detach=true \
    gitlab/gitlab-ce

已启动成功

[root@localhost gitlab]# docker ps
CONTAINER ID   IMAGE              COMMAND             CREATED         STATUS                   PORTS                                                                                 NAMES
209580d3aa08   gitlab/gitlab-ce   "/assets/wrapper"   9 minutes ago   Up 9 minutes (healthy)   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp, 0.0.0.0:10022->22/tcp, :::10022->22/tcp   gitlab

迁移备份和恢复

将旧服务器下的gitlab备份文件复制到新服务器的gitlab备份目录下

[root@localhost backups]# ll
总用量 24877100
-rw-r--r--. 1 root root 25474150400 3月  27 11:30 1711476565_2024_03_26_14.2.3_gitlab_backup.tar
[root@localhost backups]# chmod +777 1711476565_2024_03_26_14.2.3_gitlab_backup.tar 
[root@localhost backups]# ll
总用量 24877100
-rwxrwxrwx. 1 root root 25474150400 3月  27 11:30 1711476565_2024_03_26_14.2.3_gitlab_backup.tar

恢复备份

进入容器
[root@localhost backups]# docker  exec  -it 2095 /bin/bash
停止相关数据连接服务
root@a88968cb1dcc:/var/opt/gitlab/backups# gitlab-ctl stop unicorn
root@a88968cb1dcc:/var/opt/gitlab/backups# gitlab-ctl stop sidekiq
ok: down: sidekiq: 1s, normally up
进入目录/var/opt/gitlab/backups
cd /var/opt/gitlab/backups
加载备份文件
root@a88968cb1dcc:/var/opt/gitlab/backups# gitlab-rake gitlab:backup:restore BACKUP=1711476565_2024_03_26_14.2.3

等待备份文件加载完成,中间会出现几次交互,大概意思就是加载备份会删除现有数据,是否确定,都输入yes就可以
如果遇到错误:must be owner of extension plpgsql
参考:https://www.jianshu.com/p/09a2b0c25ecd

提示:

Do you want to continue (yes/no)? yes

Deleting backups/tmp ... done
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need to restore these files manually.
Restore task is done.

需要把原来的gitlab.rb和gitlab-secrets.json 拷贝到现配置文件目录下
并修改url地址

[root@localhost config]# vim gitlab.rb
external_url 'http://172.16.140.11'
[root@localhost gitlab]# vim data/gitlab-rails/etc/gitlab.yml 
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: 172.16.140.11
    port: 80
    https: false

重新加载配置
root@172:/var/opt/gitlab/backups# gitlab-ctl reconfigure

Running handlers:
Running handlers complete
Chef Infra Client finished, 30/728 resources updated in 01 minutes 35 seconds
gitlab Reconfigured!

启动服务

root@172:/var/opt/gitlab/backups# gitlab-ctl start
ok: run: alertmanager: (pid 14103) 107s
ok: run: gitaly: (pid 1198) 8221s
ok: run: gitlab-exporter: (pid 1233) 8220s
ok: run: gitlab-workhorse: (pid 14063) 108s
ok: run: grafana: (pid 14124) 106s
ok: run: logrotate: (pid 5903) 1019s
ok: run: nginx: (pid 14083) 107s
ok: run: postgres-exporter: (pid 1306) 8218s
ok: run: postgresql: (pid 1315) 8217s
ok: run: prometheus: (pid 1317) 8217s
ok: run: puma: (pid 14025) 166s
ok: run: redis: (pid 1442) 8216s
ok: run: redis-exporter: (pid 1448) 8216s
ok: run: sidekiq: (pid 14452) 0s
ok: run: sshd: (pid 1469) 8211s

测试是否成功

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容