svn与apache服务器结合的配置过程,svnapache


 

svn与apache服务器结合的配置过程

 

一.准备安装软件

先下载Http服务器,官方网站为http://httpd.apache.org/,目前最新版本为Apache 2.2.6,我下载的是apache-2.2.15-win32.msi

再下载SVN服务器,官方网站为http://subversion.tigris.org/ ,最新版本为Subversion 1.4.6,下载时要注意下载和Apache2.2.x版本对应的,我下载的是

Subversion-1.5.6(服务端).msi

TortoiseSVN,客户端程序。TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录,点鼠标右键即可看到。网址为http://tortoisesvn.tigris.org/ ,我下载的是

TortoiseSVN-1.5.6.14908-win32-svn-1.5.5.msi(svn和tortoiseSvn版本最好一样,至少客户端版本要比服务端高,如果相差太远,Svn有可能读不了tortoiseSvn的文件夹的)

TortoiseSVN的中文语言包,注意这个需要下和客户端程序版本相同的。这个可以在language packs下面下载。

   
二. 安装
       1.先安装Apache服务器。自己手动填写ServerInfo。安装完成之后到安装目录下找到conf目录下的httpd.config文件,搜索 Listen,并将Listen后面的80改为8080(或者你希望的端口),然后重新启动Apache服务器,这时可以用http://localhost:8080 来测试是否安装正确。
       2.再安装SVN服务器,直接解压即可。
       3.安装TortoiseSVN,很简单,一路安装下去。安装完毕后会要求重启,重启后进行以下配置。

三. 集成Apache和SVN
       

首先将Subversion安装目录bin\下面的两个文件:mod_authz_svn.so和mod_dav_svn.so复制到Apache安装目录modules\目录下; 再将Subversion安装目录bin\下面的所有.dll文件复制到Apache安装目录bin\目录下                                                                     

需要再修改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

如图:


注意下面的状态栏已经是Apache/2.2.6SVN1.4.6 DAV/2

建立一个SVN存放文件的目录,例如:在E盘下创建一个文件夹:E:/svn

接下来对Apache进行配置svn配置库所在的路径,可以通过Location指令来完成这个设置。因为不希望为每个单独的项目都进行单独的设置,所以我们把所有项目都存放在统一的资源库目 录,那么可以使用SVNParentPath指令来指定存放所有项目的路径。在httpd.conf文件最后添加下面配置: (这是一个不用用户密码验证的一段简单配置)
#SVN
<Location /mysvn>
    DAV svn
    SVNListParentPath on
    SVNParentPath "E:/svn"
   (#SVNPath "E:/svn/NewMapGis"
 
    ####################认证的类型
    AuthType Basic
    ####################认证的名称,显示于登录提示框
    AuthName "Subversion 资源库,请登录!"
    ####################Which password file to use forauthentication 存储用户登录信息的文件
    AuthUserFile E:\svn\passwd
    ####################限定各个用户或组在版本库中目录的访问权限
    AuthzSVNAccessFile E:\svn\svnaccessfile
    ####################让所有用户对版本库都有读的权限而只有特定的用户才有写的权限
    Require valid-user)
</Location>

具体代码:

<Location/mysvn>
    DAV svn
    SVNListParentPath on
    SVNParentPath "E:/svn"

<Location>

然后在e:svn下建立一个版本库,例如NewMapGis,就是新建一个NewMapGis的文件夹,然后进去,按右键 选择 TortoiseSvn 的 在此创建版本库。

创建好后,按右键 选择版本库浏览器,然后输入

http://127.0.0.1:8080/mysvn/NewMapGis

注意的是端口改了8080 然后<Location/mysvn>设置的是mysvn,而不是svn(虽然物理地址是e:svn),如果只是输入http://127.0.0.1:8080/mysvn是不行的,,要进入到具体版本库,svn这个文件夹只是用来管理所有版本库的。

 

 

 

四.设置基本的Http验证

基本(Basic)访问控制

在之前的设定中没有启用身分验证的功能,可以实现访问都不需要帐户和密码,但是我们通常不希望所有人都能任意存取你的文件库,免得重要资料外泄,或者资料被破坏,因此了解如何加入身分验证也是必要的。 Sebversion 提供了多种验证使用者身份的方式,这里介绍Basic访问控制,按下列步骤进行:

1. 修改 httpd.conf 的 <Location> ,设定如下:

<Location /mysvn>// (/mysvn 说明 用127.0.0.1:8080/mysvn访问所以版本库的地址,是http地址,和物理地址有区别)

说明:

 

<Location /svn>

(意味着可以通过像这样的URL(http://MyServer/svn) 来访问Subversion版本库)

<Location /svn>

DAV svn

(告诉Apache哪个模块 负责服务像那样的URL--在这里就是Subversion模块)

SVNListParentPath on

(在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的版本库)

SVNParentPath E:\svn

(告诉Subversion在目录E:\svn下寻找版本库)

AuthType Basic

(启用基本的验证,比如用户名/密码对)

AuthName "Subversionrepositories"

(当一个验证对话框弹出时,告诉用户这个验证是用来做什么的)

AuthUserFile E:\svn \htpasswd

(指定E:\svn \htpasswd用为密码文件用来验证用户的用户名及密码)

AuthzSVNAccessFile E:\svn \authz

 

(指定E:\svn \authz来限定各个用户或组在版本库中目录的访问权限)

Require valid-user

(限定用户只有输入正确的用户名及密码后才能访问这个路径(此项表示,无论是IE还是Tortoise,只有通过密码验证才能访问)。)

 

下面表示允许匿名访问,对于读操作,不需要用户验证。
#<LimitExcept GET PROPFIND OPTIONS REPORT>
#Require valid-user
#</LimitExcept>

 

具体代码:

<Location /mysvn>

(通过http://127.0.0.1:8080/mysvn/NewMapGis访问)

DAV svn

SVNListParentPath on

SVNParentPath E:\svn

AuthType Basic

AuthName "Subversionrepository"

AuthUserFile E:\svn\passwd

AuthzSVNAccessFileE:\svn\accessfile.

#<LimitExcept GET PROPFINDOPTIONS REPORT>

Require valid-user

#</LimitExcept>

</Location>

 

然后在Apache里添加用户,这些用户通过Apache里面的httpd.conf文件,上面的代码,把用户和svn联系。  Apachebin目录加到环境变量Path,以后直接可以调用Apachebin里面的htpasswd命令,这个exe命令只能在dos下调用,把bin路径加到Pah里面,在dos下用Apachebin htpasswd命令就不用一层层进入C:\ProgramFiles\Apache Software Foundation\Apache2.2\bin,而是直接在C:\下打htpasswd就可以了。

 

用Apache的htpasswd指令生成用户名和密码:

htpasswd -cm e:/svn/passwd.txt lhb

htpasswd -m e:/svn/passwd.txt lsz  

htpasswd的参数-c是创建文件的意思,故只在首次使用,仅使用-m参数时也可用来修改密码。

 

在 e:\下建立一个accessfile名字的文件。如果AuthzSVNAccessFile "e:/svn/accessfile.txt"(或者"e:/svn/accessfile")是没用.txt的 这个文件也不需要.txt

.

配置文件库访问政策文件(假设repository文件库下已经建立了projectA和projectB),如:

[repository:/]

username1 = rw

[repository:/projectA]

username2 = r

[repository:/projectA/trunk]

username1 =

username2 = rw

[repository:/projectB]

* = r

[repository:/projectB/trunk]

username1 =

 

小节名称中冒号前面的文件库名称不要轻易省略,省略就代表是针对所有文件库,这样是很为危险的,*号代表所有用户,等于号后面为空表示没有权限,mod_authz_svn模块首先会找到匹配自己的目录,然后是父目录,父目录的父目录,依次下去,并会以最近找到的描述为准。另外,你还可以定义一组用户,然后按组进行权限配置,比如:

[groups]

department_1 = username1,username2

department_2 = username3,username4, username5

[repository:/projectA]

@department_1 = r

@department_2 = rw

 

我的配置:(分组配置)

[groups]

 

admin =zyj, lhb, lsz, rj

guest =guest

 

[NewMapGis:/]  (NewMapGis这个版本库 下所有文件夹都能被admin组里的用户读和写,guest组里的用户只能读)

 

@admin =rw

@guest =r

 

[NewMapGis:/Document](NewMapGis这个版本库下的Document文件夹可以被guest读和写)

@guest =rw

相关内容

    暂无相关文章