Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 搭建 SVN 伺服器完整教學:從安裝、權限控制到自動部署

編輯:Linux 系統常見問題解答

環境與版本

  • OS:CentOS/RHEL 6/7 (yum 套件管理)
  • SVN 版本:1.7+ (subversion 套件)
  • 倉庫路徑:/usr/local/svn/sunny

一、安裝與建立倉庫

# 1. 安裝 subversion
yum install -y subversion

# 2. 建立倉庫目錄與權限
mkdir -p /usr/local/svn
chmod -R 777 /usr/local/svn

# 3. 建立版本倉庫
svnadmin create /usr/local/svn/sunny

二、核心設定檔修改 (/usr/local/svn/sunny/conf/)

1. svnserve.conf - 主設定

[general]
# 匿名存取權限:none/read/write
anon-access = none
# 認證用戶存取權限
auth-access = write
# 密碼資料庫路徑 (相對 conf 目錄)
password-db = passwd
# 授權規則檔
authz-db = authz
# 版本庫名稱 (認證提示顯示)
realm = sunny

注意:每行前不可有空格,# 註解必須整行或行尾,選項前不可留空白。

2. authz - 群組與路徑權限

[groups]
# 定義群組
devteam = alice,bob
ops = charlie

# 根目錄權限
[/]
@devteam = rw
@ops = r
* = 

# 專案特定路徑
[projectA:/]
@devteam = rw
* = r

[projectB:/secret]
@ops = rw
* = 

權限字元:r 讀、w 寫、空 無權限。

3. passwd - 用戶密碼

[users]
alice = password123
bob = password456
charlie = password789

三、啟動與服務管理

多倉庫模式啟動 (推薦)

# 前景測試
svnserve -d -r /usr/local/svn

# 背景常駐 (生產環境建議用 systemd)
# 單倉庫模式:svnserve -d -r /usr/local/svn/sunny

systemd 服務檔 (/etc/systemd/system/svnserve.service)

[Unit]
Description=SVN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/svnserve -d -r /usr/local/svn
ExecStop=/bin/kill $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now svnserve

常用管理指令

# 檢查埠口 (預設 3690)
netstat -tnlp | grep 3690

# 查看進程
ps aux | grep svnserve

# 重新載入設定 (無需重啟,SIGHUP)
kill -HUP $(cat /var/run/svnserve.pid)

四、客戶端操作與自動部署

檢出與更新

# 檢出
svn checkout svn://server-ip/sunny /data/www/project

# 更新
svn up /data/www/project

Post-commit Hook 自動部署

# 編輯 /usr/local/svn/sunny/hooks/post-commit
#!/bin/bash
SVN=/usr/bin/svn
WEBROOT=/data/www/project
export LANG=en_US.UTF-8

$SVN update $WEBROOT --username deploy_user --password 'deploy_pass' --no-auth-cache

# 賦予執行權限
chmod +x /usr/local/svn/sunny/hooks/post-commit

五、進階:多倉庫權限隔離

同一 svnserve -d -r /usr/local/svn 下掛載多個倉庫 (sunny, test, ...),各倉庫獨立 conf/authz、conf/passwd。

# test 倉庫 authz 範例
[groups]
testers = user1,user2

[test:/]
@testers = rw
* = r

六、常見問題排查

  • Can't open file 'format':倉庫路徑錯誤,確認 -r 參數指向倉庫父目錄 (多倉庫) 或倉庫本身 (單倉庫)
  • Authorization failed:檢查 authz 群組定義、passwd 密碼、svnserve.conf 路徑設定
  • Hook 執行失敗:Hook 腳本需可執行權限,環境變數 (PATH, LANG) 需在腳本內明確設定
  • 編碼問題:確保客戶端與伺服器 LANG/LC_CTYPE 一致 (建議 UTF-8)
Copyright © Windows教程網 All Rights Reserved