這篇是把自己在阿里雲伺服器上,配合寶塔面板部署 SVN 服務時走過的流程整理成一份可重複操作的筆記。內容包含安裝、建立版本庫、配置帳號權限、設定連線埠與白名單,以及最後的連線測試。

參考資料

1. 安裝 SVN 服務

先在寶塔終端進入伺服器,安裝 subversion

yum -y install subversion

2. 建立版本庫

假設我要把版本庫建在 /www/svn/myproj

svnadmin create /www/svn/myproj

建立完成後,版本庫目錄下會看到標準的 SVN 結構。

3. 配置帳號與權限

進入版本庫下的 conf 目錄,主要會調整三個檔案:

  • passwd
  • authz
  • svnserve.conf

passwd:建立登入帳號

[users] 區塊下直接新增使用者,例如:

[users]
YJSP = 114514

格式就是:

使用者名稱 = 密碼

authz:配置讀寫權限

這個檔案用來定義不同使用者對版本庫路徑的權限:

[/]
# 使用者 = 權限(r = read、w = write)
YJSP = rw
* =

這裡 * = 代表匿名使用者不給任何權限。

svnserve.conf:指定認證與授權來源

這個檔案要把幾個關鍵設定取消註解並改好:

  • anon-access = read:匿名使用者只讀
  • auth-access = write:已授權使用者可寫
  • password-db = passwd:帳號設定檔
  • authz-db = authz:權限設定檔
  • realm = /www/svn/myproj:這個版本庫對外顯示的識別範圍

4. 開放連線埠

SVN 預設使用 3690,但實務上常會改成自訂埠。除了在寶塔開放埠之外,也要同步在阿里雲控制台放行。

寶塔防火牆

位置大致是:

安全 -> 系統防火牆 -> 添加端口規則

建議確認以下欄位:

  • 協議:TCP
  • 端口:預設 3690,或你的自訂值
  • 來源:預設所有 IP,若要限制來源可改成白名單
  • 策略:放行
  • 方向:入站

阿里雲控制台防火牆

雲端主機側也要開放相同連線埠,設定方向與寶塔保持一致即可。

如果只想讓固定 IP 連線

可以把來源 IP 收斂成白名單,而不是直接開給所有人。

在寶塔和阿里雲兩邊,都把規則的來源位址改成指定 IP:

如果你的網路出口不是固定 IP,這種做法會讓維護成本變高,部署前最好先確認使用情境。

5. 設定 SVN 服務根路徑

如果要讓 svnserve 明確以某個根路徑提供服務,可以調整全域設定檔:

/etc/sysconfig/svnserve

例如:

# OPTIONS="--daemon --root <SVN 所有版本庫的根目錄> --listen-port=<開放的端口>"

這樣之後對外提供的路徑會更清楚,也方便集中管理多個版本庫。

6. 啟動與檢查服務

完成以上設定後,就可以啟動 SVN 服務。

先停止舊進程:

systemctl stop svnserve

再重新啟動:

systemctl start svnserve

確認服務狀態:

systemctl status svnserve

如果正常啟動,通常會看到類似 Active: active (running) 的狀態。

7. 客戶端連線測試

這裡我用 VisualSVN 做測試。

連線格式如下:

svn://伺服器公網 IP:端口/版本庫名稱

例如:

svn://xxx.xxx.xxx.xxx:3690/myproj

第一次連線時,如果服務端要求登入,就輸入先前在 passwd 裡配置的帳號與密碼。

常見問題

svnserve: E000098: Can't bind server socket: Address already in use

這代表目前指定的埠已經被其他進程占用,先查是哪個進程卡住:

netstat -tunlp | grep 3690

如果看到類似:

tcp  0  0 0.0.0.0:3690  0.0.0.0:*  LISTEN  1234/svnserve

表示埠已經有既存服務在使用。這時候先把舊服務停掉,再重新檢查:

systemctl stop svnserve
netstat -tunlp | grep 3690

如果沒有任何輸出,通常就代表埠已經被釋放,可以重新啟動服務再試一次。

我自己的整理

這次部署真正容易漏掉的,不是 svnadmin create 這種單一命令,而是「版本庫內部設定」、「系統服務設定」和「雲端防火牆規則」三者要同時對齊。

只要其中一層少開、少改或改錯,客戶端看起來就會像是整個服務掛掉。所以後來我會把這類部署流程固定拆成三段檢查:

  • 庫內帳號與權限有沒有配好
  • 服務本身有沒有啟動成功
  • 網路入口有沒有真的放行

照這個順序排查,通常會比反覆重裝快很多。