一 、工作环境
操作系统:Windows Server 2008 R2 SP1 x64
Apache版本:2.4.4
Subversion版本: Setup-Subversion-1.7.10.msi
TortoiseSVN版本: TortoiseSVN-1.7.13.24257-x64-svn-1.7.10.msi + LanguagePack_1.7.13.24257-x64-zh_CN.msi
Subversion 1.7.10支持如下版本:
APR 1.4.5
APR-util 1.3.12
APR-ICONV 1.2.1
Neon 0.29.6
Berkeley DB 4.8.30
OpenSSL 1.0.0e
ZLib 1.2.5
Apache 2.2.21
Python 2.6.6 and 2.7.2
Perl 5.12.3 (ActivePerl)
libintl 0.14.1 (patched)
Ruby 1.8.6
Cyrus SASL 2.1.23
serf 1.0.0
sqlite 3.7.7.1
SWIG 1.3.24 (newer versions doesn't work with VC++6)
下载地址:
apache_2.4.4-x86-no-ssl.msi-Download.rar:http://www.yimuhe.com/file-1159841.html
apache_2.4.4-x86-openssl-1.0.1e.msi-Download.rar:http://www.yimuhe.com/file-1159842.html
apache_2.4.4-x64-no-ssl.msi-Download.rar:http://www.yimuhe.com/file-1159838.html
apache_2.4.4-x64-openssl-1.0.1e.msi-Download.rar:http://www.yimuhe.com/file-1159839.html
Setup-Subversion-1.7.10.exe-Download.rar:http://www.yimuhe.com/file-1159844.html
TortoiseSVN-1.7.13.24257-x64-svn-1.7.10-zh-CN.msi-Download.rar:http://www.yimuhe.com/file-1159859.html
二 、安装步骤
1.安装Apache
如果您已经拥有Apache的安装程序,那么你就可以双击安装程序开始安装。请确保你输入正确的服务器URL(如果你的服务器没有DNS名称,你可以直接输入IP地址)。我建议你将Apache安装成 for all Users,on Port 80,as a service。注意:如果你已经有一个IIS或者其它的程序使用80端口,安装可能会失败。如果是这样,你可以在Apache安装完毕后,到该程序目录下的C:\Program Files\Apache Software Foundation\Apache2.4\conf目录中找到文件httpd.conf,将其中的Listen 80改成一个不被程序占用的端口,比如Listen 81(如果81也被占用,请自行修改成其它不被占用的端口)。为了预防万一请先看第二步把81端口加入防火墙例外,再重新运行这个安装程序,这次应该不会再有问题了。
测试Apache是否安装成功?
你可以在你的浏览器中键入 http://loccalhost:81,如果呈现了一个已经配置好的网站(页面显示内容为:It works!),那么你的Apache就安装成功了。
2.加入防火墙例外
按Win键+R键打开运行,输入WF.msc,按Enter键确认打开 高级安全Windows防火墙。在左边单击 入站规则,在右边单击 新建规则,选择 端口,单击 下一步,选择 TCP(默认) 和 特定本地端口(默认):填写:81,单击 下一步,选择 阻止连接,单击 下一步,在 域,专用,公用 上打勾(默认),单击 下一步,输入名称:81端口(任意名称,随你填),输入描述:供Apache服务器使用端口(可选填写),单击 完成。至此完成创建防火墙例外。
3.提高Apache安全性
如果你将Apache安装成一个服务,它将以本地system帐户来运行。为Apache创建一个单独的用户来运行它将会更安全一些。请确保运行Apache的用户有版本库的完全访问权限(右键版本库目录->属性->安全)。要不然,用户将无法提交他们的更改。就算Apache以本机system来运行,你也要设置它能完全读写版本库目录。如果没有为Apache配置这个许可,用户将会得到"禁止访问"的错误信息,在Apache的错误日志中表现为错误500。
在这里,我已经为我的Apache创建一个系统账户:apache_admin,并默认加入Users用户组。
然后Win键+R键 打开运行,输入Services.msc,按Enter键确认打开服务窗口,找到Apache2.4服务,右键选择属性->登录->此账户,设置为你新创建好的系统账户apache_admin。
设置好登录账户之后,重启Apache2.4服务,你会发现启动Apache2.4失败,弹出错误窗口:"windows不能在本地计算机启动apache2.4.有关更多信息,查阅系统事件日志。如果这是非microsoft服务,请与服务厂商联系,并参考特定服务错误代码1。"
这是因为某些Apache需要用到的目录,而apache_admin没有权限读写,这是Windows 6.1以后版本所导致的,Windows 6.1以后版本提高了文件系统安全性,尤其是文件系统为NTFS格式的服务器。
这时需要设置以下几个目录的安全性:
为Apache安装目录的上级目录(C:\Program Files\Apache Software Foundation)添加apache_admin账户权限:在该目录右键 属性->安全->编辑->添加->输入apache_admin,然后确定。
Apache安装目录的上级目录,只需要设置“读取”的权限。
Apache安装目录(C:\Program Files\Apache Software Foundation\Apache2.4),需要设置“列出文件夹目录”和“读取”的权限(可以为了方便使用继承)。
Apache安装目录下的子目录“bin”和“modules”目录,需要设置“读取和运行”、“列出文件夹和目录”、“读取”的权限。
Apache安装目录下的子目录“logs”目录,需要设置“列出文件夹和目录”、“读取”、“写入”的权限(若使用Apache安装目录的权限继承,只添加“写入”权限即可)。
版本库目录需要为apache_admin设置完全访问权限,要不然客户端无法文件上载,可能会出现禁止访问等提示,在Apache的错误日志中表现为错误500。
有些时候,我们创建了新的账户,却没有作为服务运行的权限,这时候,我们还需要额外设置:Win键+R键打开运行,输入Secpol.msc,按Enter键确认打开 本地安全策略->本地策略->用户权限分配->作为服务登录->添加用户或组->把apache_admin添加进入后按确定。
4.安装Subversion并配置Apache
A,双击Subversion的安装程序来完成默认安装,安装完毕之后。我们进入subversion文件目录中(默认安装位置是:C:\Program Files (x86)\Subversion), 在该目录中的bin文件夹中找到mod_dav_svn.so、mod_authz_svn.so、libdb48.dll、intl3_svn.dll这四个文件,将它们拷贝到Apache的modules目录(通常为C:\Program Files\Apache Software Foundation\Apache2.4\modules)下。
B,打开Apache的配置文件httd.conf(通常为C:\Program Files\Apache Software Foundation\Apache2.4\conf\httd.conf),修改以下内容:
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
修改为:
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
*注意: 这两行的代码顺序不能错,以免带来不必要的麻烦。
C,现在,你已经安装了Apache和Subversion,但是Apache还不知道如果处理像TortoiseSVN一样的Subversion客户端。要让Apache知道哪个URL将
被Subversion使用,你要像下面这样编辑Apache配置文件,在配置文件的最后添加下面这些行:(通常为C:\Program Files\Apache Software Foundation\Apache2.4\conf\httd.conf):
<Location /svn>
DAV svn
SVNParentPath D:\Subversion\SVN
AuthType Basic
AuthName "test"
AuthUserFile D:\Subversion\passwd
#AuthzSVNAccessFile D:\Subversion\svnaccessfile
Require valid-user
</Location>
这样配置表示:你所有的版本库将位于D:\Subversion\SVN目录下,要访问你的版本库可以使用这样的URL:http://MyServer/svn/,访问权限将由passwd文件中的用户名/密码来限制。
==============================================
对刚刚输入的apache配置作一些简短的说明:
<Location /svn>
意味着可以通过像这样的URL(http://MyServer/svn)来访问Subversion版本库
DAV svn
告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块
SVNListParentPath on
在Subversion 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的版本库
SVNParentPath D:\Subversion\SVN
告诉Subversion在目录D:\Subversion\SVN下寻找版本库
AuthType Basic
启用基本的验证,比如用户名/密码对
AuthName "test"
当一个验证对话框弹出时,告诉用户这个验证是用来做什么的
AuthUserFile D:\Subversion\passwd
指定D:\Subversion\passwd用为密码文件用来验证用户的用户名及密码
AuthzSVNAccessFile D:\Subversion\svnaccessfile
指定D:\Subversion\svnaccessfile来限定各个用户或组在版本库中目录的访问权限
Require valid-user
限定用户只有输入正确的用户名及密码后才能访问这个路径
==============================================
要创建passwd文件,可以按Win键+R输入CMD,按Enter键确认打开命令提示符(DOS窗口)。
输入以下命令切换到apache2.4的bin目录(通常为C:\Program Files\Apache Software Foundation\Apache2.4\bin):
cd /d C:\Program Files\Apache Software Foundation\Apache2.4\bin
然后输入以下命令在D:\Subversion创建passwd文件,并且新建一个admin账户:
htpasswd -c D:\Subversion\passwd admin
根据提示输入该admin账户的新密码,再按Enter键
输入以下命令重启Apache服务或输入命令Services.msc打开服务窗口,手动重启Apache2.4服务:
net stop "Apache2.4"
net start "Apache2.4"
这个时候,你又会发现启动Apache2.4服务失败,弹出错误窗口:"windows不能在本地计算机启动apache2.4.有关更多信息,查阅系统事件日志。如果这是非microsoft服务,请与服务厂商联系,并参考特定服务错误代码1。"
这个错误和那几个新Copy到Apache的so文件有关,因为已经在httd.conf文件中加入这几个so文件的配置信息,所以在Apache2.4服务启动的时候,会读取这几个文件,但读取出错,导致无法启动服务。当然,这只是我的猜想,欢迎指正。
解决方法:
如果承载Subversion和Apache的服务器没有安装Microsoft Visual C++ 2008 SP1 Redistributable Package (x64),请先下载并运行完成安装。
需要注意的是,必须是这个版本VC2008,是不是SP1都无所谓,请根据服务器系统架构,下载x86或x64。当然了,如果你的服务器是x64的,全部安装也是可以的,但请按顺序安装。
下载地址:
Microsoft Visual C++ 2008 Redistributable Package (x86):http://www.microsoft.com/zh-cn/download/details.aspx?id=29
Microsoft Visual C++ 2008 SP1 Redistributable Package (x86):http://www.microsoft.com/zh-cn/download/details.aspx?id=5582
Microsoft Visual C++ 2008 Redistributable Package (x64):http://www.microsoft.com/zh-cn/download/details.aspx?id=15336
Microsoft Visual C++ 2008 SP1 Redistributable Package (x64):http://www.microsoft.com/zh-cn/download/details.aspx?id=2092
安装完毕后,请再下载由国外友人提供的修改版Subversion文件,以达到兼容并识别Apache的效果,请根据Subversion版本以及系统架构选择相应版本:
注意: Subversion 1.7.10不提供x86的修改版本。
下载地址:
Mod Subversion 1.7.8 for Apache 2.4.x x86:
文件名:mod_svn-1.7.8-ap24-x86.zip
SHA1: 31c202f9eec1fc566fca78fcda69d3fc7d2c1e58
下载地址:http://yimuhe.com/file-1158563.html
Mod Subversion 1.7.8 for Apache 2.4.x x64:
文件名:mod_svn-1.7.8-ap24-x64.zip
SHA1: d7a6125b9d56404d48272d227ff2196614ecfb22
下载地址:http://yimuhe.com/file-1158544.html
Mod Subversion 1.7.10 for Apache 2.4.x x64:
文件名:mod_svn-1.7.10-ap24-x64.zip
SHA1: 55f0a697f409fd40c0a69fe939c21dcf4c8a403d
下载地址:http://yimuhe.com/file-1158540.html
下载完毕后解压到任意目录。
1.把bin目录直接覆盖到C:\Program Files (x86)\Subversion的bin目录。
2.把modules目录直接覆盖到C:\Program Files\Apache Software Foundation\Apache2.4的modules目录。
重启Apache2.4服务,成功。
D,权限控制文件创建
在D:\Subversion目录下创件svnaccessfile文件,然后打开进行配置,可以参照下面的示例:
#组配置 组 = 用户名
[groups]
@admin = admin
@user = test #test用户还需要按照上面d步骤来创建它和它的密码
# 为所有库指定默认访问规则
# 所有人可以读
[/]
* = r
# 为test版本库制定权限
#admin组拥有读写权限
#user组只有读取权限
[test:/svn/test]
@admin = rw
@user = r
5.TortoiseSVN
双击安装程序,默认安装即可!完成之后,你就可以用URL(http://IP/svn/test)来访问版本库了!
好了,现在你就应该可以去体会一下你的劳动成果咯!
* 为什么要先装Apahce后安装SVN呢?
先安装Apahce后安装的原因是,如果Apache安装成功,那么在安装 SVN的时候,会自动配置相关的属性!不过也没什么关系,我们还是可以自己来配置的!
上面的配置仅仅是一个简单的示例。你还可以对Apache进行许许多多的配置。
1如果你想让所有用户对版本库都有读的权限而只有特定的用户才有写的权限,你可以将这行
Require valid-user
改为
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
2上面的配置使用了passwd文件将你所有的版本库作为一个单元来限定访问权限。如果你想获得更多的控制,如限定某个用户可以访问版本库中
的哪个目录,可以把下面这行的#去掉:
#AuthzSVNAccessFile D:\Subversion\svnaccessfile
然后用文本编辑器创建一个Subversion授权文件。Apache将确保只有有效的用户可以访问你的/svn位置,然后将用户名传到
AuthzSVNAccessFile模块,这样可以依据Subversion授权文件得到更精细的权限控制。注意,路径将被指定为[库:路径]或者简单的[路径]。如
果你不明确指定一个库,访问规则将应用到由SVNParentPath指定的目录下所有的版本库中。一个授权文件例子可能像这样:
[groups]
admin = admin,administrator
devteam1 = john,rachel,sally
devteam2 = kate,peter,mark
docs = bob,jane,mike
training = zak
# 为所有库指定默认访问规则
# 所有人可以读,管理员可以写,危险分子没有任何权限
[/]
* = r
@admin = rw
dangerman =
# 允许开发人员可以完全访问他们的项目版本库
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw
# 文档编写人员对所有的docs目录有写权限
[/trunk/doc]
@docs = rw
# 培训人员可以完全访问培训版本库
[TrainingRepos:/]
@training = rw
3. 使用SSL来保护你的服务器
因为美国出口限制,默认安装的Apache服务器不支持SSL。但是你自己可以很容易地在其它地方下载到所需要的模块,然后安装它。
首先你需要SSL的必需文件。
下载地址:
文件名:openssl-0.9.8y-downgrade-2.4.4-x86.zip
SHA1: 9fae76682e11863f79a6fe27dfb588f5936e7fbd
来源:http://yimuhe.com/file-1159436.html
文件名:openssl-0.9.8y-downgrade-2.4.4-x64.zip
SHA1: 96cddd184f1bf1e1e1a7deddfd89fccf3aba2c7a
来源:http://yimuhe.com/file-1159431.html
解压后,将modules目录覆盖到Apache的modules目录。
(含:mod_ssl.so、mod_session_crypto.so)
bin目录覆盖到Apache的bin目录。
(含:abs.exe、apr_crypto_openssl-1.dll、libeay32.dll、openssl.exe、ssleay32.dll)
conf目录覆盖到Apache的conf目录,同时把conf目录里的openssl.cnf文件复制多一份到bin目录里,方便使用。
(含:openssl.cnf)
在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
修改
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
删除以下两行(如果有,我认为有错,删掉之后apache无法启动):
<IfDefine SSL>
</IfDefine>
打开Apache配置文件(httpd.conf),去掉这行的注释
#LoadModule ssl_module modules/mod_ssl.so
下面你要创建一个SSL证书,打开命令提示符窗口,输入以下命令:
cd /d C:\Program Files\Apache Software Foundation\Apache2.4\bin
openssl req -config openssl.cnf -new -out my-server.csr
你将被问及一句口令短语。请注意,不要使用简单的几个词,而应该输入一整个句子,比如一篇诗词的一部份,越长越好。同样,你还要输入
你的服务器URL。然后其它的问题都是可选问答的,不过我建议你也将它们填充。
下一步,敲入以下命令:
openssl rsa -in privkey.pem -out my-server.key
openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
这样将创建一个4000天后才过期的证书。最后敲入:
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 Software Foundation\Apache2.4\conf\ssl),如果目录ssl不存在,请先创建一个。
重启Apache服务。
现在可以用类似这样的url来访问你的版本库了https://servername/svn/project
强制通过SSL来访问
当你配置了SSL来提高版本库安全时,你可能想禁用无SSL的http访问方式,而只允许通过https访问。要达到这种效果,你要在<Location>块加
入另外一个指示器SSLRequireSSL。
一个示例<Location>块可能像这样:
<Location /svn>
DAV svn
SVNParentPath D:\Subversion\SVN
SSLRequireSSL
AuthType Basic
AuthName "test"
AuthUserFile D:\Subversion\passwd
#AuthzSVNAccessFile D:\Subversion\svnaccessfile
Require valid-user
</Location>
以上介绍的配置为Apache多库方式,即一个location可以同时为多个版本库服务,
假设你的ip为192.168.0.1,在D:\SVN目录下建了两个版本库,proj1和proj2
可以分别用下面两个url来访问你的版本库
http://192.168.0.1:81/svn/proj1
http://192.168.0.1:81/svn/proj2
还有一种配置方式为Apache单库方式,即一个location只能为一个版本库服务,
配置时只要将上面的SVNParentPath改为SVNPath,同时将后面的路径由版本库的父目录改为版本库的目录
如:
<Location /svn>
SVNPath D:\Subversion\SVN\proj1
AuthType Basic
AuthName "test"
AuthUserFile D:\Subversion\passwd
#AuthzSVNAccessFile D:\Subversion\svnaccessfile
Require valid-user
</Location>
转载的朋友,请不要删除以下行,对此,表示感谢!!!
原文来自VAllen cnblogs链接:http://www.cnblogs.com/VAllen/archive/2013/06/17/ModSVN1710AndApache244Installer.html