Docker 搭建 Gitlab 服務

Docker 搭建 Gitlab 服務

前置條件

  • docker 已安裝
  • docker compose (用到的話須要安裝)
  • linux 等主機環境

拉取 Gitlab 鏡像

Gitlab Docker 鏡像是在單個容器上運行全部必需服務的GitLab的總體鏡像。若是你想用最新的RC鏡像,能夠分別用gitlab/gitlab-ce:rc or gitlab/gitlab-ee:rc
下面實例中咱們主要用社區版鏡像。html

docker 命令拉取 gitlab 鏡像linux

docker pull gitlab/gitlab-ce

運行 Gitlab 鏡像

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

若是您使用的是SELinux,請改成運行如下命令:nginx

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

啓動一個GitLab CE容器,併發布訪問SSH,HTTP和HTTPS所需的端口。全部的GitLab數據都將存儲爲/srv/gitlab/的子目錄。系統重啓後,容器將自動重啓。git

命令解釋:web

--detach -> -d 此時容器會在後臺運行並不會把輸出的結果 (STDOUT) 打印到宿主機上面(能夠經過 docker container logs [container ID or NAMES] 獲取容器的輸出信息)docker

--hostname -> -h 配置容器主機名shell

--publish -> -p 映射容器端口到宿主機端口 宿主機Port:容器Port瀏覽器

--name -> 容器名稱ruby

--restart -> 重啓配置,always:系統重啓時,容器也會自動重啓。no:默認策略,容器退出時不重啓;no-failue:n:在容器非正常退出時重啓容器,最大重啓n次;unless-stopped:在容器退出時老是重啓容器,但不考慮在Docker守護進程啓動時就已經中止了的容器。bash

--volume -> -v 數據卷映射 宿主機目錄:容器目錄

gitlab/gitlab-ce:latest -> gitlab 鏡像

Gitlab 數據存儲位置

本地目錄 容器目錄 做用
/srv/gitlab/data /var/opt/gitlab 存儲應用數據
/srv/gitlab/logs /var/log/gitlab 存儲日誌數據
/srv/gitlab/config /etc/gitlab 存儲 gitlab 配置文件

Gitlab 配置

該容器使用官方的Omnibus GitLab軟件包,所以全部配置都在惟一的配置文件 /etc/gitlab/gitlab.rb 中完成。

  • 能夠進入容器進行修改配置文件

    // 1.進入容器
    sudo docker exec -it gitlab /bin/bash
    
    // 2.修改配置文件
    sudo vi /etc/gitlab/gitlab.rb
    
    // 或者一步操做
    sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb

    修改配置完成後,須要重啓容器以從新配置 gitlab

    sudo docker restart gitlab

    注:每當容器啓動時,GitLab都會從新配置自身。

瞭解配置的更多信息,請查看 Omnibus GitLab documentation

訪問 Gitlab 服務

  • 初始化進程可能須要一段時間,能夠經過如下命令查看進程狀態:

    // 經過查看容器日誌
    sudo docker logs -f gitlab
    
    // 或者經過查看容器狀態(當 STATUS 顯示爲 healthy 時即正常啓動完成)
    sudo docker container ls --all
  • 初始化完成後,訪問服務 http://localhost ,重置 root 密碼後再登陸。

升級 Gitlab 到新版本

升級新版本須要從新構建容器,因此要先中止、刪除須要升級的 gitlab 容器服務

  1. 中止 gitlab 容器服務

    sudo docker stop gitlab
  2. 移除 gitlab 容器

    sudo docker rm gitlab
  3. 拉取新鏡像

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

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

在公共IP地址上運行Gitlab CE

經過修改 --publish 標誌使 Docker 使用您的IP地址並將全部流量轉發到 GitLab CE 容器。

例如將 gitlab 映射到某個IP如 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 /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

容器構建完成後,能夠經過 http://198.51.100.1https://198.51.100.1 訪問服務了。

在不一樣的端口上暴露 GitLab

若是要使用與80(HTTP)或443(HTTPS)不一樣的主機端口,則須要向 docker run 命令添加單獨的 --publish 指令。

例如要暴露 web 界面服務端口在8829,暴露SSH 服務端口到2289

  1. 首先運行 docker run 命令

    sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 8929:8929 --publish 2289:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
  2. 配置 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 ['listen_port'] 中顯式設置了NGINX偵聽端口,不然將從該URL中提取該端口。有關更多信息,請參考NGINX文檔

    • 設置 gitlab_shell_ssh_port (git倉庫地址顯示的端口,實際仍是工做於22端口):

      gitlab_rails['gitlab_shell_ssh_port'] = 2289

按照上面的示例,能夠經過Web瀏覽器在<hostIP>:8929下訪問GitLab,並在端口2289下使用SSH進行訪問。

經過 docker-compose 安裝 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:
        - '/srv/gitlab/config:/etc/gitlab'
        - '/srv/gitlab/logs:/var/log/gitlab'
        - '/srv/gitlab/data:/var/opt/gitlab'
  1. 確保在 docker-compose.yml 文件目錄下運行 docker-compose up -d 去構建 gitlab 容器。
  • 運行在自定義的 HTTPSSH 端口:
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:
        - '/srv/gitlab/config:/etc/gitlab'
        - '/srv/gitlab/logs:/var/log/gitlab'
        - '/srv/gitlab/data:/var/opt/gitlab'

--publish 8929:8929 --publish 2224:22 效果同樣。

經過 docker-compose 升級 Gitlab

如果經過 docker-compose 安裝Gitlab,只需運行 docker-compose pulldocker-compose up -d 便可下載新版本並升級您的GitLab實例。

問題處理

500 Internal Error

更新Docker鏡像時,可能會遇到全部路徑都顯示臭名昭著的500錯誤頁。若是發生這種狀況,請嘗試運行sudo docker restart gitlab來從新啓動容器並解決問題。

Permission 問題

從較早的GitLab Docker鏡像進行更新時,可能會遇到權限問題。發生這種狀況的緣由是之前的鏡像中的用戶沒有正確保留。該腳本可修復全部文件的權限。

要修復您的容器,只需執行更新權限,而後重啓容器:

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 Home Edition或Windows < 10),那麼另外一種解決方案是爲Docker Toolbox的boot2docker設置NFS掛載而不是VirtualBox共享。

Linux ACL問題

若是您在Docker主機上使用文件ACL,則docker組須要對卷具備徹底訪問權限才能使GitLab正常工做。

$ getfacl /srv/gitlab
# file: /srv/gitlab
# 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 /srv/gitlab

參考

文中內容若有錯誤或紕漏,請指正!有興趣的小夥伴能夠一塊兒相互討論交流學習!
相關文章
相關標籤/搜索