一直想在群暉中配一個 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 賬戶的密碼,設置后記下即可。一般不使用這個賬戶。

此時,可以正常注冊賬戶並使用了。

注冊 Gitlab 賬戶

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

從 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.」是怎么回事?

答:剛啟動時,出現這個網頁表明系統還沒有准備好,多等等就行了。

錯誤 502 頁面

問:剛一進去就提示重設密碼,也不提示用戶名,這個密碼是做什么用的?

答:這是 root 賬戶的密碼。

問:開啟容器后總是很快就自動停止,為什么?

答:這是由於文件系統權限不一致引起的,映射文件夾只留 data 而不加入 config 和 log 即可。

問:套件版 Gitlab 的 gitlab.rb 配置文件在哪里?

答:不知道,找不到。(

問:網頁版終端怎么粘貼命令?

答:用鼠標,右鍵粘貼。

問:這樣搭建的 Gitlab 可以在互聯網上訪問嗎?

答:取決於 NAS 有沒有公網 IP,如果走 Quickconnect 是不行的。但是可以嘗試一下內網穿透。

 

 


 

 

題圖由 Pexels 在 Pixabay 上發布。