一、软件版本:
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配置(这里以多版本库配置为例)
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
#RedirectMatch ^(/svn)$ $1/
各项含义如下:
location标签后面的路径表示通过http访问时的路径,如http://ip/svn
DAV svn 表示对于location配置的路径使用哪个模块进行处理,这里是subversion。
SVNParentPath是当一个目录下存在多个版本库时使用的配置,表示各版本库父目录的本地实际路径;如果一个目录下只有一个版本库,需要使用SVNPath进行配置,此时如果再增加新的项目版本库时,就要配置多个
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
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有权限访问该版本库。此时要注意授权策略文件中的配置要对应。
有时候不需要如此严格的访问控制,比如很多开源项目允许匿名读取操作,但只有认证用户才允许写操作,为了实现更为细粒度的权限认证,可以使用下面的标签:
require valid-user
上述配置使用passwd文件将所有的版本库作为一个整体来限定访问权限,表示匿名用户有读取权限,而只有passwd中配置的用户可以进行写操作,若仍不能满足要求,可以使用Apache的mod_authz_svn模块对每个目录进行认证配置(即启用AuthzSVNAccessFile配置项)。
5、Subversion存在“认证”和“授权”两个核心概念。认证,即authentication,指用户名与密码认证。授权,即authorization,是指某用户对某个目录是否具备读、写权限的一种审核,两者配合使用,就构成了Subversion的整个账户管理体系。
常见的问题:
1、多库和单库的设置,使用SVNParentPath设置所有库的父目录时,浏览器无法直接访问父目录,经试验,除非权限策略文件中[\]为设置为* = r;SVNPath设置单库无此问题。
2、出现“
这表示指定的SVN仓库的位置并不是一个合法的SVN仓库,可以使用SVN客户端(例如TortoiseSVN)创建,也可以使用svnadmin create
原文地址:http://blog.csdn.net/saygoodbyetoyou/article/details/23456595