遷移gitlab至docker容器過程與一些坑!


 

以下操作皆在root用戶下, 話不多說, 直接開干

 

第一步: 備份原gitlab

進入gitlab目錄下, 我這邊是: /home/git/gitlab

執行命令: sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

備份完成后會在: /home/git/gitlab/tmp/backups 下產生一個備份的壓縮文件, 如: 1566977804_2019_08_28_9.5.3_gitlab_backup.tar (其中 9.5.3 代表gitlab的版本, 備份文件只能恢復到相同版本的gitlab服務中)

如果備份命令不起作用(可能是gitlab安裝方式的區別), 請參考: http://blog.sina.com.cn/s/blog_6ff7a3b50102w3oj.html

 

第二步: 安裝docker

centos7安裝方式: yum install docker    (centos6請自行搜索安裝docker方式)

啟動docker服務: service docker start

 

第三步: 尋找合適的gitlab鏡像

進入docker鏡像官網搜索gitlab: https://hub.docker.com/r/gitlab/gitlab-ce/tags

根據剛才備份文件名中的版本號, 在tag列表中找到對應的鏡像版本

記下tag名字, 我這里是: 9.5.3-ce.0   (一會拉取鏡像時有用)

 

第四步: 拉取鏡像

執行命令: docker pull docker.io/gitlab/gitlab-ce:9.5.3-ce.0    (冒號后面就是剛剛找到的對應版本號)

拉取完成后, 執行命令:  docker images    (查看本地鏡像列表, 正常的話列表中出現gitlab鏡像)

 

第五步: 在宿主機上准備3個掛載目錄

mkdir -p /home/docker/gitlab/config

mkdir -p /home/docker/gitlab/data

mkdir -p /home/docker/gitlab/logs

開放掛載目錄權限: chmod -R 777 /home/docker/gitlab

 

第六步: 使用gitlab鏡像啟動容器

幾個坑:

1.如果宿主機的ssh遠程登入端口為22的話, 最好將其修改為其他端口, 如: 2200 (否則gitlab安裝完成后, 無法正常使用項目中的ssh地址進行clone/pull/push等操作) , 修改ssh端口的方案參考: https://www.cnblogs.com/rwxwsblog/p/5756894.html

2.啟動容器時使用的映射端口需要確保沒有被占用, 否則將無法正常訪問, 查看當前服務器監聽的端口列表命令:  netstat -lnpt

3.確保映射的宿主機端口是開放的(1.服務器防火牆  2.阿里雲安全組策略), 修改防火牆參考: https://www.linuxidc.com/Linux/2019-06/159104.htm

執行命令: docker run --name='gitlab' -d --publish 22:22 --publish 1443:443 --publish 18080:80 --restart always --privileged=true --volume /home/docker/gitlab/config:/etc/gitlab --volume /home/docker/gitlab/logs:/var/log/gitlab --volume /home/docker/gitlab/data:/var/opt/gitlab  <本地gitlab鏡像id>

執行命令: docker ps -a   (查看docker當前容器列表, 正常的話可以看到一個 gitlab 容器, 並且狀態為 Up)

 

第七步: 測試gitlab服務運行狀態

回到線下環境使用瀏覽器訪問:  http://宿主機ip:18080 , 看到如下界面代表服務啟動正常 (如果無法訪問或者顯示 502, 可能還在啟動過程中, 稍等1分鍾再刷新試試)

 

 

第八步: 使用在gitlab容器中恢復備份文件

首先將備份文件上傳至宿主機 /home/docker/gitlab 目錄下

執行命令: cp /home/docker/gitlab/備份文件名 /home/docker/gitlab/data/backups/ 

查看gitlab容器id:  docker ps -a 

進入容器: docker exec -it <容器id> /bin/bash

執行恢復: gitlab-rake gitlab:backup:restore BACKUP=1566977804_2019_08_28_9.5.3  force=yes   (其中橙色字體部分為備份文件名前綴, 這里文件名為: 1566977804_2019_08_28_9.5.3_gitlab_backup.tar)

簡直不敢信, 竟然沒有報錯...

 

第九步: 查看恢復數據

回到線下瀏覽器, 再次訪問 http://宿主機ip:18080

使用原有的git賬號登入

登入成功, 看到了所有項目! 太感動了...

但是問題隨之而來:

進入項目首頁時, 看到 clone 地址中的hostname變成了一串 隨機字符, 如: git@s4fad15gs1a:xxxxxx/xxxxx.git (理想中應該是: git@git.xxx.com:xxxxx/xxxx.git), 並且無法使用此鏈接 clone 代碼

處理方案: 

進入容器: docker exec -it <容器id>  /bin/bash

編輯配置文件: vi /etc/gitlab/gitlab.rb 

  找到 external_url , 取消注釋, 並修改為 external_url  'http://服務器的ip或域名'

  找到 gitlab_rails['gitlab_ssh_host'], 取消注釋, 並修改為 gitlab_rails['gitlab_ssh_host'] = '服務器的ip或域名'

  保存

更新配置:  gitlab-ctl reconfigure

重新啟動:  gitlab-ctl restart

等待1分鍾啟動完成后, 再次回到線下查看, 發現地址對了

 

第十步: 測試clone項目

在本地機器上新建一個文件夾, 進入文件夾, 右鍵調出 Git Bash

執行: git clone git@git.flow360.cn:cardmee/page_pc.git

結果報錯..

由於服務器的更改, 原有的 ssh 授權信息已經失效了, 需要 找到 known_hosts 文件, 將里面原來的 授權記錄一行刪除, 保存

保存后再次執行 git clone git@git.flow360.cn:cardmee/page_pc.git

詢問授權輸入 yes , 回車

正常下載代碼中....

 

最后2個坑:

1. 我剛剛為了修改clone地址, 改了gitlab.rb文件, 然而當我重啟容器后, 修改的配置又回到了默認狀態, 這就很操蛋了...

解決方案: 

在宿主機下進入目錄: cd /home/docker/gitlab/config 

以同樣的方式修改 gitlab.rb 文件, 保存

重啟gitlab容器: docker restart <容器id>

測試通過

 

2.gitlab占用內存過高的優化

解決方案: 

在宿主機下進入目錄: cd /home/docker/gitlab/config 

修改 gitlab.rb 文件

  找到 unicorn['worker_processes'] , 取消注釋, 修改為 unicorn['worker_processes'] = 2

  找到 unicorn['worker_memory_limit_min'] , 取消注釋, 修改為 unicorn['worker_memory_limit_min'] = "200 * 1 << 20"

   找到 unicorn['worker_memory_limit_max'], 取消注釋, 修改為 unicorn['worker_memory_limit_max'] = "300 * 1 << 20"

   找到 sidekiq['concurrency'] , 取消注釋, 修改為 sidekiq['concurrency'] = 5

  找到 postgresql['shared_buffers'] , 取消注釋, 修改為 postgresql['shared_buffers'] = "128MB"

保存

重啟容器: docker restart <容器id>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM