docker部署的gitlab数据迁移

docker部署的gitlab数据迁移

公司gitlab通过docker部署,现在需要将gitlab迁移到其他服务器。

参考网址:

一、备份

  • 备份gitlab镜像

    # 在源服务器执行docker save导出gitlab镜像
    docker save -o gitlabImage.tar gitlab-jh.tencentcloudcr.com/omnibus/gitlab-jh:latest
    # 在源服务器通过scp将gitlab镜像上传到目标服务器
    scp -P 22 ./gitlabImage.tar root@192.168.2.2:/root/
    # 此处使用scp,多次尝试使用rsync备份后目标地址文件大小跟原始文件大小差异很大
    nohup  scp -P 22 /data/gitlab/data/backups/jh_gitlab_backup.tar root@192.168.2.2:/data/git_back_data/ < /root/scp.out
    
  • 备份数据

    # 采用后台运行打印日志的方式备份,防止文件过大导致备份失败
    nohup docker exec -t gitlab gitlab-backup create > /root/gitlab_backup.log 2>&1 &
    
  • 备份配置文件

由于备份数据时并没有备份gitlab.rb 和gitlab-secrets.json配置文件,这两个文件是源gitlab配置文件,包含pg数据库相关的配置。

只需要备份容器内/etc/gitlab映射出来的全部文件即可。

二、恢复

  1. 先用docker-compose启动gitlab
docker-compose -f ./docker-compose-gitlab.yaml up -d
  1. 将备份文件拷贝到gitlab备份目录下,即容器内幕/var/opt/gitlab/backups映射出来的目录.

    # 因为此次备份文件过大,所以直接移动
    mv /data/git_back_data/jh_gitlab_backup.tar /data/gitlab/data/backups/
    
  2. 停止gitlab相关服务

    #先进到容器
    docker exec -it gitlab bash
    #在容器内执行命令停止 unicorn、puma、sidekiq
    gitlab-ctl stop unicorn
    gitlab-ctl stop puma
    gitlab-ctl stop sidekiq
    
  3. 执行恢复命令

    因为此次备份文件为41G,多次尝试容器内直接执行 gitlab-backup restore 和容器外执行docker exec -it gitlab gitlab-backup restore,均因shell界面断连接导致失败。后尝试后台运行脚本,执行 nohup docker exec -it gitlab gitlab-backup restore &,但因为在该脚本执行过程中需要用户输入yes/no,导致命令只运行到解压完备份文件就停止。

    最终选择使用expect命令实现,首先需要有个脚本restore.sh

    #!/usr/bin/expect
    set timeout -1
    spawn docker exec -it gitlab gitlab-backup restore
    expect {
     "yes/no" { send "yes\n";exp_continue }
    }
    

    执行需要用到expect命令

    expect restore.sh
    

    在执行docker exec -it gitlab gitlab-backup restore可能会遇到以下报错:

    Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
    ERROR:  must be owner of extension btree_gist
    ERROR:  must be owner of extension btree_gist
    ERROR:  must be owner of extension pg_trgm
    

    解决方案:

    1). 修改postgresql配置

    $ vim /var/opt/gitlab/postgresql/data/postgresql.conf
    listen_addresses = '*'
    # 最下面新增两行
    $ vim /var/opt/gitlab/postgresql/data/pg_hba.conf
    local   all         all                               trust
    host    all         all                               127.0.0.1/32 trust
    

    2). 重启gitlab服务

    $ gitlab-ctl restart
    ok: run: logrotate: (pid 29367) 1s
    ok: run: nginx: (pid 29371) 0s
    ok: run: postgresql: (pid 29389) 0s
    ok: run: redis: (pid 29391) 0s
    ok: run: sidekiq: (pid 29404) 0s
    ok: run: unicorn: (pid 29413) 0s
    

    3). 修改gitlab账号为超级用户

    $ su - gitlab-psql
    $ /opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production
    psql (9.2.8)
    Type "help" for help.
     
    gitlabhq_production=# ALTER USER gitlab WITH SUPERUSER;
    ALTER ROLE
    gitlabhq_production=# \q
    

    最后不要忘记停止unicorn、puma、sidekiq再执行restore

  4. 执行reconfigure

#将备份的配置文件中gitlab.rb 和gitlab-secrets.json复制到容器映射的配置文件路径
cp /data/git_back_data/config/gitlab.rb  /data/gitlab/data/config/
cp /data/git_back_data/config/gitlab-secrets.json /data/gitlab/data/config/
# 执行reconfigure命令
docker exec -it gitlab-ctl reconfigure
  1. 恢复完成后,启动服务

    gitlab-ctl start
    
  2. 重置root密码

#在gitlab容器内运行进入 Rails 控制台
gitlab-rails console -e production
#执行以下命令来修改 root 用户的密码:
user = User.where(id: 1).first
user.password = '123456'
user.password_confirmation = '123456'
user.save!

三、本地git仓库修改远程仓库地址

删除本地仓库关联的远程地址,添加新的远程仓库地址.

#查看远程仓库地址
git remote -v
D:\code>git remote -v
origin  http://xxx.xxx.1xxx0.xxx:xxxx/some-group/some-project.git (fetch)
origin  http://xxx.xxx.xxx.xxxx:xxxx/some-group/some-project.git (push) 
#删除远程仓库:
git remote rm origin
# 添加新仓库地址:
git remote add origin http://xxx.xxx.xxx.xxx:xxxx/some-project.git
#拉取最新代码
git fetch origin
info: detecting host provider for 'http://xxx.xxx.xxx.xxx:xxxx/'...
info: detecting host provider for 'http://xxx.xxx.xxx.xxx:xxxx/'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 10 (delta 6), reused 5 (delta 2), pack-reused 0

结果:提交成功! # docker部署的gitlab数据迁移

公司gitlab通过docker部署,现在需要将gitlab迁移到其他服务器。

参考网址:

一、备份

  • 备份gitlab镜像

    # 在源服务器执行docker save导出gitlab镜像
    docker save -o gitlabImage.tar gitlab-jh.tencentcloudcr.com/omnibus/gitlab-jh:latest
    # 在源服务器通过scp将gitlab镜像上传到目标服务器
    scp -P 22 ./gitlabImage.tar root@192.168.2.2:/root/
    # 此处使用scp,多次尝试使用rsync备份后目标地址文件大小跟原始文件大小差异很大
    nohup  scp -P 22 /data/gitlab/data/backups/jh_gitlab_backup.tar root@192.168.2.2:/data/git_back_data/ < /root/scp.out
    
  • 备份数据

    # 采用后台运行打印日志的方式备份,防止文件过大导致备份失败
    nohup docker exec -t gitlab gitlab-backup create > /root/gitlab_backup.log 2>&1 &
    
  • 备份配置文件

由于备份数据时并没有备份gitlab.rb 和gitlab-secrets.json配置文件,这两个文件是源gitlab配置文件,包含pg数据库相关的配置。

只需要备份容器内/etc/gitlab映射出来的全部文件即可。

二、恢复

  1. 先用docker-compose启动gitlab
docker-compose -f ./docker-compose-gitlab.yaml up -d
  1. 将备份文件拷贝到gitlab备份目录下,即容器内幕/var/opt/gitlab/backups映射出来的目录.

    # 因为此次备份文件过大,所以直接移动
    mv /data/git_back_data/jh_gitlab_backup.tar /data/gitlab/data/backups/
    
  2. 停止gitlab相关服务

    #先进到容器
    docker exec -it gitlab bash
    #在容器内执行命令停止 unicorn、puma、sidekiq
    gitlab-ctl stop unicorn
    gitlab-ctl stop puma
    gitlab-ctl stop sidekiq
    
  3. 执行恢复命令

    因为此次备份文件为41G,多次尝试容器内直接执行 gitlab-backup restore 和容器外执行docker exec -it gitlab gitlab-backup restore,均因shell界面断连接导致失败。后尝试后台运行脚本,执行 nohup docker exec -it gitlab gitlab-backup restore &,但因为在该脚本执行过程中需要用户输入yes/no,导致命令只运行到解压完备份文件就停止。

    最终选择使用expect命令实现,首先需要有个脚本restore.sh

    #!/usr/bin/expect
    set timeout -1
    spawn docker exec -it gitlab gitlab-backup restore
    expect {
     "yes/no" { send "yes\n";exp_continue }
    }
    

    执行需要用到expect命令

    expect restore.sh
    

    在执行docker exec -it gitlab gitlab-backup restore可能会遇到以下报错:

    Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
    ERROR:  must be owner of extension btree_gist
    ERROR:  must be owner of extension btree_gist
    ERROR:  must be owner of extension pg_trgm
    

    解决方案:

    1). 修改postgresql配置

    $ vim /var/opt/gitlab/postgresql/data/postgresql.conf
    listen_addresses = '*'
    # 最下面新增两行
    $ vim /var/opt/gitlab/postgresql/data/pg_hba.conf
    local   all         all                               trust
    host    all         all                               127.0.0.1/32 trust
    

    2). 重启gitlab服务

    $ gitlab-ctl restart
    ok: run: logrotate: (pid 29367) 1s
    ok: run: nginx: (pid 29371) 0s
    ok: run: postgresql: (pid 29389) 0s
    ok: run: redis: (pid 29391) 0s
    ok: run: sidekiq: (pid 29404) 0s
    ok: run: unicorn: (pid 29413) 0s
    

    3). 修改gitlab账号为超级用户

    $ su - gitlab-psql
    $ /opt/gitlab/embedded/bin/psql -h 127.0.0.1 gitlabhq_production
    psql (9.2.8)
    Type "help" for help.
     
    gitlabhq_production=# ALTER USER gitlab WITH SUPERUSER;
    ALTER ROLE
    gitlabhq_production=# \q
    

    最后不要忘记停止unicorn、puma、sidekiq再执行restore

  4. 执行reconfigure

#将备份的配置文件中gitlab.rb 和gitlab-secrets.json复制到容器映射的配置文件路径
cp /data/git_back_data/config/gitlab.rb  /data/gitlab/data/config/
cp /data/git_back_data/config/gitlab-secrets.json /data/gitlab/data/config/
# 执行reconfigure命令
docker exec -it gitlab-ctl reconfigure
  1. 恢复完成后,启动服务

    gitlab-ctl start
    
  2. 重置root密码

#在gitlab容器内运行进入 Rails 控制台
gitlab-rails console -e production
#执行以下命令来修改 root 用户的密码:
user = User.where(id: 1).first
user.password = '123456'
user.password_confirmation = '123456'
user.save!

三、本地git仓库修改远程仓库地址

删除本地仓库关联的远程地址,添加新的远程仓库地址.

#查看远程仓库地址
git remote -v
D:\code>git remote -v
origin  http://xxx.xxx.1xxx0.xxx:xxxx/some-group/some-project.git (fetch)
origin  http://xxx.xxx.xxx.xxxx:xxxx/some-group/some-project.git (push) 
#删除远程仓库:
git remote rm origin
# 添加新仓库地址:
git remote add origin http://xxx.xxx.xxx.xxx:xxxx/some-project.git
#拉取最新代码
git fetch origin
info: detecting host provider for 'http://xxx.xxx.xxx.xxx:xxxx/'...
info: detecting host provider for 'http://xxx.xxx.xxx.xxx:xxxx/'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 10 (delta 6), reused 5 (delta 2), pack-reused 0

结果:提交成功!

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

推荐阅读更多精彩内容