SVN Apache2 配置

 

SVN最常見的配置模式便是與Apache集成,這樣SVN可以採用WebDev協議方式提供服務。主要的好處有:通過Apache以HTTP方式穿透防火牆,便於在互聯網環境使用;提供目錄的版本控制;純2進制的文件對比方式等。下面將介紹如何將SVN集成在Apache上。

  1. 準備工作:

    1. 下載軟件:
      1. SVN服務器端程序。到官方網站 的下載二進制安裝文件,來到二進制包下載部分  ,找到 Windows NT, 2000, XP and 2003部分,然後選擇"this directory",這樣我們可以看到許多下載的內容,目前可以下載 svn-1.2.3-setup.exe

      2. TortoiseSVN,客戶端程序。TortoiseSVN是擴展Windows Shell的一套工具,可以看作Windows資源管理器的插件,安裝之後Windows就可以識別Subversion的工作目錄。
        官方網站是TortoiseSVN,下載方式和前面的svn服務器類似,在Download頁面的我們選擇Official version for Win2k/XP or higher的版本,然後在sourceforge的下載頁面選擇目前的最高穩定版本的安裝文件TortoiseSVN-1.2.5.4719-svn-1.2.3.msi。(注意:TortoiseSVN有一個特殊對VS.Net運行時一個BUG修正的版本,在下載頁面有選擇:Special version for Win2k/XP or higher: (We provide NO support for this!) uses _svn folders instead of .svn to work around the VS.NET bug with web projects. If you don't use web projects then please use the official version. )

      3. TortoiseSVN的中文語言包,注意這個需要下和客戶端程序版本相同的。可以在Download頁面內的Language Packs選擇下載。

      4. Apache服務器程序。可以到Apache官方網站下載最新版本的Apache,並且SVN必須運行在Apache2以上版本,在下載頁面選擇Windows的安裝包文件apache_2.0.55-win32-x86-no_ssl.msi

      5. AnkhSVN,可選安裝VS.Net的SVN插件。有0.5和0.6版本選擇,0.6版支持VS2005 Beta2,下載頁面

    2. 停止IIS,因爲Apache默認安裝爲80端口,需要關閉IIS避免端口衝突。可以在安裝好之後再調整端口。


  2. 開始安裝:

    1. 先安裝Apache服務器。在到填寫ServerInfo的時候,若機器已經啓用了AD,安裝程序會自動填寫,否則自己手動填寫。安裝完成之後到安裝目錄下找到conf目錄下的httpd.config文件,搜索Listen,並將Listen後面的80改爲8080(或者你希望的端口),然後重新啓動Apache服務器,這時可以用http://localhost:8080/ 來測試是否安裝正確。

    2. 再安裝SVN服務器,沒有什麼好說的,一路回車就可以了。(安裝SVN時,請確保Apache服務器正在運行狀態,安裝過程中可能會將Apache關閉,重新啓動屬於正常現象)

  3. 配置Apache服務器與SVN集成:


    1. 首先將Subversion安裝目錄bin/下面的兩個文件:mod_authz_svn.somod_dav_svn.so複製到Apache安裝目錄modules/目錄下。
    2. 有些文章說需要再修改httpd.conf,並做如下修改:
      找到Apache安裝目錄下的conf目錄,用文本編輯器打開httpd.conf,找到一下兩行:

      #LoadModule dav_module modules/mod_dav.so
      #LoadModule dav_fs_module modules/mod_dav_fs.so

      將每行前面的註釋符“#”去掉。再在所有LoadModule語句的最後添加一下幾行:

      #SVN
      LoadModule dav_svn_module modules/mod_dav_svn.so
      LoadModule authz_svn_module modules/mod_authz_svn.so

      但是我安裝完之後發現這個文件已經被做了那些修改,大概是新版的SVN安裝程序做了一些優化吧。其實在成功安裝SVN之後,Apache服務器已經和SVN初步集成。如圖:

      Apache.jpg

      注意下面的狀態欄已經是Apache/2.0.55 SVN1.2.3 DAV/2

    3. 建立一個SVN存放文件的目錄,我在F盤下創建一個文件夾:F:/SubversionFiles
    4. 接下來我們必須告訴Apache我們的資源庫所在的路徑,可以通過Location指令來完成這個設置。因爲不希望爲每個單獨的項目都進行單獨的設置,所以我們把所有項目都存放在統一的資源庫目錄,那麼可以使用SVNParentPath指令來指定存放所有項目的路徑。在httpd.conf文件最後添加下面配置:

      #SVN

      <Location /svn>
          DAV svn
          SVNParentPath "F:/SubversionFiles"
      </Location>

    這樣我們就可以通過http://myhost:8080/svn/<項目名> 來訪問存放於資源庫F:/SubversionFiles中的指定項目。當然有可能你並不希望某個項目提供這樣一種訪問方式,這時候你可以使用SVNPath爲每個項目進行單獨的設置,SVNPath的使用方法如下:

        DAV svn
        SVNPath "F:/SubversionFiles/project1"

    同樣把這段配置放在httpd.conf最後,重啓Apache HTTP服務即可通過http://myhost:8080/svn/project1 來訪問project1項目的資源庫。

    1. 下面作一個測試:

      1. 到F:/SubversionFiles下建立一個子目錄Test,然後到Aapche下的Bin目錄下執行svnadmin create F:/SubversionFiles/Test

      2. 打開瀏覽器輸入網址:http://localhost:8080/svn/Test ,應該可以正確訪問,但當前該項目下還沒有加入任何內容,所以顯示爲空的

      3. 有一點需要提示的是,現在的訪問是完全匿名的,任何人都可以對SVN進行操作。所以我們接下來利用Apache的權限管理功能來對SVN進行用戶驗證集成

  4. 加入用戶身份驗證:

    在確定對訪問用戶的權限控制之前,你必須規劃好是對整個資源庫中的所有項目還是單獨的某一個項目進行統一的身份驗證, 也就是我們前面講到的是使用SVNParentPath還是SVNPath的問題。

    最簡單的身份驗證方式是使用Basic HTTP Authentication機制,該方式通過用戶名和口令對訪問用戶進行身份驗證。我們可以直接通過Apache提供的支持進行設置。Apache提供一個htpasswd工具來管理用戶名和口令。接下來我們利用這個工具來添加兩個用戶。

    在命令行窗口中轉到Apache所在的目錄,執行下列命令

    說明:創建用戶Xrinehart
    輸入:htpasswd –c F:/SubversionFiles/svn_auth_passwd Xrinehart
    說明:使用-c參數來創建一個passwd文件
    輸出:
    New password: *****
    Re-type new password: *****
    Adding password for user Xrinehart

    再創建用戶的時候就不用-c參數,而是用-m參數,因爲文件svn_auth_passwd經創建。

    打開svn_auth_passwd文件,密碼使用MD5加密過了,而且同樣的密碼加密出來的內容卻不相同

    接下來我們必須告訴Apache服務器如何使用這個passwd文件,打開httpd.conf找到剛纔我們添加的Location配置的位置,修改如下:

    #
    # SVN
    #

      DAV svn
      SVNParentPath "F:/SubversionFiles"

    # how to authenticate a user
     AuthType Basic
     AuthName "Subversion repository"
     AuthUserFile "F:/SubversionFiles/svn_auth_passwd"
     
      # only authenticated users may access the repository
    Require valid-user


    重新啓動Apache HTTP服務器,使用瀏覽器打開 http://localhost:8080/svn/Test 你將會看到要求登錄的對話框,輸入你剛設置的用戶名和口令即可。

    這樣Apache和SVN的集成就基本告成了。

  5. 我們已經實現了對SVN和Apache的安裝,並將它們集成在一起工作。下面主要介紹如何對SVN For Apache進行一些配置。在Apache下爲SVN建立多個庫。上篇中雖然也建立了一個SVN的庫在Apache下,但是我們不可能一個SVN服務器上只有一個項目,或者所有項目共用一個SVN庫進行開發,在Apache上爲SVN建立多個庫可以通過建立多個虛擬目錄的方式實現。下面我們就來講講具體的步驟(注意,此篇中的配置和上篇中的配置方式有很大區別)

  1. 到F盤建立我們的SVN代碼存放位置目錄:SubversionFiles,並在其中建立一個conf目錄,將會把對Apache對SVN的配置文件都放在這裏
  2. 再在F:/SubversionFiles下目錄Test1和Test2,並將它們變成SVN庫(用svnadmin create命令或者用TortoiseSVN來創建都可以)
  3. 在httpd.conf的最後添加如下代碼

    #
    # SVN 項目配置文件,格式:Include 配置文件名
    #爲每個虛擬目錄設置一個配置文件,用Include命令加載

    #
    Include F:/SubversionFiles/conf/*.project

    即把F:/SubversionFiles/conf/目錄下的所有*.project文件都包到httpd.conf中來


  4. 在F:/SubversionFiles/conf/創建Test1.project和Test2.project文件,Test1內容如下,Test2可以做相應的修改

    #SVN項目名

         DAV svn

        #SVN項目的路徑
         SVNPath F:/SubversionFiles/Test1

        #SVN項目的路徑權限授權文件存放路徑
        AuthzSVNAccessFile F:/SubversionFiles/conf/Test1.access

    #對於所有用戶都需要身份驗證
        Satisfy Any
         Require valid-user

    #驗證方式
        AuthType Basic

        #項目的名稱
         AuthName "My Test1
    "

        #用戶信息
         AuthUserFile  F:/SubversionFiles/conf/user




    以上配置含義是在Apache下建立了一個叫作Test1的SVN虛擬目錄,指向F:/SubversionFiles/Test1,授權配置文件是F:/SubversionFiles/conf/Test1.access,用戶信息和密碼文件是F:/SubversionFiles/conf/user


  5.  通過以上配置,我們就在Apache上建立了Test1和Test2兩個虛擬目錄,也就是兩個獨立的SVN庫,我們還需要兩個文件訪問權限配置的.access和包含登錄用戶的user。 在F:/SubversionFiles/conf目錄中創建用戶列表文件user,方法在上篇中已經說過,也就是htpasswd命令,我們需要創建Xrinehart, X-Killer, Guest三個用戶。

  6. 接下來,我們爲Test1庫創建它的訪問權限文件F:/SubversionFiles/conf/Test1.access。在上篇文章中我們是採用對每個用戶分別賦予對應權限的方式,如果用戶比較多,管理起來就會比較麻煩,這時我們需要用用戶組來對用戶進行管理。下面我們就來嘗試用用戶組配置訪問權限。Test1.access文件內容如下:


    [groups]
    AdminGroup = Xrinehart
    GuestGroup = guest

    [/]
    @AdminGroup = rw
    @GuestGroup = r

    X-Killer = rw


            在上面的配置中,通過[groups]節定義了兩個用戶組:AdminGroup和GuestGroup,並將Xrinehart用戶歸入AdminGroup用戶組,guest用戶歸入GuestGroup。再在下面的[/]定義了他們對Test1庫的根目錄的操作權限:AdminGroup組有讀寫權限,GuestGroup組只有讀權限,X-Killer用戶擁有讀寫權限。這裏需要注意的是定義權限的時候,用戶組需要在前面加@符號來標示。

  7. 爲了測試效果,我們可以將Test2.access文件寫爲:

    [groups]
    AdminGroup = Xrinehart, X-Killer
    GuestGroup = guest

    [/]
    @AdminGroup = r
    @GuestGroup = rw


  8. 保存好上面的所有配置文件之後,重新啓動Apache服務器。此時我們就可以在IE裏面通過http://localhost:8080/Test1http://localhost:8080/Test2 來訪問Test1和Test2庫了,你可以測試一下,用戶權限是否符合下面這個列表所示?做到這裏,SVN在Apache上建立多個庫的配置也就算完成了。


                                                     Test1                                            Test2

    Xrinehart                                    rw                                                  r
    X-Killer                                     rw                                                  r
    guest                                          r                                                    rw


    相關文章:實戰SVN For Apache2(一)


    後注:該篇中的配置方式和第一篇中的配置方式有很大不同,推薦用該篇的方式進行配置訪問權限

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章