在群暉Synology NAS中搭建Git服務器,並使用Hyper Backup定時備份

在群暉Synology NAS中搭建Git服務器, 開啟免密驗證, 並使用Hyper Backup定時備份數據

搭建Git服務器

在套件中心安裝 Git Server

安裝

創建一個用戶

創建一個新用戶,用來保存git repo 數據, 假設賬戶名為git
控制面板 -> 用戶賬戶 -> 新增
創建用戶

啟用 用戶家服務

進入 控制面板 -> 用戶賬戶 -> 高級 中啟用 “用戶家服務”。 啟用 用戶家服務

啟用 SSH 功能

Git Server需要通過 SSH 進行訪問, 進入 控制面板 -> 終端及 SNMP 中勾選 “啟用 SSH 功能”。 SSH 功能

通過 SSH 連接到 Synology NAS

使用SSH工具(Windows Terminal, Putty, Xshell等) 連接 Synology NAS
賬號和密碼為創建用戶時輸入的內容,按提示輸入用戶名,密碼通過後即可連接成功。

通過證書設置免密登錄

用戶的主目錄為: /var/services/homes/git/ 在主目錄下 創建 .ssh目錄, 在.ssh目錄下創建 authorized_keys 文件, 密鑰保存在這個文件中 完成後目錄結構如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
root@DiskStation:/var/services/homes/git# ll
total 0
drwxr-xr-x  1 git  users 726 Dec  7 21:21 .
drwx--x--x+ 1 root root   58 Dec  7 21:17 ..
drwx------  1 git  users  30 Dec  6 12:37 .ssh

root@DiskStation:/var/services/homes/git# cd .ssh/
root@DiskStation:/var/services/homes/git/.ssh# ll
total 4
drwx------ 1 git users   30 Dec  6 12:37 .
drwxr-xr-x 1 git users  726 Dec  7 21:21 ..
-rw-r--r-- 1 git users 2408 Dec  6 11:35 authorized_keys

root@DiskStation:/var/services/homes/git/.ssh# more authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLZE20i2x2ms4BzrLwOsusHa/Xe2x4bA4fhJvlcTF9yVGJZEaHKHOPOGbxAxGtP0igqjIp95yRPwBX+YYWL9oG26LSBVZ8fuDbcj/TVVIP5rsG+5W4UrZxZHrPd91LQRCfIWPr7XfjTCZr9amaan7GCw2Zf/1pSiYmhfI4yWwteB/29TOavWNf1+ArWm/dFtfA
Nea6/BTJFRjrJuhh91VR1exOxEFK7gVRmg6KsmKzGNhSPkzlhRXLyQz7ttyaCY6VIH6NyHWjMnd8Io/tfpv7mL89/XfdnKgmkhzeUWUoAgvDBGnZpaFRV9PnSZDvV5BPcBx7WG9+4yPrAqj8x knightli@ubuntu

修改文件和目錄的權限信息

1
2
chmod 700 .ssh
chmod 644 .ssh/authorized_keys 

修改sshd的配置文件 /etc/ssh/sshd_config, 注意要有以下三行, 如果用#註釋的,要打開註釋, 沒有對應的行,則需要添加。

1
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

設置成功後,可以不需要ssh密碼直接SSH登錄Synology NAS, 這步是為了以後使用git命令時免於每次都輸入密碼。

開始使用Git Server

在服務器端創建項目倉庫

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
git@DiskStation:~$ mkdir my_project
git@DiskStation:~$ cd my_project/
git@DiskStation:~/my_project$ git init --bare
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:   git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:   git branch -m <name>
Initialized empty Git repository in /volume1/homes/git/my_project/

client端操作

1
2
3
C:\Users\knightli>git clone [email protected]:my_project
Cloning into 'my_project'...
warning: You appear to have cloned an empty repository.

命令行中clone後的git是服務器創建的賬號名稱
my_project是項目的倉庫名稱

完成clone後,後續可以正常操作。 push 完成後數據保存在Synology NAS 的 git用戶主目錄下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
git@DiskStation:~/my_project$ ll
total 12
drwxr-xr-x 1 git users  98 Dec  7 22:23 .
drwxr-xr-x 1 git users 746 Dec  7 22:23 ..
drwxr-xr-x 1 git users   0 Dec  7 22:23 branches
-rw-r--r-- 1 git users  66 Dec  7 22:23 config
-rw-r--r-- 1 git users  73 Dec  7 22:23 description
-rw-r--r-- 1 git users  23 Dec  7 22:23 HEAD
drwxr-xr-x 1 git users 506 Dec  7 22:23 hooks
drwxr-xr-x 1 git users  14 Dec  7 22:23 info
drwxr-xr-x 1 git users  16 Dec  7 22:23 objects
drwxr-xr-x 1 git users  18 Dec  7 22:23 refs

Hyper Backup定時備份

git repo數據都位於/var/services/homes/git/下,只需備份此目錄就可以

安裝 Hyper Backup

安裝

配置 Hyper Backup

配置1

Hyper Backup 備份到 Ubuntu rsync 的完整設定

另一臺裝置只是 Ubuntu 伺服器、已經安裝了 rsync,並不等於它可以直接作為 Hyper Backup 的目標端。Hyper Backup 使用普通 rsync 協議時,需要連線到 Ubuntu 上執行的 rsync daemon;daemon 還必須定義一個可寫的模組。

最容易填錯的一項是“共享資料夾”:它不是 Ubuntu 的絕對路徑,而是 /etc/rsyncd.conf 中方括號定義的模組名。本文以把備份寫入 Ubuntu 的 /srv/hyperbackup 為例,說明從服務端配置到群暉驗證的完整流程。

先明確 Hyper Backup 的目標型別

在 Hyper Backup 新建資料備份任務時,目標端不是群暉,就不要選擇“Synology rsync 伺服器”,應選擇:

1
rsync 相容伺服器

本文采用 rsync daemon 方式,預設 TCP 埠為 873。它適合可信區域網;如果要跨公網傳輸,優先用 VPN、Tailscale 或 SSH 加密方案,不要把 873 直接暴露到網際網路。

Ubuntu 端準備目錄和執行賬戶

登入 Ubuntu 後安裝 rsync,建立一個不允許登入、只用於寫入備份目錄的系統賬戶:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo apt update
sudo apt install -y rsync

sudo useradd --system \
  --home /nonexistent \
  --shell /usr/sbin/nologin \
  rsyncbackup

sudo mkdir -p /srv/hyperbackup
sudo chown -R rsyncbackup:rsyncbackup /srv/hyperbackup
sudo chmod 750 /srv/hyperbackup

這裡的 rsyncbackup 是 rsync daemon 在伺服器本地寫檔案時使用的賬戶。不要給它互動式 Shell,也不要把備份目錄設成所有人可寫。

建立 rsync daemon 模組

編輯配置檔案:

1
sudo nano /etc/rsyncd.conf

寫入以下內容;網段、使用者名稱和路徑應按你的環境替換:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
uid = rsyncbackup
gid = rsyncbackup
use chroot = no
max connections = 4
timeout = 600
log file = /var/log/rsyncd.log
pid file = /run/rsyncd.pid

[hyperbackup]
    path = /srv/hyperbackup
    comment = Synology Hyper Backup
    read only = no
    list = yes
    auth users = knightli
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.8.0/24
    hosts deny = *

[hyperbackup] 就是一個 rsync 模組。它把客戶端看到的 hyperbackup 對映到伺服器實際目錄 /srv/hyperbackup

配置項 作用
[hyperbackup] Hyper Backup 中要選擇的“共享資料夾”名稱
path Ubuntu 上實際儲存備份資料的位置
read only = no 允許 Hyper Backup 寫入
auth users rsync 協議認證使用者名稱,不是 Ubuntu 登入使用者
hosts allow 允許訪問服務的網段;可進一步收窄為群暉單個 IP

若群暉固定為 192.168.8.100,可以把 hosts allow 改為該地址,減少區域網內其他裝置探測服務的機會。

設定 rsync 協議密碼

rsync daemon 的認證賬戶和 Linux 登入賬戶可以完全無關。建立密碼檔案:

1
sudo nano /etc/rsyncd.secrets

使用者名稱:密碼 一行一個賬戶寫入,例如:

1
knightli:Abcd123456789

儲存後限制讀取許可權:

1
2
sudo chmod 600 /etc/rsyncd.secrets
sudo chown root:root /etc/rsyncd.secrets

不要把這份檔案提交到 Git,也不要複用 Ubuntu 的登入密碼。Hyper Backup 頁面中的“使用者賬號”和“密碼”應填寫這裡定義的值。

啟動並確認 rsync daemon

不同 Ubuntu 版本或安裝方式提供的 systemd 單元可能略有差異,先嚐試由軟體包提供的服務啟動:

1
2
3
sudo systemctl enable --now rsync
sudo systemctl restart rsync
sudo systemctl status rsync

確認埠監聽:

1
sudo ss -lntp | grep ':873'

正常情況下會看到類似結果:

1
LISTEN 0 5 0.0.0.0:873

若提示 rsync.service not found,先檢查系統中實際可用的 unit:

1
systemctl list-unit-files | grep -i rsync

也可以用下面的命令臨時驗證配置是否能啟動:

1
sudo rsync --daemon --config=/etc/rsyncd.conf

臨時啟動在重啟後不會自動恢復;確認手動方式可用後,應根據 list-unit-files 的結果補齊對應服務或 socket 的開機啟動配置,而不是長期依賴手工執行。

防火牆只放行群暉

如果 Ubuntu 啟用了 UFW,假設群暉 IP 是 192.168.8.100,只允許它訪問 TCP 873:

1
2
sudo ufw allow from 192.168.8.100 to any port 873 proto tcp
sudo ufw status numbered

同時檢查雲伺服器安全組、上游路由器或 VLAN ACL。ss 顯示監聽而群暉仍連不上時,問題通常就在這些網路策略之一。

先在命令列驗證模組和寫入

不要先在 Hyper Backup 裡反覆試錯。先從另一臺 Linux 電腦或群暉 SSH 終端列出模組:

1
rsync rsync://[email protected]/

輸入 /etc/rsyncd.secrets 中設定的密碼後,應能看到:

1
hyperbackup    Synology Hyper Backup

再試一次小檔案寫入:

1
2
3
4
echo test > /tmp/rsync-test.txt

rsync -av /tmp/rsync-test.txt \
  rsync://[email protected]/hyperbackup/

在 Ubuntu 上確認:

1
ls -l /srv/hyperbackup/

能看到 rsync-test.txt,說明賬號、密碼、模組、目錄許可權和網路路徑都已打通。測試完成後可刪除該檔案。

Hyper Backup 頁面如何填寫

回到群暉 Hyper Backup 的 rsync 目標頁,按下面填寫。

頁面欄位 示例值 說明
伺服器型別 rsync 相容伺服器 目標是普通 Ubuntu,不是另一臺群暉
伺服器 IP 192.168.8.205 Ubuntu 的區域網地址
傳輸加密 區域網內可先關閉 關閉後走普通 rsync/TCP 873;跨公網不要這樣用
873 rsync daemon 預設埠
使用者賬號 knightli 對應 auth users
密碼 rsync 密碼檔案中的密碼 不是 Ubuntu 登入密碼
共享資料夾 hyperbackup 對應 [hyperbackup],不是絕對路徑
目錄 synology-nas 模組目錄下新建的子目錄

若目錄填寫 synology-nas,最終資料會寫入:

1
/srv/hyperbackup/synology-nas/

不要把“共享資料夾”填寫為 /srv/hyperbackup。客戶端透過 rsync 協議只能看到模組名,實際路徑由伺服器端配置決定。

常見問題排查

Hyper Backup 看不到共享資料夾

先執行模組列舉命令。若沒有 hyperbackup

  1. 檢查 /etc/rsyncd.conf 是否真的有 [hyperbackup]
  2. 檢查服務是否已重啟;
  3. 檢查 list = yeshosts allow 是否把群暉擋住;
  4. 檢視 /var/log/rsyncd.log 獲取認證或路徑錯誤。

能連上但提示認證失敗

確認 auth users/etc/rsyncd.secrets 左側使用者名稱完全一致;密碼檔案應為 使用者名稱:密碼,且許可權為 600。特別注意 Hyper Backup 要填的是 rsync 密碼,不是 SSH 或 Ubuntu 登入密碼。

認證成功但無法寫入

檢查模組中的 read only = no,再檢查本地目錄許可權:

1
2
sudo namei -l /srv/hyperbackup
sudo ls -ld /srv/hyperbackup

rsyncbackup 必須對該路徑擁有穿越和寫入許可權。若日誌顯示磁碟滿、只讀掛載或檔案系統錯誤,應先處理儲存問題,避免備份任務反覆失敗。

是否應該開啟傳輸加密

普通 rsync daemon 的認證並不等同於完整的傳輸加密。可信區域網可以按風險評估暫時關閉;經過網際網路、公共 Wi-Fi 或不可信網段時,使用 VPN、Tailscale,或改用 Hyper Backup 支援的 SSH 加密傳輸。無論採用哪種傳輸方式,備份任務本身仍應啟用版本保留和定期恢復演練。