Windows環境下安裝GitLab的心得(不是安裝教學)

Jyun-ming Huang
8 min readJul 7, 2018

一點意見提供給想要在windows環境下架設GitLab的人參考, 最主要還是想說: 不要浪費時間用docker for windows 架Gitlab,… 如果有老闆叫你"試試看", 可以拿這篇文章跟他說有白痴試過了…

在我繞了好大一圈之後覺得, 直接用Linux電腦架設GitLab應該是最直接也最簡單,… 但如果還是很想用windows架設, 應該也只有用虛擬機灌Ubuntu架設這條路,…

用docker容器架設的方法我也有試過了, 表面上看起來很理想, 也可以安裝成功, 但是有一個很致命的問題,… 讓用docker for windows架gitlab是不可行的方案…

我們部門成立多年一直都沒用過版本控制系統, 剛進公司的時候覺得一個已成立多年的”軟體”部門沒在用版本控制很奇怪, 不過畢業後剛進公司的前一兩年並沒有因此遇過很大問題, 可能是因為以前的專案通常只要一個工程師就可以處理…

最近為了跟上工業4.0的潮流, 部門轉型後做很多新的專案, 這些專案越做越大, 已經開始需要多人共同維護開發了, 其中產生的很多Issue, 如果在一開始就有使用版本控制系統的話, 問題根本不會發生

在公司也待滿三年了, 後來實在有點受不了, 決定想先從部門現有的電腦先架一個server讓大家慢慢熟悉git,…

因為一些原因, 我選擇在windows下架設git server:

  1. 要向沒用過的一群人推坑Git, 加上我又不是主管, 要讓人學新的東西, 一定要讓它看起來沒這麼難(當然我現在知道, Ubuntu架Gitlab超級簡單)
  2. 大部分同事對windows比較熟悉, 很多開發都在windows環境下完成, 不知道如果電腦系統是Ubuntu, 為了做維護工作, 是否需要讓大家多學一堆東西(不過如果只是用Gitlab的管理員權限, 應該也不需要特別去學Linux)…
  3. 尚無資源可以讓我們用掉一台電腦專門當git server, 所以短期內先挪一台windows PC來架,…

介紹一下我做過哪些嘗試:

  1. bonobo git server : 成功架起來, 可是陽春到爆, 不太好用, …
  2. 在windows 10裡面用hyper-v灌ubuntu: 結果VM的網路連不出去,…
  3. Docker for windows 容器安裝gitlab: 成功安裝起來, 可是… 資料沒辦法保存, 或是資料可以保存, 但容器會掛掉…
  4. Docker toolkit 容器安裝gitlab: 跟Docker for windows類似的狀況
  5. 重新嘗試用hyper-v再灌一次, 結果終於成功了(可喜可賀), 可能在裝Docker toolkit的時候關掉過一次, 再重開後很多卡住的地方都回復正常

bonobo git server可能是windows環境下架設git server最簡單的方案, 但是功能跟GitLab比起來,… 我覺得還是值得搞一個VM來架GitLab, 當然還是看電腦夠不夠力, …

當初因為用hyper-v卡關的關係, 加上後來跟以前的同學Robert閒聊後, 才知道有Docker這種神器可以使用, Docker的好處是很輕量, 也有現成的Gitlab image, 安裝很快速, 網路上很多用Docker架設GitLab的教學文, 尤其GitLab官網上有docker的安裝方式教學, 讓你以為可行性很高,…

第一次在docker架設gitlab成功後, push了幾個專案而且跟同事玩得很開心, 但這一切卻在電腦被重開機後, 愉悅的心情也跟著資料一起不見了,… 折騰了一陣子後, 才在gitlab的docker安裝教學頁看到到這個警告…

Warning: We do not officially support running on Docker for Windows. There are known issues with volume permissions, and potentially other unknown issues.

嗯哼…. 所以,… 跳著讀文件會害死人…

(不知道這樣說對不對)docker for windows 的架構簡單來說是在hyper-v內開一個輕量Linux kernel image, 這個Linux image是唯讀read only的, 而container 是在這個image上, 再加一層可讀寫的 layer, 這個container本來就被設計成可快速部屬而且可開多個container, 並可以再部屬測試完直接刪除, 所以如果拿來當作保存資料的工具其實很不理想,….

BUT 也不是不行, Docker提供了 “Volume”指令, 其實是個介於主機與容器間的共享資料夾, 讓你可以把container內的資料寫在電腦的資料夾內, 例如以下的docker安裝gitlab 指令中-volume, 可讓container內的gitlab資料存在指定的路徑內, 以下指令在windows下雖然完成安裝, 但是無法達到保存資料的作用, 我後來才知道下面的volume路徑寫法是專門給Linux的…

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

再經一番survey後, 原來docker for windows的 volume用法不一樣, 首先要先設定shared drives 設定指定要共享的槽位, 輸入系統管理員帳密來允許container可以讀寫你的硬碟, 再來windows的路徑寫法也不一樣, 所以要把安裝指令改成以下的樣子:

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

這個指令確實可以讓gitlab的資料存在自己的D槽, 可是呢,… 啟動container後container會直接報錯誤跳掉重開,

也按Log的錯誤訊息找到相關討論, 有人建議找舊的比較穩定的版本試試看, 但是狀況依舊, …

所以docker for windows這條路 應該是不太可行了….

後來也根據Log內的錯誤紀錄, 我找到gitlab的repo上看到有人在討論相關Issue, 然後看到關鍵字: "Docker toolkit",… Docker toolkit就是舊版本的Docker

Docker toolkit跟Docker for windows最大的差別, 在於 Docker toolkit是用virtual box; 不同於Docker for windows是用hyper-v, 想說使用的虛擬機軟體不同, 不知道會不會有不同的結果, 於是我把hyper -v關掉(因為安裝Docker toolkit會跟hyper-v衝突), 再做了一番嘗試後, 結果還是一樣,…

在windows下想利用docker 安裝gitlab, 應該是不太可能, 頂多就是架來嘗鮮, 玩玩gitlab的功能, 但是如果認真要用來做git server, 其實是不可行的, 或至少我的電腦不行, 或是要盼望未來新版本的docker for windows可以修正這個問題 …

因為在使用 Docker toolkit的過程中, 有遇到別的Issue, 搜尋其解法通常是建議virtual box+docker整個砍掉重裝後, 問題就恢復了,… 因之前有關掉hyper-v一次, 也許重開後就能work, 於是再做了一次在VM上架設的嘗試,…

最後 hyper-v果然可以成功的連到網卡, 並順利完成架設gitlab,… 真是可喜可賀,… 花整個禮拜, 繞了一大圈, 學習了docker跟VM…

故事到這邊, 最後寫個結論:

  1. 想架Gitlab, 還是直接弄一台Ubuntu電腦吧
  2. 非得在windows內架設git server 的話:
    1. bonobo git server , 但沒這麼好用
    2. VM灌Ubuntu, 然後架gitlab
    其實後來把部門的gitlab server搬到公司server上也是用這個方法, 因為OS是windows server 2012
  3. 在windows內, 透過docker架gitlab, 雖然安裝得起來, 也可執行, 但是資料無法保存, docker重開或電腦重開資料會直接消失…
  4. 然後希望不要再有人跟我一樣走冤枉路…. O_Q

--

--