Cyber Coding Course

師其意,不泥其跡

關於gitlab的docker設定分享

前言

我朋友想研究gitlab的操作,我說用docker image不用十分鐘就裝起來了,
我家的Synology Nas上也有gitlab套件可以直接安裝。

結果,不是安裝失敗,就是修復中,或是已啟動了不能用。@@
還被朋友嗆...


即然Synalogy Nas上的gitlab老是安裝失敗,山不轉路轉,
我就用官方的Docker image來跑私有倉庫吧

官方文件連結:
https://docs.gitlab.com/omnibus/docker/
 

步驟

一、透過ssh連線進入我的Synlogy Nas。
(前題,您的Synology NAS需設定可以SSH登入,這裡我採公鑰驗證,並且透過ssh-agent記錄密碼了,因此沒打密碼。)

(題外話,我能用cc登入,是在~/.ssh/config中有類似的設定 ,192.168.100.1是我的Nas的IP位置)
下圖中,Include方式有些舊版的Linux並不支援哦,貼出來供大家參考!


二、建立掛載所需的資料夾。
mkdir -p /volume1/docker/gitlab/config
mkdir -p /volume1/docker/gitlab/logs
mkdir -p /volume1/docker/gitlab/data

三、執行docker run指令,創建並執行容器。
(前題,您的Synology NAS需支援Docker安裝與執行,您安裝好了)
docker run --detach \
--hostname git.ccc.tc \
--publish 127.0.0.1:3080:80 --publish 3022:22 \
--name gitlab \
--restart always \
--volume /volume1/docker/gitlab/config:/etc/gitlab \
--volume /volume1/docker/gitlab/logs:/var/log/gitlab \
--volume /volume1/docker/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest


在上方的例子中,我將web的port開在host的port 3080,並且使用本機的IP位置。

因為Synology有反向代理,可以走HTTPS,因此我不需要將沒加密的HTTP公佈到外面。
我們從Synalogy Nas上的「控制台」=>「應用程式入口」可以進行此設定。
我的規則如下:


如果您的Synalogy Nas也有設定防火牆,記得開啟port 3443。
其實是可以弄另一個子域名,例如: gitlab.ccc.tc,就不需要額外的port 3443了。
不過只是隨便測試,就不這麼講究啦。

啟動與關閉

因為是單純使用docker進行contianer的建立與執行。下次除非我們刪了container,不然啟用及停止只需透過。
docker start gitlab

或是
docker stop gitlab

關於設定

gitlab的設定就會存放在掛載的資料夾,gitlab.rb檔


在上方的docker指令中,我們使用的是標準的port 3080:80,會看到HTTP的連結是HTTP,非下方的HTTPS連結。


在Synology的Nas上,是使用HTTPS為入口的,而Container內是用HTTP,為了讓GitLab顯示正確的HTTPS協定,
在gitlab.rb檔內,我進行設定如下:
external_url 'https://git.ccc.tc:3443'

但是,如果單純上方的設定,會造成nginx啟動失敗,推測是沒設定憑證造成,沒去深究了。
再補上下方設定即可覆寫gitlab的container啟動時,nginx依然採用port 80非上方的external_url。
##! **Override only if you use a reverse proxy**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
# nginx['listen_port'] = nil
nginx['listen_port'] = 80
##! **Override only if your reverse proxy internally communicates over HTTP**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl
nginx['listen_https'] = false


完成設定後,進入gitlab的container內
docker exec -ti gitlab bash


再進行設定檔重載重作: (下方指令,是在gitlab的容器內執行的)
gitlab-ctl reconfigure

補充

我們知道git有多種的傳輸協定,除了http外也有ssh。在docker run時,已指定了port開在3022了。
因此,當我們要採用SSH進行clone並且在非標準的連接埠時,最簡單做法就是新增~/.ssh/config
Host cclab
Hostname git.ccc.tc
User git
Port 3022
這樣,就可以經由ssh加上自訂的host名稱進行clone囉。
git clone cclab:devin/testing.git

這是我朋友邀求建立的測試帳號(ironma/thor),私有倉庫完成囉。
除了他自己外,另外兩個使用者,我問說,誰要當管理者,他說他。


我說,好歹索爾也是個神,所以....私有倉庫搞定囉。
下方即是建立的測試帳號..:D


Docker真是方便好用。D-Laravel也是....:p

作者: Devin Yang