Windows下SVN Apache配置手冊

來源:互聯網
上載者:User
 

引言:

WebDAV

基於Apache配置的Subversion伺服器使用了被許多其它程式支援的WebDAV協議。舉個例子,你可以在Windows的資源管理
器中將這樣的一個版本庫掛載成一個“Webfolder”,然後像檔案系統
中的其它檔案夾一樣訪問它。

瀏覽版本庫

你可以在不安裝Subversion用戶端的情況下,使用瀏覽器
來瀏覽版本庫中的內容。這將使得更大範圍的使用者
可以訪問你的資料。

使用者驗證

你可以使用任何Apache支援的驗證機制,包括SSPI和LDAP。

安全

Apache是非常的穩定和安全,因此你的版本庫自然而然地擁有同樣的安全性。包括SSL加密。

Apache使用Subversion提供的DAV和AUTHZ模組(mod_dav_svn.so、mod_authz_svn.so),提供版本庫服務http(s)://host/庫,而svnserve.exe提供傳統的版本庫服務svn://host/庫,用戶端TortoiseSVN或svn.exe能夠識別不同的協議(http、svn)。

本文部分內容來摘自PCplayer的文章。

一、下載

Apache下載網址:http://httpd.apache.org/download.cgi

Subversion下載網址:http://subversion.tigris.org

    注意:由於Subversion和Apache編譯平台的差異,使得兩者的配合十分困難。Subversion提供了mod_dav_svn.so和mod_authz_svn.so模組供Apache調用,才使得Apache也能訪問版本庫。除非你自己編譯,不然Subversion 1.5.4版本是無法與Apache 2.x版本配合的(強行配合的結果是,Apache就無法啟動)。經過無數次的實驗,我終於找到了可配的兩個版本Subversion 1.4.5 和 Apache 2.0.59
(據說是最穩定的版本)。下面提供這些版本的下載:

apache_2.0.59-win32-x86-no_ssl.msi

apache_20.59-win32-x86-openssl-0.9.7j.msi  (帶SSL庫 mod_ssl.so等)

svn-1.4.5-setup.exe

mod_ssl_etc.rar


  and openssl.cnf

    另外,Subversion版本之間也存在著相容性問題,請盡量使用相同的版本進行倉庫操作(建立、備份、恢複),否則有可能出現無法識別的情況。(可以使用
匯入匯出
解決版本的相容問題)

版本庫位置 D:/svndb/proj1
命令如下:
svnadmin dump D:/svndb/proj1 > proj1dumpfile
(如果之前沒有升級subversion程式到1.4,最晚在這要升級了)
svnadmin create D:/svndb/proj1new
svnadmin load D:/svndb/proj1new < proj1dumpfile


二、安裝

2.1. 安裝Apache

安裝Apache前,你要有一台運行
Windows2000、Windows XP + sp1或Windows2003的電腦。

警告
:請注意,沒安裝Service Pack 1的Windows XP將導致錯誤的網路
資料從而破壞你的版本庫!

確保你下載
的版本大於2.0.54。2.0.54版本的Apache將不能與Subversion 1.3.xx配合工作。而且,小於2.0.54的Apache也因為在windows上的編譯
存在一個bug
而導致不能與subversion1.2配合使用。

一旦你已經有了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

運行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目錄。(註:這個不是必須的,檔案名稱跟版本有差異如libdb44.dll

使用如記事本之類的文字編輯器編輯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

三、配置

    接下來,還需要告訴mod_dav_svn模組,使用什麼路徑作為版本庫目錄,使用什麼檔案來進行認證。下面是一個典型的配置:(注意下面的"/"和"/"作為路徑均是允許的
,還有<Location /svn/
>的副作用
。)

<Location /svn/
>
DAV svn

SVNListParentPath on
SVNParentPath "F:/svnROOT"
# SVNIndexXSLT "/svnindex.xsl"   //使用列表模板

AuthName "Subversion Repositories"
AuthType Basic
# AuthBasicProvider file //似乎subversion 1.4.5不支援此項

AuthUserFile "F:/svnROOT/htpasswd"
AuthzSVNAccessFile "F:/svnROOT/authz"

require valid-user

#<LimitExcept GET PROPFIND OPTIONS REPORT> //下面表示允許匿名讀取
#Require valid-user
#</LimitExcept>

</Location>

說明:

<Location /svn/>

意味著可以通過像這樣的URL(http://MyServer/svn)


來訪問Subversion版本庫

DAV svn

告訴Apache哪個模組
負責服務像那樣的URL--在這裡就是Subversion模組

SVNListParentPath on

在Subversion 1.3及更高版本中,這個指標使得Subversion列出由SVNParentPath指定的目錄下所有的版本庫

SVNParentPath F:/svnROOT

告訴Subversion在目錄F:/svnROOT下尋找版本庫

AuthType Basic

啟用基本的驗證,比如使用者名稱/密碼對

AuthName "Subversion repositories"

當一個驗證對話方塊彈出時,告訴使用者這個驗證是用來做什麼的

AuthUserFile F:/svnROOT/htpasswd

指定F:/svnROOT/htpasswd用為密碼檔案用來驗證使用者的使用者名稱及密碼

AuthzSVNAccessFile
F:/svnROOT/authz

指定F:/svnROOT/authz來限定各個使用者或組在版本庫中目錄的存取權限

Require valid-user

限定使用者只有輸入正確的使用者名稱及密碼後才能訪問這個路徑(此項表示,無論是IE還是Tortoise,只有通過密碼驗證才能訪問)。

下面表示允許匿名訪問,對於讀操作,不需要使用者驗證。

#<LimitExcept GET PROPFIND OPTIONS REPORT>
#Require valid-user
#</LimitExcept>

    AuthUserFile和AuthzSVNAccessFile
的工作原理是,先使用Apache使用者機制進行驗證,通過之後將請求提交給mod_authz
_svn.so進行認證,最後使用mod_dav
_svn.so提供的功能。

    下面提供Apache的密碼檔案製作方法:

    apache2/bin/htpasswd -cm passwd 使用者名稱
  (-c表示建立新檔案 -m表示md5加密)

    提示輸入密碼,確認。

    添加新使用者:

    apache2/bin/htpasswd -m passwd 使用者名稱

    許可權檔案配置請參考Subversion手冊,這裡不作講解。

     接下來,重啟Apache服務,在IE中打入 http://localhost/svn/


就可以得到列表(Require valid-user需要認證)。或使用TortoiseSVN Checkout,在地址中輸入 http://localhost/svn/庫。

 

四、使用SSL功能

    如果你的apache安裝包不帶ssl功能的話,請在本文開頭下載mod_ssl_etc.rar。解壓後將mod_ssl.so拷到Apache的modules目錄、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目錄、conf/ssl.conf拷到conf目錄

開啟httpd.conf,刪除#LoadModule ssl_module modules/mod_ssl.so前面的注釋

在Apache的conf目錄中用文字編輯器開啟ssl.conf。

將下面這些行用#注釋掉:

DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog
logs/error
_log
TransferLog logs/access_log

並找到這兩行,注釋掉,不然SSL模組不會運行。

<IfDefine SSL>
</IfDefine>

並修改
SSLCertificateFile conf/ssl.crt/server
.crt
->
SSLCertificateFile conf/ssl/my-server.cert

SSLCertificateKeyFile conf/ssl.key/server.key
->
SSLCertificateKeyFile conf/ssl/my-server.key

SSLMutex file:logs/ssl_mutex
->
SSLMutex default

接下來是認證的製作過程,製作之前Openssl.exe需要一個設定檔openssl.cnf,可以用這裡下載 http://tud.at/programm/openssl.cnf


,並把它儲存到apache2/bin/openssl.cnf

bin/openssl req -config openssl.cnf -new -out my-server.csr

注意:該命令首先會要求你輸入一個短語(下一步需要使用,先要記下),越長越好,然後需要你填充一些可選問題,可以斷行符號忽略。其中有一項,Comm Name要求輸入欄位名(不輸的話可能會造成TortoiseSVN不能登入,ie可以
),最後是輸入私密金鑰,OK,下一步。

bin/openssl rsa -in privkey.pem -out my-server.key

bin/openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000

這樣就會建立一個4000天才到期的認證,最後敲入

bin/openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

這些命令在Apache目錄下建立了一些檔案(my-server.der.crt,my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert)。將這些檔案拷貝到目錄conf/ssl(比如C:/program files/apache group/apache2/conf/ssl),如果目錄ssl不存在,你必須先建立一個。

重啟Apache服務。

現在可以用類似這樣的url來訪問你的版本庫了https://servername/svn/project


強制通過SSL來訪問

當你配置了SSL來提高版本庫安全時,你可能想禁用無SSL的http訪問方式,而只允許通過https訪問。要達到這種效果,你要在<Location>塊加入另外一個指標SSLRequireSSL

一個樣本<Location>塊可能像這樣:

<Location /svn>
DAV svn

SVNParentPath D:/SVN
SSLRequireSSL

AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
AuthzSVNAccessFile svnaccessfile
Require valid-user

</Location>

 

參考文章:

svn版本庫的建立 http://www.51testing.com/?action_viewnews_itemid_11548.html

subversion+apache 配置 http://www.blogjava.net/xfcy2003/archive/2007/02/26/100715.html

windows安裝基於Apache的SVN伺服器(包括SSL配置) http://bbs.iusesvn.com/thread-158-1-1.html

IUseSVN中文網 http://bbs.iusesvn.com

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.