一直想在群暉中配一個 Gitlab CE 來備份代碼。這篇文章中,我會陳述兩種配置的方案,以及遇到的一些問題。
目前我的代碼差不多全部保存在 Gtlab.com 上,沒有備份,非常不安。這是我做這件事情的緣由。——我並不是擔心我的私有代碼會泄露,我覺得靠 Gitlab 足夠保證它們的安全。所以我一直用着 Gitlab.com。
要備份,我也想過其他選擇。最終選擇 Gitlab CE,主要是為了和 Gitlab.com 上的倉庫能有最好的兼容。像 Gogs 就不能支持 git-lfs,雖然 官方的說法 沒有錯,lfs 並不是 git 標准中的東西,沒必要去實現,但是它真的好用,而且既有倉庫很多都是用了 lfs,自然不好替代。
搭建 Gitlab 需要一台怎樣的 NAS
起初我試圖在我的小 VPS 上強行跑一個 Gitlab 起來——我自然已經看到官方給出的硬件 最低標准,雙核,4G 內存。我那個小 VPS 是單核 512M 內存,但是我還是想試試。最后倒是沒有直接報錯,但是總之是沒有跑起來。
后來我買了台廉價威聯通,深覺自己太過愚蠢,居然是 ARM 平台的,硬件配置相當低,也就只能滿足「讀寫文件」這類最最基本的操作,連全局搜索都跑不動,應用商店里的配套服務根本沒有幾個是能用的。后來這台威聯通被我積灰在了櫃子深處,連開機都不想。因為我不久之后買了一台 Plus 系列的群暉。
群暉(Synology)算是 NAS 中的貴族了,但是服務也好,配套軟件非常成熟,甚至市上還有不少「黑群暉」的存在,和蘋果一樣,又貴又好用。Plus 系列 號稱「專為高性能、數據密集型任務而設計,旨在滿足隨時加密和可擴展性需求」,經歷了前一次威聯通低端型號的慘烈教訓,我現在寧可買貴也不想買一個什么都不能跑的擺設了。
但是標配群暉依然不能滿足 4G 的內存需求(我后來有嘗試跑過,靠 2G 是跑不起來的),所以買機器的時候,我順便讓老板幫我加了根內存條,也不貴,三星條一百多塊錢,用得也挺好。
所以這就是搭建 Gitlab 所需的硬件條件:至少雙核 x86 處理器,4G 以上內存。
群暉多種搭建 Gitlab 方式的選擇
在群暉上跑 Gitlab 基本上就是靠 Docker 了。也有別的曲折的辦法,比如直接編譯源碼來跑,比如裝個虛擬機來跑,沒必要,也肯定更折騰。
然而靠 Docker 依然是有兩種途徑。其一,使用現成的 Gitlab 套件。

套件中心的 GitLab
安裝后,它也會調用 Docker 來執行,並且不需要過多的干預,基本算是「開箱即用」了。

開箱即用的套件
從名字來看,這幾個 Docker 映像應該是針對群暉優化過的。缺點主要是版本比較舊,以及有些地方只能接受預定的配置而不能手動控制,倒也沒有什么大的問題。
第二種方法是我比較推薦的,直接在 Docker 套件中安裝。Gitlab 官方有出 一個說明,詳細介紹了通過 Docker 安裝的步驟和方法。
具體到群暉中,首先安裝 Docker 套件。

Docker 套件
打開 Docker 后選擇「注冊表」,搜索「gitlab」,在結果中選擇第一個 gitlab/gitlab-ce
。

Docker Hub 上的 Gitlab
選擇 latest
版本。

選擇 latest 標簽
下載完成后點擊「映像」,雙擊 gitlab/gitlab-ce:latest
來創建一個容器。

點擊「高級選項」進行配置。「卷」選項卡中,新建一個文件夾,把容器中的 /var/opt/gitlab
映射出來,其他路徑問題不大。

映射文件夾
「端口設置」中,為容器端口 80 指定一個本地端口,另外兩個隨機無妨。這個指定的端口可以填寫到「常規設置」中的桌面快捷方式中。我這里映射了 1080 端口。

其他就沒什么要配置的了,直接點擊啟動即可。
如何遷移 Gitlab.com 的內容到 Gitlab CE 中
無論采用哪種安裝方法,正常情況下,啟動之后 CPU 占用會持續走高,等待數十秒到數分鍾不等,CPU 占用回落后,雙擊桌面上的快捷方式即可進入網頁。
第一次打開網頁會提示設置密碼,這個設置的是 root
賬戶的密碼,設置后記下即可。一般不使用這個賬戶。
此時,可以正常注冊賬戶並使用了。

登錄后,選擇新建一個項目,然后選擇「Import project」,來源選擇 Gitlab.com
。

接着會彈窗提示,要求配置 OAuth 認證。
To enable importing projects from GitLab.com, ask your GitLab administrator to configure OAuth integration
根據彈窗中給出的文檔,回到 Gtlab.com 依次操作就行。新建一個應用,名字隨意,權限開到 api
,「Redirect URI」中的「your-gitlab.example.com」部分換成 Gitlab CE 的實際地址。
如果開啟了群暉的 SSH 服務,那就 SSH 登入群暉,執行:
sudo docker exec -it synology_gitlab bash
在容器的終端中,繼續執行:
vi /etc/gitlab/gitlab.rb
粘貼下面這段文本到合適的位置:
gitlab_rails['omniauth_providers'] = [
{
"name" => "gitlab",
"app_id" => "你的 APP ID",
"app_secret" => "你的 APP SECRET",
"args" => { "scope" => "api" }
}
]
執行一次重新配置來讓設置生效:
gitlab-ctl reconfigure
要是群暉沒有開 SSH 服務,那也沒關系。

跟着圖中的示意分四步打開終端后,命令輸入與前面的一致。
這時候再打開網頁,導入 Gitlab 項目時就會提示授權,同意后就會列出所有在 Gitlab.com
賬戶中的項目了。

選擇所有項目導入,這樣就完成了。不過因為沒有以鏡像的方式導入,所以以后還是需要手動更新。
轉換結果來看,lfs 可以轉換過來,子模塊也沒有任何問題,原始的組織也都一並遷移。
遇到的坑和填坑的經過
問:配置完之后,打開網頁出現「502 Whoops, GitLab is taking too much time to respond.」是怎么回事?
答:剛啟動時,出現這個網頁表明系統還沒有准備好,多等等就行了。

問:剛一進去就提示重設密碼,也不提示用戶名,這個密碼是做什么用的?
答:這是 root 賬戶的密碼。
問:開啟容器后總是很快就自動停止,為什么?
答:這是由於文件系統權限不一致引起的,映射文件夾只留 data 而不加入 config 和 log 即可。
問:套件版 Gitlab 的 gitlab.rb
配置文件在哪里?
答:不知道,找不到。(
問:網頁版終端怎么粘貼命令?
答:用鼠標,右鍵粘貼。
問:這樣搭建的 Gitlab 可以在互聯網上訪問嗎?
答:取決於 NAS 有沒有公網 IP,如果走 Quickconnect 是不行的。但是可以嘗試一下內網穿透。