2015年8月11日 星期二

(再度) 如何在 Synology NAS 設置 GIT 伺服器 (新版)

2013 年曾發表兩篇文章, 是多年前的老機器 DS107 的紀錄, 這台機器的 DSM 已經停止更新, 當時他是無法透過 DSM 安裝 GIT 套件, 所以只能手動(ipkg)安裝, 最近購入 DS214 發現新的 DSM 上已經有套件可以直接安裝, 如果你的 DSM 有支援線上安裝 GIT Server 可參考本文...

===================================================

NOTE: 這是我的私人記錄, 不是教學!

環境:

1. Synology DS214Play+ DSM 5.2-5592 版
2. 有實體 IP 11.22.33.44 (此為亂寫)

How to setup a GIT Server on a Synology NAS
-------------------------------------------
 
1. 先啟動 SSH 功能
   DSM-> 控制台 -> 進階模式 -> 終端機 & SNMP -> [v] 啟動 SSH 功能

   P.S. 安全起見建議你自訂連接埠!

2. 安裝 Git Server 套件
   DSM-> 套件中心 -> 收尋 "git" -> 找到 [Git Server] -> 點 [安裝套件]

   P.S. 要等待一下下安裝完成...

3. 啟動 Git Server 套件
   DSM -> 套件中心 -> 已安裝 -> 找到 [Git Server], 點選 -> 點 [動作] -> 啟動

4. 建立 git 庫(repository) 的位置, 假定 "git-repo"
   DSM -> 控制台 -> 共用資料夾 -> [新增] -> 名稱 "git-repo"

   P.S. 以上名稱可以自訂.

5. 建立 git server 使用者, 假定 "git.user", "blabla"...
   DSM -> 控制台 -> 使用者帳號 -> [新增] -> 名稱 "git.user", 密碼 "xxx" ->
   指定群組, 勾 "Users" (*) -> 在 "指派共用資料夾權限" 頁面, 在 "git-repo" 的 "可讀寫"
   打勾

   P.S. (*)可以把全部使用 git server 的使用者, 放在一個專用的群組.
   P.S. 以上名稱可以自訂.

6. 設置 Git Server 使用者
   DSM -> 主選單 -> Git Server -> "git.user" 的 "允許存取" 打勾

7. 建立 git 庫(repository), 假定 "test"

   [方法1] Only for Windows (or Mac?)

      前提:
        1. NAS 能位於 PC 相同的區域網域(**), PC 能連線 NAS 為網路磁碟(或資料夾)

           P.S: (**)實際上我的 NAS 都是放在區(內)網 192.168.0.x, 由 router 映射一個
                外部 ip:port 給 NAS 需要開放的服務, like
                11.22.33.44:1234 -> 192.168.0.x:22 (your SSH port in NAS)

        2. PC 有安裝 TortoiseGit, 或其他 Git clients.

      步驟:
        1. 啟動 NAS 的 Windows 檔案服務
              DSM -> 控制台 -> 檔案服務 -> [Windows 檔案服務] -> 啟動, 注意下面有寫 PC
              檔案總管如何存取...預設為 \\Diskstation

        2. PC -> 檔案總管 -> 選單, 連線網路磁碟機 -> 指定磁碟機代號, 資料夾輸入
           \\Diskstation\git-repo -> 輸入 DSM 的(管理員或 git.user)的登入名字與密碼

           或

           PC -> 檔案總管 -> 頁籤, 電腦 -> 滑鼠在 [網路位置] 上按右鍵選單 -> 新增一個網路
           位置 ->選擇自訂網路位置 -> 輸入 \\RICHSTATION\git-repo -> ...

        3. 如果你已經是 TortoiseGit 的能力者, 剩下就簡單並直覺了...
              a) 在 NAS 上新建 GIT 專案庫:
                 直接打開網路資料夾 git-repo -> 裡面新建一個資料夾 "test" ->
                 滑鼠在 "test" 資料夾上按右鍵選單 -> Git Create repository here... ->
                 勾 'Make It Bare' (***) -> OK.

         P.S: (***)這裡還蠻重要的, 因為是遠端庫, 不在庫目錄上直接工作, 不勾會導致每次本
                地 push 遠端時都發一個警告...

              b) 轉移既有(或備份)的 GIT 專案庫到 NAS:
                 不用多說了把既有的 GIT 專案庫(bared)複製到網路資料夾 git-repo 裡面!

   [方法2] SSH 登入 NAS

      步驟:
        1. PC 執行 SSH client(!), Host Name: 11.22.33.44, Port: 22 (或自訂過)
            P.S. (!) 我是用 PuTTY

        2. Login as: admin
            Password: (NAS 網頁管理頁面(admin)用的密碼)

        NOTE: 這裡登入名字建議不要用 'root', root 登入後若不切換帳號, 可能會導致後面建
                  test 資料夾權限只限 root 用戶可存取, 此時還要用 chmod 修改...
        NOTE: 如果密碼沒錯卻拒絕登入, 可以檢查:
 
                1. ip:port 是否正確, 路由 ip(router):port -> NAS:port 都正確? 
                2. 是否被 router(firewall) 封鎖 IP or port? 
                3. 是否被 NAS 封鎖 IP or port?
                4. NAS 的 SSH 服務已經已啟動?

        3. 接下來操作 shell commands
      Diskstation> cd /volume1/git-repo/
      Diskstation> pwd 

            (確認一下目前目錄為上面嗎)
            /volume1/git-repo
      Diskstation> mkdir test

            (建立新的資料夾擺放 test 專案的 Git 庫)
      Diskstation> ls -l
            (確認一下目錄的權限)
      ...
      drwxrwxrwx  7 admin users  4096 Aug 12 15:26 test
       ^^^^^^^^^          ^^^^^ 

       123456789 
       -> 123:admin 可讀寫執行, 456:users 可寫執行, 789:其他人也可
      NOTE: 權限不對, 會導致 git.user 在本地無法存取 /volume1/git-repo/test, 此時可
                用 chmod 修改, 或直接換用 git.user 身份建立資料夾... 
                參見 如何在 (老) Synology NAS 設置 GIT 伺服器 (2/2)

      Diskstation> cd test
      Diskstation> pwd

            (確認一下目前目錄為上面嗎)
            /volume1/git-repo/test
      Diskstation> git --bare init

            (建立初始 git 空庫)
            Initialized empty Git repository in /volume1/git-repo/test/


8. Clone Git 庫
   以步驟 7 的 test Git 庫, 其遠端的存取位置(URL)為

   ssh://git.user@11.22.33.44:22/volume1/git-repo/test

   NOTE:  1. git.user 為步驟 5 的建立的 git 使用者名字. 請替換為你的名字.
   NOTE:  2. :22 為預設 SSH 連接埠, 或是你有自訂其他的數值...

   操作 Git client 的 clone, 連線後會問 git.user 的密碼, 輸入後, 如正確無誤, 就開始複製
   檔案到本地, Git 的使用方法此處不多說了...

參考: Synology Git 套件說明

Q1: 每次本地操作 remote git 時都會出現 "Could not chdir to home directory /var/services/homes/git.user: No such file or directory"?

A1: 這是因為 DSM 操作新增 git.user 時並沒有建立其家目錄, 這只是警告不妨礙 Git 操作, 如果不愛, 可以用 SSH 登入 NAS, 操作 shell 指令方式, 重新指定 git.user 的家目錄, 參見
如何在 (老) Synology NAS 設置 GIT 伺服器 (2/2) 中, 步驟 15 有說明修改(改家目錄, shell 應該不用改).