docker中的gitlab數據備份、遷移和升級


前期准備

數據備份
記錄gitlab運行命令:
docker run -itd  --name gitlab \
 --hostname gitlab.suniot.cn  \
 -p 443:443 -p  10022:22 -p 10080:80 \ 
 -v /home/docker/gitlab/config:/etc/gitlab \
 -v /home/docker/gitlab/logs:/var/log/gitlab \ 
 -v /home/docker/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:14.1.2-ce.0

備份數據庫和配置文件
  docker exec -t gitlab gitlab-rake gitlab:backup:create
  備份的文件在
  /home/docker/gitlab/data/backups

遷移到目標服務器

新的服務器上運行gitlab
docker run -itd  --name gitlab \
 --hostname gitlab.suniot.cn  \
 -p 443:443 -p  10022:22 -p 10080:80 \ 
 -v /home/docker/gitlab/config:/etc/gitlab \
 -v /home/docker/gitlab/logs:/var/log/gitlab \ 
 -v /home/docker/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:14.1.2-ce.0

正常啟動后停止
 docker stop gitlab

復制備份的文件到新服務器上
   scp /home/docker/gitlab/data/backups/1636695916_2021_11_12_14.1.2_gitlab_backup.tar  root@172.16.77.88:/home/docker/data/gitlab/data/backups
   配置文件需要手動備份,傳到新服務器上
   scp /home/docker/gitlab/config/*  root@172.16.77.88:/home/docker/data/gitlab/config

啟動服務 docker start gitlab
還原備份
   # 進入容器
    docker exec -it gitlab /bin/bash
    gitlab-ctl stop unicorn
    gitlab-ctl stop sidekiq

    # 驗證
    gitlab-ctl status

    #還原備份文件
    gitlab-rake gitlab:backup:restore BACKUP=1636695916_2021_11_12_14.1.2
#注意unpacking backup failed報錯,文件權限問題
chmod 777
1636695916_2021_11_12_14.1.2_gitlab_backup.tar
    #重啟並驗證
    gitlab-ctl restart
    gitlab-rake gitlab:check SANITIZE=true
驗證項目是否遷移成功

 官方文檔:報500錯誤設置

https://docs.gitlab.com/ee/raketasks/backup_restore.html#troubleshooting

docker升級gitlab
例子gitlab版本14.1.8>14.2.6
首先停掉 gitlab/gitlab-ce:14.1.8-ce.0版本的docker
docker stop gitlab-14.1.8
基於gitlab-14.1.8掛載的目錄去啟動gitlab/gitlab-ce:14.2.6-ce.0

docker run -itd  --name gitlab-14.2.6 \ 
--hostname gitlab.xxx.cn  \ 
-p 1443:443 -p 1022:22  -p 1080:80 \ 
-v /data/docker/gitlab/config:/etc/gitlab \ 
-v /data/docker/gitlab/logs:/var/log/gitlab \ 
-v /data/docker/gitlab/data:/var/opt/gitlab \ 
gitlab/gitlab-ce:14.2.6-ce.0

docker logs  gitlab-14.2.6
錯誤提示:
caller=main.go:733 err="opening storage failed: get segment range: segments are not sequential"
解決方法:
rm -Rf /var/opt/gitlab/prometheus/data/wal
gitlab-ctl restart prometheus
gitlab-ctl status

刪除項目報500
gitlab-rails dbconsole --database main
update projects set runners_token = null,runners_token_encrypted = null;

保存項目設置報500
OpenSSL::Cipher::CipherError
原因: 沒有導入原來的加密信息/etc/gitlab/gitlab-secrets.json導致,重置下即可。
解決辦法:
輸入gitlab-rails console,等待進入rails控制台
輸入ApplicationSetting.current.reset_runners_registration_token!,顯示結果為true,exit退出重新保存

當啟動失敗時更新文件權限
If this container fails to start due to permission problems try to fix it by executing:
docker exec -it gitlab update-permissions
docker restart gitlab

 

如果用到nginx代理需要添加 client_max_body_size 100m;推送文件大小 ,gitlab設置推送大小,配置文件里修改大小 三處需要修改   git推送大文件報413

client_max_body_size 50m; # 限制請求體的大小,若超過所設定的大小,返回413錯誤,默認1m
client_header_timeout 1m; # 讀取請求頭的超時時間,若超過所設定的大小,返回408錯誤
client_body_timeout 1m; # 讀取請求實體的超時時間,若超過所設定的大小,返回413錯誤
proxy_connect_timeout 60s; # http請求無法立即被容器(tomcat, netty等)處理,被放在nginx的待處理池中等待被處理。此參數為等待的最長時間,默認為60秒,官方推薦最長不要超過75秒
proxy_read_timeout 1m; # http請求被容器(tomcat, netty等)處理后,nginx會等待處理結果,也就是容器返回的response。此參數即為服務器響應時間,默認60秒
proxy_send_timeout 1m; # http請求被服務器處理完后,把數據傳返回給Nginx的用時,默認60秒

 


免責聲明!

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



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