在伺服器上設定SVN
最近買了一個月供5$的美國伺服器,決定把這個伺服器當作SVN伺服器對待
基本服務
拿到VPS後用root連上去
首先是基本的權限分離,創建一個nologin的svn賬戶用以跑svn服務
useradd -r -s /usr/bin/nologin svn安裝subversion包
pacman -S subversion然後給svn服務創建一個資料夾,自己一般習慣把對外服務放入/srv內
mkdir /srv/svn
mkdir /srv/svn/repositories記得把所有權轉給svn賬戶
chown -R svn:svn /srv/svn隨後創建/etc/systemd/system/svnserve.service,把伺服器的自啓任務交給systemd處理
內部寫入如下內容:
[Unit]
Description=Subversion server
After=network.target
[Service]
Type=forking
User=svn
Group=svn
RuntimeDirectory=svnserve
RuntimeDirectoryMode=0755
ExecStart=/usr/bin/svnserve -d -r /srv/svn/repositories --pid-file=/run/svnserve/svnserve.pid
PIDFile=/run/svnserve/svnserve.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target記得留一個pidfile給systemd追,不然會被判死
然後給防火牆開3690端口以供svn對外服務
這裏以ufw爲例子
ufw allow 3690/tcp
ufw reload隨後刷新一下unit,並讓svnserve開機自啓(並現在啓動)
systemctl daemon-reload
systemctl enable --now svnserve按這個流程順下來,svn服務應當能正常啓動
創建及配置專案
/srv/svn的所有權現在被移到了svn賬戶,所以創建專案的時候要用sudo -u svn
cd /srv/svn/repositories
sudo -u svn svnadmin create project(選做)svn專案上習慣要創建三個獨立的區域:trunk,branches,tags
這部分自己習慣上用admin名義
svn mkdir -m "[INIT] Initialize standard layout" --username admin file:///srv/svn/repositories/project/{trunk,branches,tags}打開專案資料夾下的conf/svnserve.conf,編輯並確保以下這些基礎配置被寫入(相關條目一般以註解方式存在,需要取消註解)
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = projectanon-access控制匿名賬戶的權限,這裏設定成read,故可以無賬戶簽出
auth-access控制認證賬戶的權限,這裏設定成write,故可以認證後寫入
下面兩個db默認都是同層級的authz,和passwd,稍後會配置這兩個檔案
realm設定成和專案同樣的名字
然後打開authz,寫入如下內容
注意權限配置是基於組的
[aliases]
[groups]
maintainers = Texas0295
[project:/]
@maintainers = rw
$anonymous = r最後打開passwd,保證以下配置被寫入:
[users]
Texas0295 = <PASSWORD_HERE>至此伺服器的基本配置已經完成了
多個 repo 可以放在 /srv/svn/repositories 下,彼此獨立管理,但創建的時候記得使用sudo -u svn
測試
用戶端可嘗試匿名讀寫
svn co svn://<IP_FOR_YOUR_VPS>/project/trunk和認證提交
svn commit -m "MESSAGE" --username Texas0295如無特殊說明,所有內容採用 CC BY 4.0 協議共享
