2010年10月20日

windows 下 Apache2.2.4和Subversion1.4.4搭建SVN版本控制平台

windows 下 Apache2.2.4和Subversion1.4.4搭建SVN版本控制平台


一、安装

第一步,安装Apache2.2,下载后直接安装就可以了,没有什么难的。

第二步,安装Subversion1.4.4(目前最新版本),下载时请注意,此软件包有两个版本,一个是针对Apache2.0.x的,另一个是针对Apache2.2.x的,这里要用后一个版本,解压之后即可使用。


二、整合

第一步,打开Apache安装目录下的httpd.conf文件

找到下面的语句:

#LoadModule dav_module modules/mod_dav.so

将上面语句前面的#去掉

第二步,在这句后面追加,如下语句:

LoadModule dav_svn_module "{svn安装目录}/bin/mod_dav_svn.so"
LoadModule authz_svn_module "{svn安装目录}/bin/mod_authz_svn.so"

注:{svn安装目录}就是svn-win32-1.4.4.zip解压后你放的目录

第三步,在这个文件的最后,追加如下语句:

<Location /svn>
      DAV svn
      SVNParentPath “d:/svn”
</Location>


第四步,创建仓库

根据apache的配置文件的设置建立目录:d:/svn,然后用svnadmin create d:/svn/proj1命令创建仓库,命令执行成功之后,会在d:/svn/proj1下面生成很多的文件和目录。


第五步,运行

重新启动Apache Server
在浏览器中输入网址:
http://localhost/svn/test/
这时候,看到页面显示:

Revision 0: /
Powered by Subversion version 1.4.4 (r25188).


安装成功,接下来将进行权限设置。


三、svn权限设置

svn使用apache的权限管理对档案库及目录进行读写管理

修改上面第三步的内容为:

<Location /svn/>
      DAV svn
      SVNListParentPath on
      SVNParentPath “d:\svn”

      ### apache auth begin
      # how to authenticate a user
      AuthType Basic
      AuthName "Subversion repository"
      AuthUserFile “D:\apache2\conf\svn_auth”   ##(保存用户名和密码,这个文件需要用Apache的htpasswd工具创建)
      Require valid-user
      ### apache auth end

      ### svn auth begin
      # our access control policy
      AuthzSVNAccessFile “D:\apache2\conf\svn_access”   ##    (保存用户访问的权限策略)
      # authentication if necessary
      #Satisfy Any
      ### svn auth end
</Location>

用htpasswd工具创建svn_auth 文件,

建立保存用户名和密码的文件

htpasswd -c D:\apache2\conf\svn_auth    username1

-c 表示创建文件,-m表示对密码用md5加密

然后,会提示输入两次密码,以后再加用户就不需要用-c了,直接用-m即可。

下面建立控制用户访问权限的文件svn_access

在D:\apache2\conf中新建一个记事本文件,输入下面的内容:

[groups]
admin = kurz
everyone = @admin

[/]
@admin = r

[proj1:/]
@admin = rw

[proj2:/]
@admin = rw


r    表示读权限

w 表示写权限

好,配置完成,重新启动Apache server

在浏览器地址栏中再次输入:http://localhost/svn/test/

这次要输入密码才能进入,赶快试试吧。

四、基于Apache的svn服务器的多库单库

以上介绍的配置为Apache多库方式,即一个location可以同时为多个版本库服务,
假设你的ip为192.168.0.1,在D:\SVN目录下建了两个版本库,proj1和proj2
可以分别用下面两个url来访问你的版本库

http://192.168.0.1/svn/proj1

http://192.168.0.1/svn/proj2

此时权限文件类似于这样

[groups]
admin=user1
dev=user2

[proj1:/]
@admin=rw
@doc=r

[proj2:/]
@admin=rw
@doc=r

浏览父文件夹的版本库

http://192.168.0.1/svn

显示如下信息

Collection of Repositories
proj1/
proj2/

--------------------------------------------------------------------------------
Powered by Subversion version 1.4.4 (r25188).


还有一种配置方式为Apache单库方式,即一个location只能为一个版本库服务,
配置时只要将上面的SVNParentPath改为SVNPath,同时将后面的路径由版本库的父目录改为版本库的目录
如:

<Location /svn>
SVNPath D:\SVN\proj1
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\apache2\conf\svn_auth
AuthzSVNAccessFile D:\apache2\conf\svn_access
Require valid-user
</Location>

这时,可以用下面的URL来访问版本库proj1

http://192.168.0.1/svn

权限文件可能是

[groups]
admin=user1
dev=user2
[/]
@admin=rw
@doc=r

使用SSL来保护你的服务器
以上的工作已经可以让你的svn服务器正常工作了。
如果你要更安全一些,可以配置ssl来保护你的服务器。
因为美国出口限制,默认安装的Apache服务器不支持SSL。但是你自己可以很容易地在其它地方下载到所需要的模块,然后安装它。

首先你需要SSL的必需文件。你可以http://hunter.campbus.com/ 或这里找到相应的软件包(或者下载本主题的附件1: mod_ssl_etc.rar (595.45 KB) mod_ssl_etc.rar (595.45 KB)
下载次数: 1174
2006-10-16 15:30)。然后只要将包解开将其中的mod_ssl.so拷到Apache的modules目录、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目录、conf/ssl.conf拷到conf目录。

在Apache的conf目录中用文本编辑器打开ssl.conf。

将下面这些行用#注释掉:


DocumentRoot "c:/apache/htdocs"
ServerName [url]www.example.com:443[/url]
ServerAdmin [email]you@example.com[/email]
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
删除以下两行(如果有):


<IfDefine SSL>
</IfDefine>
打开Apache配置文件(httpd.conf),去掉这行的注释


#LoadModule ssl_module modules/mod_ssl.so
Openssl需要一个配置文件。你可以从这里下载一个可工作的版本http://tud.at/programm/openssl.cnf (或者本主题附件2: openssl.cnf.rar (1.21 KB) openssl.cnf.rar (1.21 KB)
下载次数: 820
2006-9-10 19:11)。将它保存到bin/openssl.cnf。

下面你要创建一个SSL证书。你可以打开一个命令行窗口,然后cd到Apache安装目录(比如C:\program files\apache group\apache2),敲入以下命令:


bin\openssl req -config bin\openssl.cnf -new -out my-server.csr
你将被问及一句口令短语。请注意,不要使用简单的几个词,而应该输入一整个句子,比如一篇诗词的一部份,越长越好。同样,你还要输入你的服务器URL。然后其它的问题都是可选问答的,不过我建议你也将它们填充。

下一步,敲入以下命令:


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://localhost/svn/proj1


强制通过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>



没有评论:

发表评论