svn与apache服务器结合的配置过程,svnapache
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联系。 在Apache的bin目录加到环境变量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
评论暂时关闭