Apache2 Subversion Server 與 WebSVN 安裝

雖然近年 Git 非常火紅,但我個人開發還是喜歡中央集權式的 Subversion (SVN)擁有一台私人的 SVN Server 對於開發非常方便,尤其香港的 Client 最喜歡把 Project 左改右改,最後又改回頭。

Apache2 只需要一個簡單的插件 libapache2-svn 就能提供 SVN Repository Server 的功能,
再安裝 WebSVN 更可做到用瀏覽器查看和下載歷史檔案,非常好用。

安裝環境: Ubuntu 12.04 64bit,已安裝 PHP 5.3。

1. 安裝 mod-svn

apt-get install libapache2-svn

先啟用 authz_svn 備用

a2enmod authz_svn

2. 安裝 subversion (如果 Server 未安裝)

apt-get install subversion

3. 設定 SVN Repository

建立 SVN 目錄

mkdir /var/www/svn

切換為 www-data 並建立空的 Repository

chown www-data:www-data /var/www/svn
su www-data
svnadmin create /var/www/svn/test-project
exit

4. 設定 Apache 設定 Repository位置

<VirtualHost *:80>

	ServerAdmin tiger@tiger-workshop.com
	DocumentRoot /var/www/svn.tiger-workshop.com
	ServerName svn.tiger-workshop.com

	<Location /repos>
		DAV svn
		SVNParentPath /var/www/svn
		AuthzSVNAccessFile "/var/www/login/svn-acl-conf"

		AuthType Basic
		AuthName "Tiger-Workshop SVN"
		AuthUserFile "/var/www/login/svn-auth-conf"
		Require valid-user
	</Location>
</VirtualHost>

我選擇使用獨立的 Sub-domain 作 SVN 相關用途。
http://svn.tiger-workshop.com 之後會作為 WebSVN 之用,
http://svn.tiger-workshop.com/repos/ 作 SVN Repository。

5. 設定 SVN 登入權限

由於是私人伺服器,所有操作都需要登入,建立上一步指定的 AuthUserFile

htpasswd2 -c /var/www/login/svn-auth-conf tiger

為了能進一步控制個別用戶能存取的 Repository,另外設定 ACL:

vim /var/www/login/svn-acl-conf

svn-acl-conf 內容:

[/]
tiger = rw

[misc:/]
lion = r

意思是 tiger 擁有所有 Repository 的讀寫權限,而 lion 只有 misc 的唯讀權限。

5. 安裝及設定 WebSVN

http://www.websvn.info/ 下載 WebSVN 最新版本並解壓到 /var/www/svn.tiger-workshop.com

cd ~
wget http://websvn.tigris.org/files/documents/1380/49056/websvn-2.3.3.tar.gz
tar -zxv -f websvn-2.3.3.tar.gz
mv websvn-2.3.3/* /var/www/svn.tiger-workshop.com/

設定 WebSVN

cd /var/www/svn.tiger-workshop.com/
cp include/distconfig.php include/config.php
vim include/config.php

設定使用本地的 SVN 目錄及 ACL 設定檔:

$config->parentPath('/var/www/svn/');
$config->useAuthenticationFile('/var/www/login/svn-acl-conf');

Restart Apache 後完成!

其他 WebSVN 的設定例如 allowDownload、setMinDownloadLevel、setIgnoreWhitespacesInDiff 視乎需要開啟。

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.