Win7 环境 Apache2.2.x与Subversion 1.8.8 结合搭建版本控制环境

一、软件版本:

Subversion Version : Setup-Subversion-1.8.8.msi

Apache Version: httpd-2.2.25-win32-x86-openssl-0.9.8y.msi

如果版本不匹配会有各种问题。(Apache 2.0.x版本和 2.2.x版本有区别)

二、分别安装 Apache 和 Subversion,顺序没有要求,但是如果先安装Apache,后安装Subversion的话可以减少很多的手动配置项。这里选择手动配置。

下文约定使用Apache_Home表示Apache的安装路径,Subversion_HOME表示Subversion的安装路径。

三、安装完毕后配置步骤如下:

1、复制文件:

将Subversion\bin目录下的mod_dav_svn.so和mod_authz_svn.so复制到Apache2.2\modules\目录下。

将Apache2.2\bin下面的所有dll文件备份,然后将Subversion\bin下的所有dll文件复制到

Apache2.2\bin目录,再把刚才备份过的文件复制回来。

 

2、修改Apache2.2/conf/httpd.conf文件:

LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_modulemodules/mod_dav_fs.so

将这两行的注释去掉,然后在最下面添加:

LoadModule dav_svn_modulemodules/mod_dav_svn.so

LoadModule authz_svn_modulemodules/mod_authz_svn.so

修改监听端口,防止和其他进程冲突造成无法启动等问题,这里使用8080。

Listen 8080

修改ServerName,否则由于未注册DNS可能会出现一个警告

ServerName ip address:8080

3、在httpd.conf最下面添加一个基本的authz配置(这里以多版本库配置为例)

<Location /svn>

DAV svn

SVNParentPath D:/svnrepo

SVNListParentPath on

AuthzSVNAccessFileD:/apps/Apache2.2/conf/access.auth

Satisfy Any

Require valid-user

AuthType Basic

AuthName "Auth for SVN Repo"

AuthUserFile D:/apps/Apache2.2/conf/users.auth

Require valid-user

</Location>

#RedirectMatch ^(/svn)$ $1/

 

各项含义如下:

location标签后面的路径表示通过http访问时的路径,如http://ip/svn

DAV svn 表示对于location配置的路径使用哪个模块进行处理,这里是subversion。

SVNParentPath是当一个目录下存在多个版本库时使用的配置,表示各版本库父目录的本地实际路径;如果一个目录下只有一个版本库,需要使用SVNPath进行配置,此时如果再增加新的项目版本库时,就要配置多个<location/>

SVNListParentPath on 在SubVersion1.3及上版本,使用该配置项列出由SVNParentPath指定目录下的所有版本库。

单库访问路径:http://ip/svn  多库访问路径:http://ip/svn/repo1http://ip/svn/repo2等。

AuthzSVNAccessFile权限配置文件的位置,用来控制用户对版本库的访问权限。

Satisfy Any 和 Require valid-user先尝试匿名,如果不行再尝试认证用户。Satisfy Any可以不用配置。

AuthType Basic 认证方式,这里使用基本认证方式,即用户名+密码,通常已足够。

AuthName 认证时显示在用户名密码输入框上的文本,起简短的提示作用。

AuthUserFile 用户认证文件,用来存储使用htpasswd.exe生成的用户名和MD5加密的密码。

Require valid-user 限定用户只有输入正确的用户名密码才能访问这个路径。

RedirectMatch ^(/svn)$ $1/ 表示location 路径匹配模式,比如http://ip/svn和http://ipd/svn/都可以进行访问,此处已注释掉,因为实际测试时不使用该模式匹配也可以。

 

4、生成用户认证文件

用户认证文件(即密码文件)使用Apache_Home/bin/htpasswd.exe来生成,第一次执行时使用

htpasswd –c passwd <username>,然后输入并确认密码,即可在Apache_Home/bin下面生成名为passwd的文件,文件名可以任意指定,位置也可以任意指定,只要在AuthUserFile中配置正确即可。如果要在passwd中追加新的用户名和密码,需要使用htpasswd passwd <username>命令,即不使用-c参数。

 

5、使用mod_authz_svn控制访问目录的权限

首先需要让Apache将mod_authz_svn模块加载,见上述.so文件拷贝和httpd.conf配置。

权限控制文件使用AuthzSVNAccessFile指定,该文件同passwd文件一样,名称任意,位置任意。该权限策略文件的内容格式可以在Subversion创建的的版本库的conf目录下找到,名称为authz。

用法说明:配置的路径被指定为[repoName:path]或者[path],如果未明确指定一个库,访问规则将应用到由SVNParentPath指定的目录下所有版本库中。文件配置可能如下:

[groups]

admin = shenq

developer_team1 = svntest1,svntest2

developer_team2 = svntest3,svntest4

docs = svntest5,svntest6

#使用/为所有库指定默认访问规则,如果希望直接访问所有库的父目录,需要配置* = r,表示所有人#可读,如果配置其他用户的话,不能访问,只能访问具体的库。

[/]

@admin = rw

* = r

[project1:/]

@ developer_team1 = rw

svntest3 = rw

svntest4 =

[project2:/]

@ developer_team2 = rw

[/src/resources]

@docs = rw

 

其他相关说明

1、svnserver的作用是使用基于http的自定义svn协议进行版本库访问。所以如果仅仅使用http的方式访问版本库,svnserver可以不启动。

2、关于dll文件的拷贝,Apache和SubVersion配合使用时,Apache需要读取SubVersion使用的一些dll文件,可以拷贝到Apache_HOME/bin下,也可以将SubVersion_HOME/bin加入到path环境变量中。

3、由于Subversion需要版本化的控制,因此标准的Http协议不能满足需求。要让Apache与Subversion协同工作,需要使用WebDAV(Web分布式创作与版本管理Web-based Distributed Authoring and Versioning),WebDAV协议是对Http1.1的扩展。

为了使Subversion与dav模块通信,需要安装mod_dav_svn插件,位于Subversion_HOME/bin目录下,将其拷贝到Apache_HOME/modules目录下,然后配置httpd.conf文件,让Apache在启动时加载上述模块。

4、可以将“Requirevalid-user”替换为“Require user svntest1 svntest2”形式,表示只有svntest1 和svntest2有权限访问该版本库。此时要注意授权策略文件中的配置要对应。

有时候不需要如此严格的访问控制,比如很多开源项目允许匿名读取操作,但只有认证用户才允许写操作,为了实现更为细粒度的权限认证,可以使用下面的标签:

<LimitExcept GET PROPFIND OPTIONSREPORT>

 require valid-user

</LimitExcept>

上述配置使用passwd文件将所有的版本库作为一个整体来限定访问权限,表示匿名用户有读取权限,而只有passwd中配置的用户可以进行写操作,若仍不能满足要求,可以使用Apache的mod_authz_svn模块对每个目录进行认证配置(即启用AuthzSVNAccessFile配置项)。

5、Subversion存在“认证”和“授权”两个核心概念。认证,即authentication,指用户名与密码认证。授权,即authorization,是指某用户对某个目录是否具备读、写权限的一种审核,两者配合使用,就构成了Subversion的整个账户管理体系。

 

常见的问题:

1、多库和单库的设置,使用SVNParentPath设置所有库的父目录时,浏览器无法直接访问父目录,经试验,除非权限策略文件中[\]为设置为* = r;SVNPath设置单库无此问题。

2、出现“<m:human-readableerrcode="720003">Could not open the requested SVNfilesystem</m:human-readable>”错误。

这表示指定的SVN仓库的位置并不是一个合法的SVN仓库,可以使用SVN客户端(例如TortoiseSVN)创建,也可以使用svnadmin create <reponame>命令创建,两者的效果一样的。


你可能感兴趣的:(Win7 环境 Apache2.2.x与Subversion 1.8.8 结合搭建版本控制环境)