SVN服務器在SVNServer和Apache中搭建之技術分享
本節接著上節和大家一起來學習一下SVN服務的問題,經過一段時間對SVN的學習有了一些心得,于是和大家分享一下,看完本文SVN服務問題的介紹你肯定有不少收獲,希望本文能教會你更多東西。
用SVNServe搭建SVN服務器
我們要把svnserve運行起來,我將在例子中介紹具體的使用方法。
下面假設我在本機上運行svnserve,IP為192.168.0.1,這個svn服務器為局域網內的電腦提供svn服務。我打算把svn服務器的訪問地址設為http://192.168.0.1/svnprojects/projectX,其中X為不同的多個項目。整個過程如下(以windows下為例):
首先確定repo在本機上的儲存的位置,比如我準備把repo放在D:svnprojetcs下,那么在命令行運行svnserve-d-rd:svnprojects就可以了。其中-d參數讓svnserve運行在后臺,-r參數限定了repo在網絡上可以訪問的地址。這樣如果網絡上其它的計算機要checkout這個服務器,只需要輸入svncheckoutsvn://192.168.0.1/project1而repo在本機上實際的位置是d:svnprojectsproject1。同理,如果想checkoutproject2,則把上面的project1改成project2就可以了。到此,一個簡單的svn服務器就算是基本架設好了。但如果要正常使用,我們還需要設定用戶的驗證和相應的權限。
現在我們先建立一個叫project1的repo,然后轉到project1中:
svnadmincreated:svnprojectsproject1
cdd:svnprojectsproject1
project1目錄下有一堆目錄,進入conf并打開svnserve.conf這個文件,找到以下幾行,并把前面的注解符號‘#’去掉,注意千萬在每行的前面別留任何空格。
anon-access=read
auth-access=write
password-db=passwd
其中anon-access和auth-access分別為匿名和有權限用戶的權限,默認給匿名用戶只讀的權限,這很好,我們不需要改它們。但如果想拒絕匿名用戶的訪問,只需把read改成none就能達到目的。password-db后的passwd則為定義用戶名及密碼的文件路徑。這個文件默認跟snvserve.conf在同一個目錄,下面看看怎么配置passwd中的內容。
[user]
#harry=harryssecret
#sally=sallyssecret
harry和sally這兩行分別定義了可以對repo進行寫入的用戶的用戶名和密碼。我們可以在下面加上自己的用戶名和密碼,比如testsvn=tester
這樣就給了用戶testsvn往repo中寫的權限。存盤退出后,svn服務器就算正式可以運行了!把所有需要管理的項目都放在d:svnprojects這個目錄下,像正常那樣用svnadmincreate命令建立repo,如果要checkoutrepo,則在命令行中輸入:svncheckoutsvn://192.168.0.1/project1如果要commit剛需要輸入剛才設置好的用戶名和密碼:svncommit-m"wearecommitingchanges!"--usernametestsvn--passwordtester
給Windows用戶的建議
如果你打算在Windows系統上運行svnserve,只是簡單的在命令行輸入svnserve-d-rd:svnprojects不是個好方法,一是每次都這么干太麻煩,二是服務器啟動后為了保持它的運行,你必須讓命令提示符窗口一直懸在桌面上,影響美觀。最好是把svnserve作為系統的一個進程每次啟動自動運行:
D:>sccreatesvn
binpath="D:svnbinsvnserve.exe--service-rD:svnprojects"
displayname="SubversionServer"
depend=Tcpip
start=auto把當中的路徑換成你的svn安裝目錄就可以了。
在Apache下建立SVN服務器
在Apache中部署Subversion實際上并不比用svnserve難多少,它的難點在于一般人沒有修改Apache配置的權限,如果你有相應的修改權限,那么搭建一個svn服務器不是一件難事,我們來看看應該怎么配置。
準備工作
首先確定Apache正確安裝,mod_dav和mov_dav_svn這兩個模塊也被啟用,在Debian系的Linux上可以這么安裝:
sudoapt-getinstallapache2subversionlibapache2-svn
在Windows平臺上,可以下載一個XAMPP,ApacheMySQLPHP什么的就都有了。
確定mod_dav和mod_dav_svn被打開:a2enmoddavdav_svn
基本設置
SVN服務介紹時以上的準備工作做完后,就正式開始了,還是拿part2的機器網絡環境,同樣的例子。
我準備讓repo的網絡訪問地址成為http://192.168.0.1/svnprojects/projectX,
修改/etc/apache2/conf下的httpd.conf,加入如下代碼:
<Location/svnprojects>
DAVsvn
SVNParentPath/path/to/svnprojects
</Location>
更多詳細的<Location>命令用法請參見Apache手冊,下同。SVNParentPath命令用來把網絡訪問地址和repo的實際地址對應起來。
這樣就設置完了,如果你把repo建立好了,現在就已經可以checkout了,輸入:svncheckouthttp://192.168.0.1/svnprojects/project1設定用戶的權限和驗證
但這樣肯定是不夠的,因為還沒有設定相應的用戶權限,現在不管誰都可以往repo里塞東西,為了更好的控制,我們還需要設定訪問權限,比如讓指定的用戶可以commit,其他的只能checkout。因為我們在Apache上,所以訪問權限的控制就可以直接借用Apache的,首先為你的用戶設定用戶名和密碼:
htpasswd-cmb/path/to/passwdfile/passwordsuser1test1這樣就把用戶名和密碼儲存在passwords中了,加密方式為MD5。如果需要添加新的用戶,htpasswd-mb/path/to/passwdfile/passwordsuser2test2以此類推。
然后回到我們在httpd.conf中添加的代碼,修改一下:
- <Location>
- DAVsvn
- SVNParentPath/path/to/svnprojects
- AuthTypeBasic
- AuthName"TestRepository"
- AuthUserFile/path/to/passwdfile/passwords
- <LimitExceptGETPROPFINDOPTIONREPORT>
- Requirevalid-user
- </LimitExcept>
- </Location>
在這段代碼的控制下,任何人都可以對repo進行checkout,但只有user1和user2才可以commit,<LimitExcept>的作用是控制HTTP請求,如果HTTP請求是GETPROPFINDOPTIONREPORT中的一種,則不需要去驗證用戶。
最后,你需要把repo所在的目錄和文件的所有權都改成系統中操作Apache的用戶,這樣在commit的時候才會被Apache認可。在Ubuntu中,這個用戶叫www-data:
sudochown-Rwww-data/path/to/repo如果你用其它系統或是用Windows,可以在Apache的配置文件中找到User這個命令來知道應該把目錄的所有權交給誰。
以上就是一個初步的Subversion服務器的搭建,這一篇考慮到實際上用的人可能不多,要用的人估計肯定會自己配置,因此我寫的不夠細致,比如說沒有說到基于SSL的設置步驟。本節關于SVN服務問題講解完畢,請關注本節其他相關報道。
【編輯推薦】