前期准備
數據備份 記錄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秒