1. 引言
在所有的Subversion伺服器配置方式中,基於Apache的是最靈活的。雖然配置起來有一點點複雜,但是它提供了其它方式所沒有的好處:
WebDAV
基於Apache配置的Subversion伺服器使用了被許多其它程式支援的WebDAV協議。舉個例子,你可以在Windows的資源管理員中將這樣的一個版本庫掛載成一個“Webfolder”,然後像檔案系統中的其它檔案夾一樣訪問它。
瀏覽版本庫
你可以在不安裝Subversion用戶端的情況下,使用瀏覽器來瀏覽版本庫中的內容。這將使得更大範圍的使用者可以訪問你的資料。
使用者驗證
你可以使用任何Apache支援的驗證機制,包括SSPI和LDAP。
安全
Apache是非常的穩定和安全,因此你的版本庫自然而然地擁有同樣的安全性。包括SSL加密。
一旦你已經有了Apache2的安裝程式,你可以雙擊它,它將引導你完成整個安裝過程。請確保你輸入正確的伺服器URL(如果你的伺服器沒有DNS 名稱,你可以直接輸入IP地址)。我建議你將Apache安裝成 for all Users,on Port 80,as a service。注意:如果你已經有一個IIS或者其它的程式使用80連接埠,安裝可能會失敗。如果是這樣,你可以到程式目錄下的Apache Group/Apache2/conf目錄中找到檔案httpd.conf,將其中的Listen 80改成一個不用的連接埠,比如Listen 81。然後重新運行這個安裝程式,這次應該不會再有問題了。
現在你可以在你的瀏覽器中鍵入 http://loccalhost,如果呈現了一個已經配置好的網站,那麼你的Apache就安裝成功了。
警告:
如果你將Apache安裝成一個服務,它將以本地system帳戶來運行。為Apache建立一個單獨的使用者來運行它將會更安全一些。
請確保運行Apache的使用者有版本庫的完整存取(右鍵版本庫目錄->屬性->安全)。要不然,使用者將無法提交他們的更改。
就算Apache以本機system來運行,你也要設定它能完全讀寫版本庫目錄。
如果沒有為Apache配置這個許可,使用者將會得到"禁止訪問"的錯誤資訊,在Apache的錯誤記錄檔中表現為錯誤500。
2.2. 安裝Subversion
從http://subversion.tigris.org/ser ... entList?folderID=91 (英文)
或
http://www.iusesvn.com/bbs/forumdisplay.php?fid=7(中文)下載最新版本的Subversion。
運行Subversion安裝程式,如果安裝程式能夠識別你已經安裝了Apache,那麼你的安裝基本上就OK了。如果它不能,那麼你要做一些額外的步驟。
註:如果你先安裝Apache,再安裝Subversion,正常情況下下面的工作(2.3配置前)Subversion安裝程式已經幫你完成了
使用資源管理員,進入Sibversion的安裝目錄(通常為c:/program files/Subversion),找到檔案httpd/mod_dav_svn.so和mod_authz_svn.so,將它們拷貝到Apache 的modules目錄(通常為c:/program files/apache group/apache2/modules)。
從Subversion的安裝目錄拷貝檔案libdb43.dll到Apache的modules目錄。
使用如記事本之類的文字編輯器編輯Apache的設定檔(通常為c:/program files/apache group/apache2/conf/httd.conf),修改以下內容:
去掉以下行的注釋(將開頭的#刪除):
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
在LoadModule節的最後添加以下兩行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
2.3. 配置
現在,你已經安裝了Apache和Subversion,但是Apache還不知道如果處理像TortoiseSVN一樣的Subversion用戶端。 要讓Apache知道哪個URL將被Subversion使用,你要像下面這樣編輯Apache的設定檔(通常在c:/program files/apache group/apache2/conf/httpd.conf):
在設定檔的最後添加下面這些行:
<Location /svn>
SVNParentPath D:/SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:/passwd
#AuthzSVNAccessFile D:/svnaccessfile
Require valid-user
</Location>
這樣配置表示:你所有的版本庫將位於D:/SVN目錄下,要訪問你的版本庫可以使用這樣的URL:http://MyServer/svn/,存取權限將由passwd檔案中的使用者名稱/密碼來限制。
要建立passwd檔案,可以開啟命令列(DOS視窗),將目前的目錄切換到apache2目錄(通常為c:/program files/apache group/apache2),然後打入以下命令以建立檔案:
bin/htpasswd -c passwd <username>
重啟Apache服務。
將你的瀏覽器指向http://MyServer/svn/MyNewRepository(MyNewRepository是你之前建立的Subversion版本庫)。如果一切正常,你將被提示輸入使用者名稱密碼,輸入正確的使用者名稱密碼後你就可以看到版本庫中的內容了。
對你剛剛輸入的apache配置作一些簡短的說明:
<Location /svn>
意味著可以通過像這樣的URL(http://MyServer/svn)來訪問Subversion版本庫
DAV svn
告訴Apache哪個模組負責服務像那樣的URL--在這裡就是Subversion模組
SVNListParentPath on
在Subversion 1.3及更高版本中,這個指標使得Subversion列出由SVNParentPath指定的目錄下所有的版本庫
SVNParentPath D:/SVN
告訴Subversion在目錄D:/SVN下尋找版本庫
AuthType Basic
啟用基本的驗證,比如使用者名稱/密碼對
AuthName "Subversion repositories"
當一個驗證對話方塊彈出時,告訴使用者這個驗證是用來做什麼的
AuthUserFile D:/passwd
指定D:/passwd用為密碼檔案用來驗證使用者的使用者名稱及密碼
AuthzSVNAccessFile D:/svnaccessfile
指定D:/svnaccessfile來限定各個使用者或組在版本庫中目錄的存取權限
Require valid-user
限定使用者只有輸入正確的使用者名稱及密碼後才能訪問這個路徑
----------------------------------------
上面的配置僅僅是一個簡單的樣本。你還可以對Apache進行許許多多的配置。
1如果你想讓所有使用者對版本庫都有讀的許可權而只有特定的使用者才有寫的許可權,你可以將這行
Require valid-user
改為
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
2上面的配置使用了passwd檔案將你所有的版本庫作為一個單元來限定存取權限。如果你想獲得更多的控制,如限定某個使用者可以訪問版本庫中的哪個目錄,可以把下面這行的#去掉:
#AuthzSVNAccessFile D:/svnaccessfile
然後建立一個Subversion授權檔案。Apache將確保只有有效使用者可以訪問你的/svn位置,然後將使用者名稱傳到 AuthzSVNAccessFile模組,這樣可以依據Subversion授權檔案得到更精細的許可權控制。注意,路徑將被指定為[庫:路徑]或者簡單 的[路徑]。如果你不明確指定一個庫,訪問規則將應用到由SVNParentPath指定的目錄下所有的版本庫中。一個例子可能像這樣:
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# 為所有庫指定預設訪問規則
# 所有人可以讀,管理員可以寫,危險分子沒有任何許可權
[/]
* = r
@admin = rw
dangerman =
# 允許開發人員可以完全訪問他們的項目版本庫
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# 文檔編寫人員對所有的docs目錄有寫入權限
[/trunk/doc]
@docs = rw
# 培訓人員可以完全訪問培訓版本庫
[TrainingRepos:/]
@training = rw
以上介紹的配置為Apache多庫方式,即一個location可以同時為多個版本庫服務,
假設你的ip為192.168.0.1,在D:/SVN目錄下建了兩個版本庫,proj1和proj2
可以分別用下面兩個url來訪問你的版本庫
http://192.168.0.1/svn/proj1
http://192.168.0.1/svn/proj1
還有一種配置方式為Apache單庫方式,即一個location只能為一個版本庫服務,
配置時只要將上面的SVNParentPath改為SVNPath,同時將後面的路徑由版本庫的父目錄改為版本庫的目錄
如:
<Location /svn>
SVNPath D:/SVN/proj1
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:/passwd
#AuthzSVNAccessFile D:/svnaccessfile
Require valid-user
</Location>
這時,可以用下面的URL來訪問版本庫proj1
http://192.168.0.1/svn