/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/)[general]
# 匿名存取權限:none/read/write
anon-access = none
# 認證用戶存取權限
auth-access = write
# 密碼資料庫路徑 (相對 conf 目錄)
password-db = passwd
# 授權規則檔
authz-db = authz
# 版本庫名稱 (認證提示顯示)
realm = sunny
注意:每行前不可有空格,# 註解必須整行或行尾,選項前不可留空白。
[groups]
# 定義群組
devteam = alice,bob
ops = charlie
# 根目錄權限
[/]
@devteam = rw
@ops = r
* =
# 專案特定路徑
[projectA:/]
@devteam = rw
* = r
[projectB:/secret]
@ops = rw
* =
權限字元:r 讀、w 寫、空 無權限。
[users]
alice = password123
bob = password456
charlie = password789
# 前景測試
svnserve -d -r /usr/local/svn
# 背景常駐 (生產環境建議用 systemd)
# 單倉庫模式:svnserve -d -r /usr/local/svn/sunny
/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
# 編輯 /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
-r 參數指向倉庫父目錄 (多倉庫) 或倉庫本身 (單倉庫)authz 群組定義、passwd 密碼、svnserve.conf 路徑設定LANG/LC_CTYPE 一致 (建議 UTF-8)