前言
前幾天在 GitLab 社群中看見有人針對在 Windows WSL 上架設 GitLab 提出了一些疑問,覺得這是一個可以動手嘗試的題目,因此也抽了一個空檔快速的實驗了一次,下面就紀錄我這次實驗的過程與操作步驟。
操作步驟
1. 安裝 WSL
WSL 目前可以直接在 Microsoft Store 中安裝,如下圖那個看起來有點喜感的企鵝,就是我們要安裝的 WSL。
2. 確認 WSL 版本
WSL 安裝完畢後,接著我們要進入 PowerShell,在 PowerShell 中輸入 wsl -l -v
來確認一下 WSL 的版本,以及目前是否已經有安裝了 Linux 環境。
如果要進入 PowerShell,可以在 Windows 的搜尋列中輸入 PowerShell
來啟動 PowerShell。
啟動 PowerShell 後,畫面上會出現一個類似下圖的「命令提示字元」視窗,但不同的地方是在 Command Line 的最前面會有 PS
。
如上圖,輸入 wsl -l -v
即可查看 WSL 的版本與目前是否已經安裝了 Linux 環境;如圖片所示,在我的 WSL 中尚未安裝任何 Linux 環境。
3. 在 WSL 中安裝 Ubuntu
首先,我們要確認 WSL 可以安裝哪些 Linux 環境,在 PowerShell 中輸入指令 wsl --list --online
。
如上圖,WSL 會列出多種可安裝的 Linux 環境,像是 Ubuntu 的各種版本、SUSE,甚至還有 Kali Linux。
這裡我就選擇安裝最常見的 Ubuntu,只要輸入指令 wsl --install Ubuntu
即可開始安裝。
在安裝過程中,WSL 會詢問你要設定的使用者名稱與密碼,以上圖為例,我建立了名為 captain
的 User。
同樣如上圖,在新增 User 同時也需要設定密碼,設定完畢後,自動就會登入到 WSL 中的 Ubuntu 環境。
既然 Ubuntu 安裝完畢,就讓我們查看到底 WSL 安裝的是哪一個版本的 Ubuntu,這裡就用笨方法,直接 cat /etc/os-release
來查看版本。
4. 在 WSL 的 Ubuntu 安裝 GitLab EE
確認 Ubuntu 的版本後,接著可以開始安裝 GitLab EE。
說到要在 Linux 環境中安裝 GitLab,最簡單的方法就是按照 GitLab 原廠文件,透過 Omnibus 安裝。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
以下圖為例,在 WSL 提供的 Ubuntu 中執行上述指令都是不成問題的。
下一步按著 GitLab 原廠文件會是設置 EXTERNAL_URL
,並同時安裝 GitLab EE,但這裡我先不這麼做,而是先單純的安裝 GitLab EE。
# 這一步先不跟著原廠文件設置 EXTERNAL_URL
# 只先單純完成服務的安裝,我們後續再來設定 GitLab
sudo apt-get install gitlab-ee
5. 確認 WSL 環境的 IP 資訊
在繼續完成 GitLab 的設定之前,我們要先確認 WSL 環境的 IP 資訊,這裡一樣用比較簡單的方式處理,就是直接執行 ifconfig
。
但目前的環境中,並沒有 ifconfig
指令可以使用,因此我們要先安裝套件 net-tools
。
apt install net-tools
接著執行 ifconfig
,查看 WSL 環境的 IP 資訊。如下圖可以看到 IP 是 172.30.85.228
得到 IP 資訊後,你可以嘗試開啟另一個 PowerShell,並執行 ping
指令來確認它,或者甚至用 ssh 來嘗試連上 WSL 環境。
(如果想要測試用 ssh 連上它,記得要先修改 Ubuntu 環境內 openssh 的 config,並重新啟動 ssh,確保能從外部 ssh 連線。)
6. 設定 GitLab 的 EXTERNAL_URL
修改 /etc/gitlab/gitlab.rb
,找到 EXTERNAL_URL
,並且填入 WSL 環境的 IP 資訊。
接著執行 gitlab-ctl reconfigure
,讓 GitLab 重新讀取設定檔 gitlab.rb
,繼續完成架設服務的所有動作。
等待 reconfigure 執行完畢,我們就能直接在 Windows 的瀏覽器中用 IP 來瀏覽剛架設好的 GitLab 啦。
在上面的步驟中,雖然我是將 EXTERNAL_URL
設定為 WSL 環境的 IP,但其實也可以設定為 localhost
,因為 WSL 會共用 Windows 的網路,所以用 localhost
也是能連上架設在 WSL 內的 GitLab。
7. 讓別台電腦也能連上 WSL 中的 GitLab
如果你希望讓別人也能連上 WSL 中的 GitLab,這裡就必須做一些特別的 Port forwarding,讓 Windows 的網路環境能夠將對外的連線導到 WSL 中的 GitLab。
這裡可以直接參考微軟的原廠文件,Networking in WSL,裡面有詳細的說明。下面直接列出我所執行的指令作為示範:
# 我將 Windows 的 8090 port 導到 WSL 中的 80 port
netsh interface portproxy add v4tov4 listenport=8090 listenaddress=0.0.0.0 connectport=80 connectaddress=172.30.85.228
要特別注意的是,你會需要使用 Administrator 的權限,才能成功執行上述的指令。
在 PowerShell 執行指令 netsh interface dump
,即可查看上述的 Port forwarding 設定。
最後,記得關閉 Windows 防火牆,或開放必要的 Port,這樣別人才能連上喔。
如此一來,就能讓別人透過 http://Windows的IP:8090
來連上 WSL 中的 GitLab 了。如下圖,我就成功透過手機連上我在 WSL 中架設的 GitLab 啦!
小提醒:如果你真的想要在 WSL 架設 GitLab 讓多人使用這座 GitLab,那麼在 Port forwarding 除了要處理 GitLab Web UI 會使用的 80 port 外,還需要處理 GitLab SSH 會使用的 22 port。另外在 EXTERNAL_URL
你也可以考慮是否乾脆設一個內網專用的 Domain Name,讓其他 User 在使用 GitLab 時會比較方便。
感想
雖然我離開 Windows 世界已經有一段時間了,但加減還是會注意 Windows 的一些消息,當初微軟釋出 WSL 時也稍微有關注了一下新聞,但並沒有實際動手玩過,所以藉這次這個機會也算是讓自己實際體驗了一下 WSL。
在這次的體驗過程中,沒遇到什麼痛點與大問題,不得不說微軟推出 WSL 的這一手,實在是厲害,如果你是 Windows 的使用者,又需要快速建立一個 Linux 環境來試用一些 Linux 上的服務,那 WSL 幾乎是沒什麼技術難度的快速方案,大家可以考慮使用看看喔。