GitLab Docker方式部署

GitLab Docker映像

 

GitLab Docker映像是在單個容器中運行所有必需服務的GitLab的整體映像。

GitLab CE和EE都在Docker Hub中:

注意: 要在Kubernetes上安裝GitLab,請查看 GitLab Helm Charts

在以下示例中,我們使用的是GitLab CE的圖像。要使用GitLab EE而不是GitLab CE,請將圖像名稱替換爲gitlab/gitlab-ee:latest

需要Docker安裝,請參閱官方安裝文檔

 

設置卷掛載位置

在設置其他所有內容之前,請配置一個新的環境變量$GITLAB_HOME ,該變量指向配置,日誌和數據文件將駐留的目錄。確保目錄存在並且已授予適當的權限。

對於Linux用戶,將路徑設置爲/opt/gitlab

export GITLAB_HOME=/opt/gitlab

對於macOS用戶,請使用用戶$HOME/gitlab目錄:

export GITLAB_HOME=$HOME/gitlab

GitLab容器使用主機安裝的捲來存儲持久數據:

當地位置 貨櫃位置 用法
$GITLAB_HOME/data /var/opt/gitlab 用於存儲應用程序數據
$GITLAB_HOME/logs /var/log/gitlab 用於存儲日誌
$GITLAB_HOME/config /etc/gitlab 用於存儲GitLab配置文件

安裝

GitLab Docker鏡像可以多種方式運行:

使用Docker Engine安裝GitLab

您可以微調這些目錄以滿足您的要求。設置GITLAB_HOME變量後,即可運行圖像:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 2222:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

這將下載並啓動一個GitLab CE容器,併發布訪問SSH,HTTP和HTTPS所需的端口。所有的GitLab數據都將存儲爲的子目錄 $GITLAB_HOMErestart系統重啓後,容器將自動運行。

如果您使用的是SELinux,請改爲運行以下命令:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 2222:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime:z \
  --volume $GITLAB_HOME/config:/etc/gitlab:Z \
  --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
  --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce:latest

這將確保Docker進程具有足夠的權限在已安裝的卷中創建配置文件。

注意:--publish 8443:8443如果您正在使用Kerberos集成 ,則還需要發佈Kerberos端口(例如)。 。否則,將阻止通過Kerberos進行Git操作。

初始化過程可能需要很長時間。您可以使用以下方法跟蹤此過程:

sudo docker logs -f gitlab

啓動容器後,您可以訪問gitlab.example.com(或者 http://192.168.59.103如果您在macOS上使用了boot2docker)。Docker容器開始響應查詢可能需要一段時間。首次訪問GitLab時,系統會要求您設置管理員密碼。更改後,可以使用用戶名root和設置的密碼登錄。

使用Docker Compose安裝GitLab

使用Docker Compose,您可以輕鬆配置,安裝和升級基於Docker的GitLab安裝:

  1. 安裝Docker Compose
  2. 創建一個docker-compose.yml文件(或下載一個示例):

    web:
      image: 'gitlab/gitlab-ce:latest'
      restart: always
      hostname: 'gitlab.example.com'
      environment:
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'https://gitlab.example.com'
          # Add any other gitlab.rb configuration here, each on its own line
      ports:
        - '80:80'
        - '443:443'
        - '22:22'
      volumes:
        - '/etc/localtime:/etc/localtime'
        - '$GITLAB_HOME/config:/etc/gitlab'
        - '$GITLAB_HOME/logs:/var/log/gitlab'
        - '$GITLAB_HOME/data:/var/opt/gitlab'
  3. 確保您與以下目錄位於同一目錄中,docker-compose.yml然後啓動GitLab:

    docker-compose up -d
提示: 閱讀“預配置Docker容器”部分以查看GITLAB_OMNIBUS_CONFIG變量的工作方式。

以下是docker-compose.yml在自定義HTTP和SSH端口上運行GitLab的另一個示例。注意GITLAB_OMNIBUS_CONFIG變量如何匹配該 ports部分:

web:
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://gitlab.example.com:8929'
      gitlab_rails['gitlab_shell_ssh_port'] = 2224
  ports:
    - '8929:8929'
    - '2224:22'
  volumes:
    - '/etc/localtime:/etc/localtime'
    - '$GITLAB_HOME/config:/etc/gitlab'
    - '$GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'

這與使用相同--publish 8929:8929 --publish 2224:22

使用Docker羣模式安裝GitLab

使用Docker羣集模式,您可以輕鬆地在羣集集羣中配置和部署基於Docker的GitLab安裝。

在集羣模式下,您可以利用Docker機密 和Docker配置有效而安全地部署您的GitLab實例。機密信息可用於安全地傳遞您的初始root密碼,而無需將其暴露爲環境變量。配置可以幫助您保持GitLab映像儘可能通用。

這是一個使用祕密和配置將GitLab與四個跑步者作爲一個堆棧部署的示例:

  1. 設置Docker集羣
  2. 創建一個docker-compose.yml文件:

    version: "3.6"
    services:
      gitlab:
        image: gitlab/gitlab-ce:latest
        ports:
          - "22:22"
          - "80:80"
          - "443:443"
        volumes:
          - '/etc/localtime:/etc/localtime'
          - $GITLAB_HOME/data:/var/opt/gitlab
          - $GITLAB_HOME/logs:/var/log/gitlab
          - $GITLAB_HOME/config:/etc/gitlab
        environment:
          GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')"
        configs:
          - source: gitlab
            target: /omnibus_config.rb
        secrets:
          - gitlab_root_password
      gitlab-runner:
        image: gitlab/gitlab-runner:alpine
        deploy:
          mode: replicated
          replicas: 4
    configs:
      gitlab:
        file: ./gitlab.rb
    secrets:
      gitlab_root_password:
        file: ./root_password.txt

    爲了簡單起見,network省略了該配置。有關更多信息,請參見正式的Compose文件參考

  3. 創建一個gitlab.rb文件:

    external_url 'https://my.domain.com/'
    gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password')
  4. 創建一個root_password.txt文件:

    MySuperSecretAndSecurePass0rd!
  5. 確保您與以下目錄位於同一目錄docker-compose.yml並運行:

    docker stack deploy --compose-file docker-compose.yml mystack

組態

該容器使用官方的Omnibus GitLab軟件包,因此所有配置都在唯一的配置文件中完成/etc/gitlab/gitlab.rb

要訪問GitLab的配置文件,可以在運行容器的上下文中啓動Shell會話。這將允許您瀏覽所有目錄並使用喜歡的文本編輯器:

sudo docker exec -it gitlab /bin/bash

您也可以編輯/etc/gitlab/gitlab.rb

sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb

打開後,請/etc/gitlab/gitlab.rb確保將設置external_url爲指向有效的URL。

要從GitLab接收電子郵件,您必須配置 SMTP設置,因爲GitLab Docker映像未安裝SMTP服務器。您可能還對啓用HTTPS感興趣 。

完成所需的所有更改後,您將需要重新啓動容器以重新配置GitLab:

sudo docker restart gitlab
注意: 每當容器啓動時,GitLab都會重新配置自身。

有關配置GitLab的更多選項,請參閱 配置文檔

預配置Docker容器

您可以通過將環境變量添加GITLAB_OMNIBUS_CONFIG到Docker run命令中來預先配置GitLab Docker映像。該變量可以包含任何gitlab.rb設置,並且將在加載容器的gitlab.rb文件之前進行評估。這樣,您可以輕鬆配置GitLab的外部URL,從Omnibus GitLab模板進行任何數據庫配置或任何其他選項 。

注意: 其中包含的設置GITLAB_OMNIBUS_CONFIG不會寫入 gitlab.rb配置文件,它們會在加載時進行評估。

這是一個在啓動容器時設置外部URL並啓用LFS的示例:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;" \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

請注意,每次執行docker run命令時,都需要提供該GITLAB_OMNIBUS_CONFIG選項。的內容GITLAB_OMNIBUS_CONFIG是 保留後續運行之間。

使用標記版本的GitLab

還提供了GitLab Docker映像的標記版本。要查看所有可用標籤,請參閱:

要使用特定的標記版本,請替換gitlab/gitlab-ce:latest爲要運行的GitLab版本gitlab/gitlab-ce:12.1.3-ce.0

在公共IP地址上運行GitLab

您可以通過修改--publish標誌使Docker使用您的IP地址並將所有流量轉發到GitLab容器。

要在IP上公開GitLab CE 198.51.100.1

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 198.51.100.1:443:443 \
  --publish 198.51.100.1:80:80 \
  --publish 198.51.100.1:22:22 \
  --name gitlab \
  --restart always \
  --volume /etc/localtime:/etc/localtime \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

然後,您可以在http://198.51.100.1/和訪問您的GitLab實例https://198.51.100.1/

在不同的端口上暴露GitLab

GitLab將佔用 容器內的某些端口

如果要使用與80(HTTP)或443(HTTPS)不同的主機端口,則需要--publishdocker run命令中添加單獨的指令。

例如,在主機的port上公開Web界面,在port上公開8929SSH服務2289

  1. 使用以下docker run命令:

    sudo docker run --detach \
      --hostname gitlab.example.com \
      --publish 8929:8929 --publish 2289:22 \
      --name gitlab \
      --restart always \
      --volume /etc/localtime:/etc/localtime \
      --volume $GITLAB_HOME/config:/etc/gitlab \
      --volume $GITLAB_HOME/logs:/var/log/gitlab \
      --volume $GITLAB_HOME/data:/var/opt/gitlab \
      gitlab/gitlab-ce:latest
    注意: 發佈端口的格式爲hostPort:containerPort。在Docker的文檔中瞭解更多有關 公開傳入端口的信息
  2. 輸入正在運行的容器:

    sudo docker exec -it gitlab /bin/bash
  3. /etc/gitlab/gitlab.rb用您的編輯器打開並設置external_url

    # For HTTP
    external_url "http://gitlab.example.com:8929"
    
    or
    
    # For HTTPS (notice the https)
    external_url "https://gitlab.example.com:8929"
    注意: 此URL中指定的端口必須與Docker發佈到主機的端口匹配。此外,如果未顯式設置NGINX偵聽端口 nginx['listen_port'],它將從中拉出external_url。有關更多信息,請參見NGINX文檔
  4. 設置gitlab_shell_ssh_port及時區

    gitlab_rails['gitlab_shell_ssh_port'] = 2289
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
  5. 最後,重新配置GitLab:

    gitlab-ctl reconfigure

按照上面的示例,您將能夠從Web瀏覽器下訪問GitLab,<hostIP>:8929並在port下使用SSH進行推送2289

docker-compose.yml使用不同的端口的例子可以在找到 多克爾撰寫部分。

更新資料

在大多數情況下,更新GitLab就像下載最新的Docker image標籤一樣容易 。

使用Docker Engine更新GitLab

要更新使用Docker Engine安裝的 GitLab :

  1. 進行備份
  2. 停止正在運行的容器:

    sudo docker stop gitlab
  3. 刪除現有容器:

    sudo docker rm gitlab
  4. 拉新圖像。例如,最新的GitLab CE映像:

    sudo docker pull gitlab/gitlab-ce:latest
  5. 使用先前指定的選項再次創建容器 :

    sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /etc/localtime:/etc/localtime \
    --volume $GITLAB_HOME/config:/etc/gitlab \
    --volume $GITLAB_HOME/logs:/var/log/gitlab \
    --volume $GITLAB_HOME/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

在第一次運行時,GitLab將重新配置並自我更新。

注意: 在主要版本之間升級時, 請參考GitLab 升級建議

使用Docker compose更新GitLab

要更新使用Docker Compose安裝的 GitLab :

  1. 進行備份
  2. 下載最新版本並更新您的GitLab實例:

    docker-compose pull
    docker-compose up -d
    注意: 如果您改用標記,則需要先進行編輯docker-compose.yml

備份GitLab

您可以使用以下方法創建一個GitLab備份:

docker exec -t <container name> gitlab-backup create

閱讀更多有關如何備份和還原GitLab的信息

故障排除

如果您在使用Omnibus GitLab和Docker時遇到問題,以下信息將有所幫助。

診斷潛在問題

讀取容器日誌:

sudo docker logs gitlab

輸入運行容器:

sudo docker exec -it gitlab /bin/bash

從容器內部,您可以像通常管理Omnibus安裝一樣管理GitLab容器

500內部錯誤

更新Docker映像時,您可能會遇到一個問題,即所有路徑都顯示一個500頁面。如果發生這種情況,請重新啓動容器以嘗試解決此問題:

sudo docker restart gitlab

權限問題

從較早的GitLab Docker映像進行更新時,您可能會遇到權限問題。如果以前的圖像中的用戶沒有正確保留,則會發生這種情況。有用於修復所有文件權限的腳本。

要修復容器,請update-permissions隨後執行並重新啓動容器:

sudo docker exec gitlab update-permissions
sudo docker restart gitlab

Windows / Mac: Error executing action run on resource ruby_block[directory resource: /data/GitLab]

在Windows或Mac上將Docker Toolbox與VirtualBox一起使用並利用Docker卷時,會發生此錯誤。該/c/Users卷作爲VirtualBox共享文件夾安裝,並且不支持所有POSIX文件系統功能。不重新安裝就無法更改目錄所有權和權限,並且GitLab失敗。

我們的建議是切換到使用適用於您的平臺的本地Docker安裝,而不是使用Docker Toolbox。

如果您不能使用本機Docker安裝(Windows 10家庭版或Windows 7/8),則另一種解決方案是爲Docker Toolbox的boot2docker設置NFS掛載而不是VirtualBox共享。

Linux ACL問題

如果您在Docker主機上使用文件ACL,則該docker組需要對卷具有完全訪問權限才能使GitLab正常工作:

getfacl $GITLAB_HOME

# file: $GITLAB_HOME
# owner: XXXX
# group: XXXX
user::rwx
group::rwx
group:docker:rwx
mask::rwx
default:user::rwx
default:group::rwx
default:group:docker:rwx
default:mask::rwx
default:other::r-x

如果這些都不正確,請使用以下命令進行設置:

sudo setfacl -mR default:group:docker:rwx $GITLAB_HOME
注意: docker是默認組,如果您更改了此組,請相應地更新命令。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章