本篇主要為紀錄如何利用Docker協助開發者在私有網域以及工作站快速的架設GitLab服務,在私有環境搭起CI/CD的康莊大道。
由於本次將以Docker為基礎建立GitLab服務,故只要主系統能安裝Docker即可。
關於更多軟硬體建議需求,可以到GitLab-CE版本的GitHub文件
Learn More →
請務必將以下教學中的/path/to/your
前綴更改成讀者自身所設定的位置。
首先,我們可以建立一個具有4核心CPU以及20GB記憶體的Ubuntu-20.04
虛擬機,並安裝Docker以及必要的軟體。(不使用虛擬機的讀者可以跳過這一步驟。)
在本範例中,我們將利用Docker-compose
來建立GitLab服務。為了能夠在主系統也能更改GitLab的相關設定,所以我們必須將主系統的一個資料夾掛載至容器內以便存取容器內部資訊。另外,為了能使GitLab能與Docker服務進行溝通以及調控,我們也將把主系統的/var/run/docker.sock
掛載至容器當中。
因為GitLab網站是基於網頁的服務,故我們也必須將容器的80
以及443
連接埠與主系統的對外連接埠相連接。
以下是一個docker-compose.yml
的範例:
在上方的設定中,我們指定了一個容器用以承載GitLab服務,並將將對應的設定資料掛載至主機的/gitlab
資料夾之下,同時將主機的80/443連接埠與容器的80/443連接埠進行對接。在此我們暫時先不設定HTTPS以及SSL加密。
在上方的設定中,我們直接將主系統的80以及443連接埠與容器對接,這是一個非常不建議的行為。本示範因為在內網以及使用虛擬機的狀況下才做出此設定,請勿在將自架服務部屬至公開網域時使用此設定。
在完成設定後,只需要在docker-compose.yml
所在的資料夾執行以下指令即可建立GitLab服務,並使其在背景執行。
在經過幾分鐘之後,我們就可以透過http://192.168.0.101
來連結到GitLab的網站了。
如果想使用
http://gitlab.me
作為網址連結至GitLab服務,需要至/etc/hosts
檔案增加一行192.168.0.101 gitlab.me
用以讓系統得知192.168.0.101
即為gitlab.me
的Host。
通常在第一次連接時,GitLab頁面會要求更改root密碼並以該密碼進行登入,但偶爾會遇到(編按:每次都遇到)跳過前述環節直接進入輸入帳號密碼的狀況。此時,我們可以透過掛載在主系統的/gitlab/config/initial_root_password
中所紀錄的初始root密碼進行登入。
到此,自架GitLab的服務就大功告成拉!
首先,為了建立自簽SSL證書,必須要先建立一個ssl_certificate.conf
檔案:
並使用openssl
指令搭配對應的參數產生簽名檔案:
此時,資料夾內會產生兩個檔案server.key
以及server.crt
。我們需要將這兩個檔案複製到指定位置來讓GitLab服務能夠讀取到相關設定。
在完成設定後,我們還需要更改我們在docker-compose.yml
中的external_host
參數,讓連線協議從HTTP
改為HTTPS
。
只需要重新執行docker-compose up
指令即可套用設定。
接下來,我們需要讓使用的系統信任此憑證。以Ubuntu為例,我們只需要把剛剛產生的server.crt
下載到系統之中,並將其複製到/usr/local/share/ca-certificates
資料夾之下,並執行sudo update-ca-certificates
指令即可使Ubuntu信任我們簽署的證書。
以先前方式所建立的GitLab,本身即自帶有Container Registry的功能,但需要一些設定才能啟用。所需要的設定如下:
如果要為Container Registry設定與自架GitLab不同的域名,需要在gitlab.rb
的Container Registry settings章節中進行設定:
使用原有域名
若要使用原有域名,只需要將registry_external_url
的網址改為https://<domain name>:5050
即可。以本文為例:
使用原有域名
當使用原有域名時,不需要額外進行設定。
當域名的設定,憑證的設定均完成後,我們可以透過docker-compose restart
重啟服務。在靜待幾分鐘的重啟後,就可以使用Container Registry了。
技術隨筆
DevOps
GitLab
Docker
Docker-compose
HTTPS
HTTP
Self-Host