Windows下SVN Apache配置手册

 

引言:

WebDAV
基于Apache配置的Subversion服务器使用了被许多其它程序支持的WebDAV协议。举个例子,你可以在Windows的资源管理 器中将这样的一个版本库挂载成一个“Webfolder”,然后像文件系统 中的其它文件夹一样访问它。

浏览版本库
你可以在不安装Subversion客户端的情况下,使用浏览器 来浏览版本库中的内容。这将使得更大范围的用户 可以访问你的数据。

用户验证
你可以使用任何Apache支持的验证机制,包括SSPI和LDAP。

安全
Apache是非常的稳定和安全,因此你的版本库自然而然地拥有同样的安全性。包括SSL加密。

Apache使用Subversion提供的DAV和AUTHZ模块(mod_dav_svn.so、mod_authz_svn.so),提供版本库服务http(s)://host/库,而svnserve.exe提供传统的版本库服务svn://host/库,客户端TortoiseSVN或svn.exe能够识别不同的协议(http、svn)。

本文部分内容来摘自PCplayer的文章。

一、下载

Apache下载网址:http://httpd.apache.org/download.cgi

Subversion下载网址:http://subversion.tigris.org

    注意:由于Subversion和Apache编译平台的差异,使得两者的配合十分困难。Subversion提供了mod_dav_svn.so和mod_authz_svn.so模块供Apache调用,才使得Apache也能访问版本库。除非你自己编译,不然Subversion 1.5.4版本是无法与Apache 2.x版本配合的(强行配合的结果是,Apache就无法启动)。经过无数次的试验,我终于找到了可配的两个版本Subversion 1.4.5 和 Apache 2.0.59 (据说是最稳定的版本)。下面提供这些版本的下载:

apache_2.0.59-win32-x86-no_ssl.msi

apache_20.59-win32-x86-openssl-0.9.7j.msi  (带SSL库 mod_ssl.so等)

svn-1.4.5-setup.exe

mod_ssl_etc.rar   and openssl.cnf

    另外,Subversion版本之间也存在着兼容性问题,请尽量使用相同的版本进行仓库操作(创建、备份、恢复),否则有可能出现无法识别的情况。(可以使用 导入导出 解决版本的兼容问题)

版本库位置 D:/svndb/proj1
命令如下:
svnadmin dump D:/svndb/proj1 > proj1dumpfile
(如果之前没有升级subversion程序到1.4,最晚在这要升级了)
svnadmin create D:/svndb/proj1new
svnadmin load D:/svndb/proj1new < proj1dumpfile


二、安装

2.1. 安装Apache


安装Apache前,你要有一台运行 Windows2000、Windows XP + sp1或Windows2003的电脑。

警告 :请注意,没安装Service Pack 1的Windows XP将导致错误的网络 数据从而破坏你的版本库!

确保你下载 的版本大于2.0.54。2.0.54版本的Apache将不能与Subversion 1.3.xx配合工作。而且,小于2.0.54的Apache也因为在windows上的编译 存在一个bug 而导致不能与subversion1.2配合使用。

一旦你已经有了Apache2的安装程序,你可以双击它,它将引导你完成整个安装过程。请确保你输入正确的服务器URL(如果你的服务器没有DNS名称,你可以直接输入IP地址 )。我建议你将Apache安装成 for all Users,on Port 80,as a service。注意:如果你已经有一个IIS或者其它的程序使用80端口,安装可能会失败 。如果是这样,你可以到程序目录 下的Apache Group/Apache2/conf 目录中找到文件httpd.conf,将其中的Listen 80改成一个不用的端口,比如Listen 81。然后重新运行这个安装程序,这次应该不会再有问题了。

现在你可以在你的浏览器中键入 http://loccalhost ,如果呈现了一个已经配置好的网站,那么你的Apache就安装成功了。

警告

如果你将Apache安装成一个服务,它将以本地system帐户来运行。为Apache创建一个单独的用户来运行它将会更安全一些。请确保运行Apache的用户有版本库的完全访问权限 (右键版本库目录->属性 ->安全)。要不然,用户将无法提交他们的更改。就算Apache以本机system来运行,你也要设置 它能完全读写版本库目录。如果没有为Apache配置这个许可,用户将会得到"禁止访问"的错误信息,在Apache的错误日志 中表现为错误500。

2.2. 安装Subversion

运行Subversion安装程序,如果安装程序能够识别你已经安装了Apache,那么你的安装基本上就OK了。如果它不能,那么你要做一些额外的步骤。
注:如果你先安装Apache,再安装Subversion,正常情况下下面的工作(2.3配置前)Subversion安装程序已经帮你完成了
使用资源管理器,进入Sibversion的安装目录(通常为c:/program files/Subversion),找到文件httpd/mod_ dav _svn.so和mod_ authz _svn.so,将它们拷贝到Apache的modules目录(通常为c:/program files/apache group/apache2/modules)。

从Subversion的安装目录拷贝文件 libdb43.dll 到Apache的modules目录。( 注:这个不是必须的,文件名跟版本有差异如libdb44.dll

使用如记事本之类的文本编辑器编辑Apache的配置文件(通常为c:/program files/apache group/apache2/conf/httd.conf),修改以下内容:

去掉以下行的注释(将开头的#删除 ):

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

在LoadModule节的最后添加以下两行:

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

三、配置

    接下来,还需要告诉mod_dav_svn模块,使用什么路径作为版本库目录,使用什么文件来进行认证。下面是一个典型的配置:(注意下面的"/"和"/"作为路径均是允许的 ,还有<Location /svn/ >的副作用 。)

<Location /svn/ >
DAV svn

SVNListParentPath on
SVNParentPath "F:/svnROOT"
# SVNIndexXSLT "/svnindex.xsl"   //使用列表模板

AuthName "Subversion Repositories"
AuthType Basic
# AuthBasicProvider file //似乎subversion 1.4.5不支持此项
AuthUserFile "F:/svnROOT/htpasswd"
AuthzSVNAccessFile "F:/svnROOT/authz"

require valid-user

#<LimitExcept GET PROPFIND OPTIONS REPORT> //下面表示允许匿名读取
#Require valid-user
#</LimitExcept>

</Location>

说明:

<Location /svn/>

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

DAV svn

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

SVNListParentPath on

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

SVNParentPath F:/svnROOT

告诉Subversion在目录F:/svnROOT下寻找版本库

AuthType Basic

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

AuthName "Subversion repositories"

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

AuthUserFile F:/svnROOT/htpasswd

指定F:/svnROOT/htpasswd用为密码文件用来验证用户的用户名及密码

AuthzSVNAccessFile F:/svnROOT/authz

指定F:/svnROOT/authz来限定各个用户或组在版本库中目录的访问权限

Require valid-user

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

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

    AuthUserFile和AuthzSVNAccessFile 的工作原理是,先使用Apache用户机制进行验证,通过之后将请求提交给mod_authz _svn.so进行认证,最后使用mod_dav _svn.so提供的功能。

    下面提供Apache的密码文件制作方法:

    apache2/bin/htpasswd -cm passwd 用户名   (-c表示创建新文件 -m表示md5加密)

    提示输入密码,确认。

    添加新用户:

    apache2/bin/htpasswd -m passwd 用户名

    权限文件配置请参考Subversion手册,这里不作讲解。

     接下来,重启Apache服务,在IE中打入 http://localhost/svn/ 就可以得到列表(Require valid-user需要认证)。或使用TortoiseSVN Checkout,在地址中输入 http://localhost/svn/库。

 

四、使用SSL功能

    如果你的apache安装包不带ssl功能的话,请在本文开头下载mod_ssl_etc.rar。解压后将mod_ssl.so拷到Apache的modules目录、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目录、conf/ssl.conf拷到conf目录

打开httpd.conf,删除#LoadModule ssl_module modules/mod_ssl.so前面的注释
在Apache的conf目录中用文本编辑器打开ssl.conf。

将下面这些行用#注释掉:
DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog logs/error _log
TransferLog logs/access_log

并找到这两行,注释掉,不然SSL模块不会运行。
<IfDefine SSL>
</IfDefine>

并修改
SSLCertificateFile conf/ssl.crt/server .crt
->
SSLCertificateFile conf/ssl/my-server.cert

SSLCertificateKeyFile conf/ssl.key/server.key
->
SSLCertificateKeyFile conf/ssl/my-server.key

SSLMutex file:logs/ssl_mutex
->
SSLMutex default

接下来是证书的制作过程,制作之前Openssl.exe需要一个配置文件openssl.cnf,可以用这里下载 http://tud.at/programm/openssl.cnf ,并把它保存到apache2/bin/openssl.cnf

bin/openssl req -config openssl.cnf -new -out my-server.csr

注意:该命令首先会要求你输入一个短语(下一步需要使用,先要记下),越长越好,然后需要你填充一些可选问题,可以回车忽略。其中有一项,Comm Name要求输入域名(不输的话可能会造成TortoiseSVN不能登录,ie可以 ),最后是输入私钥,OK,下一步。

bin/openssl rsa -in privkey.pem -out my-server.key

bin/openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000

这样就会创建一个4000天才过期的证书,最后敲入

bin/openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

这些命令在Apache目录下创建了一些文件(my-server.der.crt,my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert)。将这些文件拷贝到目录conf/ssl(比如C:/program files/apache group/apache2/conf/ssl),如果目录ssl不存在,你必须先创建一个。

重启Apache服务。

现在可以用类似这样的url来访问你的版本库了https://servername/svn/project

强制通过SSL来访问

当你配置了SSL来提高版本库安全时,你可能想禁用无SSL的http访问方式,而只允许通过https访问。要达到这种效果,你要在<Location>块加入另外一个指示器SSLRequireSSL

一个示例<Location>块可能像这样:

<Location /svn>
DAV svn

SVNParentPath D:/SVN
SSLRequireSSL

AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
AuthzSVNAccessFile svnaccessfile
Require valid-user

</Location>

 

参考文章:

svn版本库的建立 http://www.51testing.com/?action_viewnews_itemid_11548.html

subversion+apache 配置 http://www.blogjava.net/xfcy2003/archive/2007/02/26/100715.html

windows安装基于Apache的SVN服务器(包括SSL配置) http://bbs.iusesvn.com/thread-158-1-1.html

IUseSVN中文网 http://bbs.iusesvn.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值