??xml version="1.0" encoding="utf-8" standalone="yes"?>
在所有的Subversion服务器配|方式中Q基于Apache的是最灉|的。虽焉|v来有一点点复杂Q但是它提供了其它方式所没有的好处:
WebDAV
ZApache配置的Subversion服务器用了被许多其它程序支持的WebDAV协议。D个例子,你可以在Windows的资源管理器中将q样的一个版?br />库挂载成一个“Webfolder”,然后像文件系l中的其它文件夹一栯问它?/p>
览版本?br />你可以在不安装Subversion客户端的情况下,使用览器来览版本库中的内宏V这得更大范围的用户可以讉K你的数据?/p>
用户验证
你可以用Q何Apache支持的验证机Ӟ包括SSPI和LDAP?/p>
安全
Apache是非常的E_和安全,因此你的版本库自然而然地拥有同L安全性。包括SSL加密?/p>
2. 安装q程
2.1. 安装Apache
安装Apache前,你要有一台运行Windows2000、Windows XP + sp1或Windows2003的电脑?/p>
警告Q请注意Q没安装Service Pack 1的Windows XP导致错误的|络数据从而破坏你的版本库Q?/p>
?a >http://httpd.apache.org/download.cgi 下蝲最新版本的Apache Web服务器。确保你下蝲的版本大?.0.54?.0.54版本的Apache不能与
Subversion 1.3.xx配合工作。而且Q小?.0.54的Apache也因为在windows上的~译存在一个bug而导致不能与subversion1.2配合使用?/p>
一旦你已经有了Apache2的安装程序,你可以双dQ它引g完成整个安装q程。请保你输入正的服务器URLQ如果你的服务器没有DNS
名称Q你可以直接输入IP地址Q。我你将Apache安装?for all Users,on Port 80,as a service。注意:如果你已l有一个IIS或者其?br />的程序?0端口Q安装可能会p|。如果是q样Q你可以到程序目录下的Apache Group\Apache2\conf目录中找到文件httpd.confQ将其中?br />Listen 80Ҏ一个不用的端口Q比如Listen 81。然后重新运行这个安装程序,q次应该不会再有问题了?/p>
现在你可以在你的览器中键入 http://loccalhost/Q如果呈C一个已l配|好的网站,那么你的Apache安装成功了?/p>
警告Q?/p>
如果你将Apache安装成一个服务,它将以本地system帐户来运行。ؓApache创徏一个单独的用户来运行它会更安全一些?/p>
L保运行Apache的用h版本库的完全讉K权限Q右键版本库目录->属?>安全Q。要不然Q用户将无法提交他们的更攏V?/p>
qApache以本机system来运行,你也要设|它能完全读写版本库目录?/p>
如果没有为Apache配置q个许可Q用户将会得?止讉K"的错误信息,在Apache的错误日志中表现为错?00?/p>
2.2. 安装Subversion
?a >http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 (英文)
?br />http://www.iusesvn.com/bbs/forumdisplay.php?fid=7Q中文)下蝲最新版本的Subversion?/p>
q行Subversion安装E序Q如果安装程序能够识别你已经安装了ApacheQ那么你的安装基本上OK了。如果它不能Q那么你要做一些额外的?br />骤?br />注:如果你先安装ApacheQ再安装SubversionQ正常情况下下面的工?2.3配置?Subversion安装E序已经帮你完成?br />使用资源理器,q入Sibversion的安装目录(通常为c:\program files\SubversionQ,扑ֈ文ghttpd/mod_dav_svn.so和mod_authz_svn.so
Q将它们拯到Apache的modules目录Q通常为c:\program files\apache group\apache2\modulesQ?/p>
从Subversion的安装目录拷贝文件libdb43.dll到Apache的modules目录?/p>
使用如记事本之类的文本编辑器~辑Apache的配|文?通常为c:\program files\apache group\apache2\conf\httd.conf)Q修改以下内容:
L以下行的注释Q将开头的#删除Q:
CODE:
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
在LoadModule节的最后添加以下两行:
CODE:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
2.3. 配置
现在Q你已经安装了Apache和SubversionQ但是Apacheq不知道如果处理像TortoiseSVN一LSubversion客户端。要让Apache知道哪个URL?br />被Subversion使用Q你要像下面q样~辑Apache的配|文Ӟ通常在c:\program files\apache group\apache2\conf\httpd.confQ:
在配|文件的最后添加下面这些行Q?br />CODE:
<Location /svn>
DAV svn
SVNParentPath D:\SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>
q样配置表示Q你所有的版本库将位于D:\SVN目录下,要访问你的版本库可以使用q样的URLQ?a href="http://MyServer/svn/">http://MyServer/svn/Q访问权限将由passwd?br />件中的用户名/密码来限制?br />要创建passwd文gQ可以打开命o?DOSH口)Q将当前目录切换到apache2目录Q通常为c:\program files\apache group\apache2Q,然后?br />入以下命令以创徏文gQ?br />CODE:
bin\htpasswd -c passwd <username>
重启Apache服务?br />你的浏览器指向http://MyServer/svn/MyNewRepository(MyNewRepository是你之前创徏的Subversion版本?。如果一切正常,你将被提C?br />输入用户名密码,输入正确的用户名密码后你可以看到版本库中的内容了?br />对你刚刚输入的apache配置作一些简短的说明Q?br />QUOTE:
<Location /svn>
意味着可以通过像这LURL(http://MyServer/svn)来访问Subversion版本?br />DAV svn
告诉Apache哪个模块负责服务像那LURLQ-在这里就是Subversion模块
SVNListParentPath on
在Subversion 1.3及更高版本中Q这个指C器使得Subversion列出由SVNParentPath指定的目录下所有的版本?br />SVNParentPath D:\SVN
告诉Subversion在目录D:\SVN下寻扄本库
AuthType Basic
启用基本的验证,比如用户?密码?br />AuthName "Subversion repositories"
当一个验证对话框弹出Ӟ告诉用户q个验证是用来做什么的
AuthUserFile D:\passwd
指定D:\passwd用ؓ密码文g用来验证用户的用户名及密?br />AuthzSVNAccessFile D:\svnaccessfile
指定D:\svnaccessfile来限定各个用hl在版本库中目录的访问权?br />Require valid-user
限定用户只有输入正确的用户名及密码后才能讉Kq个路径
----------------------------------------
上面的配|仅仅是一个简单的CZ。你q可以对Apacheq行许许多多的配|?br />1如果你想让所有用户对版本库都有读的权限而只有特定的用户才有写的权限Q你可以这?br />CODE:
Require valid-user
改ؓ
CODE:
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
2上面的配|用了passwd文g你所有的版本库作Z个单元来限定讉K权限。如果你惌得更多的控制Q如限定某个用户可以讉K版本库中
的哪个目录,可以把下面这行的#LQ?br />CODE:
#AuthzSVNAccessFile D:\svnaccessfile
然后用文本编辑器创徏一个Subversion授权文g。Apache确保只有有效的用户可以讉K你的/svn位置Q然后将用户名传?br />AuthzSVNAccessFile模块Q这样可以依据Subversion授权文g得到更精l的权限控制。注意,路径被指定为[?路径]或者简单的[路径]。如
果你不明指定一个库Q访问规则将应用到由SVNParentPath指定的目录下所有的版本库中。一个授权文件例子可能像q样Q?br />CODE:
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
# 为所有库指定默认讉K规则
# 所有h可以读,理员可以写Q危险分子没有Q何权?br />[/]
* = r
@admin = rw
dangerman =
# 允许开发h员可以完全访问他们的目版本?br />[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# 文档~写人员Ҏ有的docs目录有写权限
[/trunk/doc]
@docs = rw
# 培训人员可以完全讉K培训版本?br />[TrainingRepos:/]
@training = rw
2.4. 使用SSL来保护你的服务器
因ؓ国出口限制Q默认安装的Apache服务器不支持SSL。但是你自己可以很容易地在其它地方下载到所需要的模块Q然后安装它?/p>
首先你需要SSL的必需文g。你可以http://hunter.campbus.com/ 或这里找到相应的软g包(或者下载本主题的附?Q?br /> 附g: mod_ssl_etc.rar (2006-10-16 15:30, 595.45 K)
该附件被下蝲ơ数 110
Q。然后只要将包解开其中的mod_ssl.so拷到Apache的modules目录、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目录?br />conf/ssl.conf拷到conf目录?br />在Apache的conf目录中用文本~辑器打开ssl.conf?br />下面这些行?注释掉:
CODE:
DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog logs/error_log
TransferLog logs/access_log
修改
CODE:
SSLCertificateFile conf/ssl.crt/server.crt
?br />CODE:
SSLCertificateFile conf/ssl/my-server.cert
修改
CODE:
SSLCertificateKeyFile conf/ssl.key/server.key
?br />CODE:
SSLCertificateKeyFile conf/ssl/my-server.key
修改
CODE:
SSLMutex file:logs/ssl_mutex
?br />CODE:
SSLMutex default
删除以下两行(如果?我认为有?删掉之后apache无法启动)Q?br />CODE:
<IfDefine SSL>
</IfDefine>
打开Apache配置文g(httpd.conf)Q去掉这行的注释
CODE:
#LoadModule ssl_module modules/mod_ssl.so
Openssl需要一个配|文件。你可以从这里下载一个可工作的版?a >http://tud.at/programm/openssl.cnf (或者本主题附g2Q?br /> 附g: openssl.cnf.rar (2006-9-10 19:11, 1.21 K)
该附件被下蝲ơ数 84
)。将它保存到bin/openssl.cnf?br />下面你要创徏一个SSL证书。你可以打开一个命令行H口Q然后cd到Apache安装目录Q比如C:\program files\apache group\apache2Q,敲入
以下命oQ?br />CODE:
bin\openssl req -config bin\openssl.cnf -new -out my-server.csr
你将被问及一句口令短语。请注意Q不要用简单的几个词,而应该输入一整个句子Q比如一诗词的一部䆾Q越长越好。同P你还要输?br />你的服务器URL。然后其它的问题都是可选问{的Q不q我你也它们填充?br />下一步,敲入以下命oQ?br />CODE:
bin\openssl rsa -in privkey.pem -out my-server.key
以及Q注意,只有一行)
CODE:
bin\openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
q样创Z?000天后才过期的证书。最后敲入:
CODE:
bin\openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
q些命o在Apache目录下创Z一些文Ӟmy-server.der.crt, my-server.csr, my-server.key, .rnd, privkey.pem, my-server.certQ?br />这些文件拷贝到目录conf/ssl
Q比如C:\program files\apache group\apache2\conf\sslQ,如果目录ssl不存在,你必d创徏一个?br />重启Apache服务?br />现在可以用类DLurl来访问你的版本库?a href="https://servername/svn/project">https://servername/svn/project
QUOTE:
强制通过SSL来访?br />当你配置了SSL来提高版本库安全Ӟ你可能想用无SSL的http讉K方式Q而只允许通过https讉K。要辑ֈq种效果Q你要在<Location>块加
入另外一个指C器SSLRequireSSL?br />一个示?lt;Location>块可能像q样Q?br /><Location /svn>
DAV svn
SVNParentPath D:\SVN
SSLRequireSSL
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
</Location>
以上介绍的配|ؓApache多库方式Q即一个location可以同时为多个版本库服务Q?br />假设你的ip?92.168.0.1Q在D:\SVN目录下徏了两个版本库Qproj1和proj2
可以分别用下面两个url来访问你的版本库
CODE:
http://192.168.0.1/svn/proj1
CODE:
http://192.168.0.1/svn/proj1
q有一U配|方式ؓApache单库方式Q即一个location只能Z个版本库服务Q?br />配置时只要将上面的SVNParentPath改ؓSVNPathQ同时将后面的\径由版本库的父目录改为版本库的目?br />如:
CODE:
<Location /svn>
SVNPath D:\SVN\proj1
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>