GitLab 系統架設簡單紀錄


Git(官網)目前應該算是現在最受歡迎的程式碼版本控管系統之一,而 GitHub(官網)也堪稱全球最大的開放原始碼軟體的倉庫了。

不過,雖然 GitHub 的網頁介面非常地方便,也受到大多數人的青睞,但是他並沒有提供整個系統讓使用者自行架設;而如果要自己架設類似的管理系統的話,目前看來最合適的,似乎就是 GitLab(官網)了。

GitLab 除了和 GitHub 一樣,有提供免費/付費的線上服務外,和 GitHub 不同的是,他是開放原始碼,並且也提供套件,讓使用者可以自己架設 GitLab 的服務。

而這一篇文章,就是 Heresy 自己試著架設 GitLab CE(社群版)的紀錄。


首先,這次的架設其實是因為之前的 Linux-base GitLab Server 整台爛了,所以才有這個需求;而之前的機器,雖然有做了一些備份設定,但是後來卻難以救回…

所以,某種意義上,這次的架設,是希望往「掛了可以確實救回」的方向來走。

而目前的設計架構,大致上是:

  • 以 Windows Server 為本體的作業系統
  • 透過 Hyper-V 來架設虛擬機器、跑 Ubuntu
    • 系統本身一個 VHD、GitLab 的資料放在另一個 VHD
  • 在 Ubuntu 裡面使用 Docker 來跑 Gitlab

會這樣感覺拖了褲子放屁的玩法,主要是:

  • Heresy 對 Linux 不熟,如果硬體或 OS 掛了,要處理會很麻煩…所以底層還是用 Windows 來玩。
    • 會使用 Windows Server 主要是想使用 Windows Server Back 的 Hyper-V online 備份功能。
  • 不直接在 Windows 上跑 Gitlab Docker 的原因,是因為目前這樣運作會有檔案權限的問題,感覺很難解決。(這個試了好幾次了,搞不定…)
    • 使用 Ubuntu 的原因一個是普及,再來就是 Windows 的 Hyper-V 現在的「快速建立」直接可以弄好,很方便。

總之,現在就是暫時決定使用這樣的架構了。理論上,只要最後放 Gitlab Data 的 VHD 還在,應該就都可以相對簡單、不用考慮硬體因素地把服務重建起來了。

至於建置過程,在基礎設施的部分,就是:

  1. 安裝 Windows Server
  2. 安裝 Hyper-V 和 Windows Server Backup 的功能
  3. 建立一個 Hyper-V 的 Ubuntu 虛擬機器
  4. 另外再建立一個 VHD 磁碟機給 Ubuntu VM 用(gitlab.vhdx)

這部分算是比較簡單,而且不一定要這樣玩的部分了。而以 Heresy 來說,Ubuntu 的 VM 其實是用其他 Windows 10 的電腦建立好,再轉移過來的。


接下來,主要還是針對 Ubuntu 裡的設定才是重點了。

這邊由於是想使用 Docker 來簡化安裝,所以需要先安裝 Docker(這邊都要 root 權限):

  1. 使用「apt install docker.io」這個指令來安裝最新版的 Docker
  2. 執行「systemctl enable docker」這個指令,讓 Docker 可以在重開機後自動執行(參考

這樣的設定,其實還有一個問題是只有 root 可以執行 docker,但是由於對 Heresy 沒影響,所以就不管了。

至於要讓 Docker 跑 Gitlab 的話,則可以直接參考官方的文件(連結);基本上就是下面的指令:

docker run -d --restart always --name gitlab -h gitlab.example.com -p 443:443 -p 80:80 -p 22:22 -v /mnt/gitlab_data/config:/etc/gitlab -v /mnt/gitlab_data/logs:/var/log/gitlab -v /mnt/gitlab_data/data:/var/opt/gitlab gitlab/gitlab-ce:latest

上面的指令裡面,「–name」的「gitlab」是指在 docker 系統裡的名字,如果沒有其他需求的話,可以不用改。

「–host」的「gitlab.example.com」是 Gitlab 服務的主機名稱,建議視自己的狀況修改。

而最重要的,是三個「-v」的資料夾對應了~這個指令是把外部(這邊是 Ubuntu VM)的資料夾,直接對應到 docker 內,讓 docker 把資料直接存在外部。

在執行這個指令前,Heresy 這邊是先把第二個 VHD 磁碟(gitlab.vhdx),mount 成「/mnt/gitlab_data」這個路徑(記得要設定開機自動 mount,否則重開機就沒了),然後再進去手動建立「config」、「logs」、「data」這三個資料夾。

之後如果執行上面的指令順利的話,Docker 版的 Gitlab 就會開始初始化,之後就可以開始使用了!(這邊大概要快三分鐘)

而由於 Docker 的容器基本上都是沿用官方的 image、沒做修改,所以其實也不太需要備份,只要備份 gitlab.vhdx 裡的資料就可以了~

如果之後電腦、或是 VM 掛了,只要 gitlab.vhd 的資料還在,就只需要重新跑上面的流程,把 gitlab.vhdx 掛進去,讓 gitlab 去使用舊的資料就可以復活了!


至於這邊 gitlab.vhd 裡的資料該怎麼備份呢?

一個方法,就是繼續在 Ubuntu 裡面,用類似 rsync 的工具來做備份。

而從 VM 外部來備份的部分,由於 Hyper-V 現在大多是採用 VHDX + AVHDX 這種差異磁碟的方法,再加上 VM 基本上又是隨時在跑的,所以似乎也不是很適合直接備份 VHDX 的檔案。

所以在備份上,Heresy 這邊是決定使用 Windows Server 來架設,然後直接使用 Windows Server Backup 來做 VM 的線上備份(官方文件)。

為了保險起見,Heresy 又設定讓他把 Hyper-V 的 VM 備份到兩個地方,一個是另一顆實體硬碟,另一個備份目標,則是再掛另一個獨立的 VHD 檔來當作虛擬磁碟。

這樣的話,如果當這整台 Windows Server 掛掉的時候,至少也還可以從這顆獨立的備份硬碟,或是備份用的 VHD 檔案裡面,撈出整個 VM 的資料來進行還原了。

不過可能要注意的是,要使用 VHD 檔作為虛擬硬碟來備份的話,由於 Windows 沒有設計自動掛載 VHD 的機制,所以需要自己寫一個 diskpart 指令的腳本,讓他在開機時自動執行才行。
這部分可以參考《Auto-Mount a VHD/VHDX File at Startup in Windows 10, 8.1》這類的文章。

這邊基本上就是要建立一個 diskpart 的指令的純文字檔(automount.txt),內容類似下面這樣:

select vdisk file="C:\bcakup_disk.vhdx"
attach vdisk
exit

這邊由於備份用的硬碟不需要磁碟機代號,所以指令可以簡化一點。

然後再透過 Windows 內建的工作排程器,讓系統在開機的時候,自動去執行下面這行指令:

diskpart /s "c:\automount.txt"

這樣應該就可以了。


Heresy 這邊大概就先這樣跑了,之後再看看要不要花時間來玩看看 Gitlab 的 CI/CD 吧~

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.