GitLab是由GitLab Inc.開發,使用MIT授權條款的基於網路的Git倉庫管理工具,且具有 Wiki 和 Issue 跟蹤功能。 GitLab 由烏克蘭程式設計師 Dmitriy Zaporozhets 和 Valery Sizov 開發,它由 Ruby 寫成。後來,一些部分用 Go 語言重寫。 (摘錄自維基百科)自從 GitHub 被微軟收購後引爆逃亡潮,開發者紛紛逃向 GitLab 程式碼平台,因此 GitLab 迅速竄紅,成為 Git 倉儲管理工具新一代的代表。
GitLab 官方已經釋出 GitLab Docker Image,利用 Docker 可以節省許多安裝設定環境的繁瑣步驟,也方便未來管理與維護。有關 Docker 的介紹與安裝步驟,請參考另一篇文章「在 Ubuntu 18.04 上安裝 Docker 與 Docker Compose」。
網路上已經有 GitLab 釋出的官方 Docker Image 安裝文件,也可以找到很多相關的文章,為什麼還要這麼雞婆寫這一篇文章呢?如果按照官方版的安裝步驟,或者是網路上的一些文章,其實多多少少都會遇到一些問題要解決。以下的安裝設定步驟是在 Ubuntu 18.04.1 Server 下測試成功。
1. 建立 docker-compose.yml 文件
vi docker-compose.yml
(底下為檔案內容)
version: '3'
services:
gitlab:
hostname: GitLab
restart: always
ports:
- "80:80"
- "22:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
image:
gitlab/gitlab-ee:latest
volumes:
gitlab_config:
gitlab_logs:
gitlab_data:
2. 啟動 GitLab Server Docker
請在 docker-compose.yml 目錄下執行 up 指令,若是第一次啟動,系統會自動搜尋 Docker Hub 的 gitlab/gitlab-ee Image,並從網路上下載至您的主機:
docker-compose up -d
Docker Image 下載完成後會自動啟動,您可以用 images 指令確認 Image 已經下載至您的主機,儲存庫(Repository) 會顯示 GitLab 的 Image 名稱:
docker-compose images
再用 ps 指令確認 GitLab Docker 已經啟動,Name 就是指容器 (Container)的名稱:wizigo_gitlab_x_xxxxxxxxxxxx。其中 wizigo 是我登入的使用者名稱。
docker-compose ps
1. 修改 GitLab 設定檔 gitlab.rb
現在重點來了!Gitlab 預設值和您的環境一定有些不同,因此必須修改設定才能正常運作。修改設定檔有兩種方式,一種是進入 GitLab 容器(Container)去修改 “/etc/gitlab/gitlab.rb”:
(查看 GitLab Container ID)
docker ps
(進入 GitLab 容器)
docker exec -it <Container ID> bash
(進入容器後先安裝 vi)
apt-get update
apt-get install vim
(修改 GitLab 設定檔 gitlab.rb)
vi /etc/gitlab/gitlab.rb
另一種方法是直接修改此路徑對應到主機的 volumes。volumes 會將容器裡面的目錄連結到容器外部主機的目錄,使用 docker 的 volume list 指令可以看到目前系統產生的 volumes 有哪些,以我的主機為例:
docker volume list
上面紅色圈選的地方就是 docker-compose.yml 裡面設定的 GitLab volumes:
...
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
volumes:
gitlab_config:
gitlab_logs:
gitlab_data:
不知道各位有沒有發現,這裡的 volumes 目錄設定和官網範例不太一樣,官網的目錄是 mapping 到主機的絕對路徑:
– /srv/gitlab/data:/var/opt/gitlab
– /srv/gitlab/logs:/var/log/gitlab
– /srv/gitlab/config:/etc/gitlab
如果依照官網範例設定的話,就會出現 volumes 目錄裡面沒有檔案,或是沒有權限讀寫目錄等奇奇怪怪的問題,一勞永逸的方法就是只設定目錄名稱,由系統自行建立 volumes 目錄。docker compose 會將這些設定的 volumes 前面加上登入的使用者名稱,例如我登入的名稱是 wizigo,所以實際產生的 volumes 目錄會是這個樣子:wizigo_<您設定的目錄名稱>,目錄是位在 Ubuntu 路徑 :/var/lib/docker/volumes/,我們可以使用管理者權限去編輯設定檔 gitlab.rb。要特別注意的是,volumes 目錄後面會自動產生 “_data” 目錄,裡面才是放置檔案的真正位置。:
sudo vi /var/lib/docker/volumes/wizigo_gitlab_config/_data/gitlab.rb
接下來是 gitlab.rb 要修改的內容。
external_url :
設定 GitLab Server 的網址,可以填寫 Domain Name,也可以設定 IP 位置。重點是後面的 port number,這裡假設您要使用 8088 當作 GitLab Server,一般人以為 Docker 裡面的 port number 使用預設值 80 就可以了,在 docker-compose.yml 裡面的 ports 設定 mapping 到 8088 即可:8088:80。如果按照官方範例如此設定的話,之後使用者到 GitLab Server 註冊時收到電子郵件驗證信就會出問題了,因為郵件裡面的驗證連結會連結到 port 80 的網址,可是實際上 GitLab Server 是跑在 8088 上,因此就會出現驗證連結網址錯誤的情況。所以如果外部要使用 port 8088 的話,Docker 內部的 port number 設定也要一起改成 8088 才是正確的設定。
gitlab_rails[‘gitlab_email_from’]:
設定 GitLab Server 送信時使用的電子郵件,如果您的郵件是使用 G Suite 套件的話,不需要多花一筆錢申請一個帳號給 GitLab 使用,只需要在使用的 G Suite 帳號中設定一個電子郵件別名即可,另外也需要將登入的電子郵件帳號設定成「允許使用低安全性的應用程式存取」才不會有問題。設定方法請參考之前的文章「G Suite 安全性與別名設定」。下面的 SMTP 的設定我是以 GMail 為範例。
gitlab_rails[‘gitlab_email_from’]:
設定 SMTP 登入的電子郵件帳號,這裡設定的是真正登入使用的帳號,不可使用別名。
gitlab_rails[‘smtp_password’]:
SMTP 登入電子郵件密碼。
相關設定請參考下面的範例:
...
external_url "http://192.168.0.100:8088/"
...
gitlab_rails['gitlab_email_from'] = 'gitlab@wizigo.tw'
...
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "wizigo@wizigo.tw"
gitlab_rails['smtp_password'] = "xxxxxx"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
...
gitlab_rails['smtp_openssl_verify_mode'] = 'peer' # Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert', see http://api.rubyonrails.org/classes/ActionMailer/Base.html
...
設定檔 gitlab.rb 儲存之後,接下來也要修改 docker-compose.yml 的 ports:
vi docker-compose.yml
(底下為檔案內容)
version: '3'
services:
gitlab:
hostname: GitLab
restart: always
ports:
- "8088:8088"
- "8089:22"
volumes:
- gitlab_config:/etc/gitlab
- gitlab_logs:/var/log/gitlab
- gitlab_data:/var/opt/gitlab
image:
gitlab/gitlab-ee:latest
volumes:
gitlab_config:
gitlab_logs:
gitlab_data:
docker-compose.yml 儲存之後,使用 docker compose 的 stop & up 指令重新啟動 Docker 即可:
docker-compose stop
docker-compose up -d
這時候使用瀏覽器連線到 GitLab Server (例如:http://192.168.0.100:8088)即可成功連線。