Docker

GITLAB:將儲存庫從舊 gitlab 移植到基於 Docker 的 gitlab

  • December 19, 2019

我在 RaspberryPi 上使用 Gitlab 已有幾年了。現在我想將儲存庫移動到基於 docker 的 Gitlab。最好的所有設置。

我已閱讀說明並嘗試了以下有關數據的方法:

  1. 我複制了以下內容:
  • /etc/gitlab
  • /var/opt/gitlab/git-data

和 gitlab 容器崩潰了…… 2. 我複制了以下內容:

  • /etc/gitlab
  • /var/opt/gitlab

和 gitlab 容器崩潰了…… 3. 我複制了以下內容:

  • /etc/gitlab

和 gitlab 容器執行…

雖然 Gitlab 的設置位於*/etc/gitlab*,但沒有傳輸任何使用者或組數據。出現“第一個”螢幕,您應該在其中設置 root 密碼等。此外,我注意到新的 Gitlab 將儲存庫儲存在*/var/opt/gitlab/git-data/repositories/@hashed/下,而不是格式/var/opt/gitlab/git-data/repositories/group-or-user-name/reponame.(wiki.)git*像以前一樣。

所以我的問題是:

  1. 我必須將什麼複製到埠使用者和組設置?
  2. 如何移植儲存庫?
  3. 我必須複製/備份什麼才能在將來恢復 GITLAB?

編輯 (A) - 僅試驗容器

docker run \
   --detach \
   --rm \
   --name gitlab \
   --network host \
   --volume ${PWD}/etc/gitlab:/etc/gitlab \
   --volume ${PWD}/var/opt/gitlab:/var/opt/gitlab \
   gitlab/gitlab-ce:latest

如果我用這個命令創建一個容器,用 GITLAB 做一些事情,而不是刪除容器並啟動一個新容器:這行得通。在這種情況下,兩個容器的 GITLAB 版本是相同的。

按照 c4f4t0r 的提示,我解決了以下問題:

  1. 在 RaspberryPi 上執行舊的 Gitlab v9.2.7 並創建備份 ( Backups )。請注意,除了備份本身之外,目錄*/etc/gitlab*也必須單獨備份。

  2. 由於恢復備份只能用於GitLab 完全相同的版本和類型 (CE/EE)備份和恢復 GitLab),因此我創建了一個 Gitlab 容器gitlab/glitlab-ce:9.2.7-ce.0並在其中恢復了備份。

  3. 我在 docker 主機上選擇了以下文件夾結構:

/mnt/gitlab_ws/
├── backups/          <-- contains timestamp_9.2.7_gitlab_backup.tar
├── etc/gitlab/       <-- contains gitlab.rb; gitlab-secrets.json and ssh stuf
├── git-data/         <-- initially empty
└── var/opt/gitlab/   <-- initially empty
  1. 我在 docker 容器中選擇了以下文件夾結構:
/
├── etc/gitlab/
├── mnt/gitlab_ws/backups/   <-- to be set in */etc/gitlab/gitlab.rb*
├── mnt/gitlab_ws/git-data/  <-- to be set in */etc/gitlab/gitlab.rb*
└── var/opt/gitlab/
  1. 執行 gitlab
./run_gitlab.sh 9.2.7
  1. 確保正確的寫入權限。如果在主機端設置權限,容器內的權限可能會不一樣。您可能希望在啟動容器後設置正確的訪問權限:
docker exec -it gitlab chown -R git:git /var/opt/gitlab/ /etc/gitlab /mnt/gitlab_ws/git-data /mnt/gitlab_ws/backups
  1. 恢復備份
./restore_backup.sh
  1. 檢查 Gitlab 現在是否正常執行,顯示所有儲存庫和使用者(如果沒有,問題可能與*/etc/gitlab的訪問權限有關)並且儲存庫具有預期的內容(如果沒有,問題可能與/etc/gitlab/gitlab.rb中的git-data*路徑設置或訪問權限。)。
  2. 我將捲*/var/opt/gitlab/*綁定到我的主機,以便可以通過執行具有更高版本的 gitlab 容器來升級 Gitlab。請記住,只能在次要版本(更新)之間進行升級。
./run_gitlab.sh 9.3.0

啟動更高級別的 gitlab 後(容器狀態變為“健康” - 這可能需要一些時間),您現在應該重新配置 gitlab:

./reconfigure_gitlab.sh

從現在開始,您可以重複最後一步,直到達到您想要的版本。您也可以自動執行此操作;)


run_gitlab.sh

#/bin/bash

GITLAB_WS_PATH='/mnt/gitlab_ws'

if [ $# -eq 0 ]
then
       TAG='latest'
else
       TAG=$1-ce.0
fi

docker run \
       --name gitlab \
       --detach \
       --restart always \
       --network host \
       --volume $GITLAB_WS_PATH/git-data/:/mnt/gitlab_ws/git-data \
       --volume $GITLAB_WS_PATH/var/opt/gitlab:/var/opt/gitlab \
       --volume $GITLAB_WS_PATH/etc/gitlab:/etc/gitlab \
       --volume $GITLAB_WS_PATH/backups:/mnt/gitlab_ws/backups \
       gitlab/gitlab-ce:${TAG}

restore_backup.sh

#!/bin/bash

DE="docker exec -it gitlab"

${DE} gitlab-ctl stop unicorn
${DE} gitlab-ctl stop sidekiq
${DE} gitlab-rake gitlab:backup:restore
${DE} gitlab-ctl reconfigure
${DE} gitlab-ctl restart

reconfigure_gitlab.sh

#!/bin/bash

DE="docker exec -it gitlab"

${DE} gitlab-ctl stop
${DE} gitlab-ctl reconfigure
${DE} gitlab-ctl start

引用自:https://serverfault.com/questions/995506