Joinclass Inc  
软件开发 软件配置 项目管理 软件工程
公告
  • 本人联系方式: E-mail: tilanmaster@gmail.com msm: J.joy@msn.com
日历
统计
  • 随笔 - 53
  • 文章 - 52
  • 评论 - 67
  • 引用 - 0

导航

常用链接

留言簿(1)

随笔分类(53)

随笔档案(53)

文章分类(61)

相册

JAVA学习链接

搜索

  •  

积分与排名

  • 积分 - 90093
  • 排名 - 77

最新评论

阅读排行榜

评论排行榜

 

关键词: subversion 安装 服务器 配置 apache ssl

-----------------------------

1.
引言

2.
安装过程
2.1.
安装 Apache
2.2.
安装
Subversion
2.3.
配置

2.4.
使用 SSL 来保护你的服务器

摘要

本文是 TortoiseSVN1.3.5 帮助中关于配置服务器一节的翻译,根据行文需要做了一些调整与增减。英文原文参见 TortoiseSVN1.3.5 帮助的 3.1. Apache Based Server

要使用 TortoiseSVN (或者其它的 Subversion 客户端),你要有一个存放版本库的地方。你可以将版本库存放在本机,使用 file:// 协议来访问,也可以将它们放在一个服务器上,使用 http:// svn:// 协议来访问。两种服务器协议( http:// svn:// )也可以被加密成 https:// svn+ssh:// 。下面将一步一步地为你展示如何在 windows 上配置这样一个服务器。

如果你没有服务器或者你只想单独地工作,那么将版本库存放在本机并使用 file:// 协议来访问是你最好的选择,这样的话,你可以略过本文。

注意:目前 windows 下的 subversion 只能跟 Apache2.0.x 配合,不能用于 Apache2.2.x ,除非你自己编译

1.
引言
在所有的 Subversion 服务器配置方式中,基于 Apache 的是最灵活的。虽然配置起来有一点点复杂,但是它提供了其它方式所没有的好处:

QUOTE:

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

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

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

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


2.
安装过程
2.1.
安装 Apache
安装 Apache 前,你要有一台运行 Windows2000 Windows XP + sp1 Windows2003 的电脑。

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

http://httpd.apache.org/download.cgi 下载最新版本的 Apache Web 服务器。确保你下载的版本大于 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 :81 ,如果呈现了一个已经配置好的网站,那么你的 Apache 就安装成功了。

警告

如果你将 Apache 安装成一个服务,它将以本地 system 帐户来运行。为 Apache 创建一个单独的用户来运行它将会更安全一些。

请确保运行 Apache 的用户有版本库的完全访问权限(右键版本库目录 -> 属性 -> 安全)。要不然,用户将无法提交他们的更改。

就算 Apache 以本机 system 来运行,你也要设置它能完全读写版本库目录。

如果没有为 Apache 配置这个许可,用户将会得到 " 禁止访问 " 的错误信息,在 Apache 的错误日志中表现为错误 500

2.2.
安装 Subversion
http://subversion.tigris.org/ser ... entList?folderID=91 ( 英文 )

http://www.iusesvn.com/bbs/forumdisplay.php?fid=7
(中文)下载最新版本的 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 目录。

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

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

[Copy to clipboard]

CODE:

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


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

[Copy to clipboard]

CODE:

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


2.3.
配置
现在,你已经安装了 Apache Subversion ,但是 Apache 还不知道如果处理像 TortoiseSVN 一样的 Subversion 客户端。要让 Apache 知道哪个 URL 将被 Subversion 使用,你要像下面这样编辑 Apache 的配置文件(通常在 c:\program files\apache group\apache2\conf\httpd.conf ):

在配置文件的最后添加下面这些行:

[Copy to clipboard]

CODE:

<Location /svn>
DAV svn
SVNParentPath D:\SVN
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>


这样配置表示:你所有的版本库将位于 D:\SVN 目录下,要访问你的版本库可以使用这样的 URL http://MyServer/svn/ ,访问权限将由 passwd 文件中的用户名 / 密码来限制。

要创建 passwd 文件,可以打开命令行 (DOS 窗口 ) ,将当前目录切换到 apache2 目录(通常为 c:\program files\apache group\apache2 ),然后打入以下命令以创建文件:

[Copy to clipboard]

CODE:

bin\htpasswd -c passwd <username>


重启 Apache 服务。

将你的浏览器指向 http://MyServer/svn/MyNewRepository(MyNewRepository 是你之前创建的 Subversion 版本库 ) 。如果一切正常,你将被提示输入用户名密码,输入正确的用户名密码后你就可以看到版本库中的内容了。

对你刚刚输入的 apache 配置作一些简短的说明:

QUOTE:

<Location /svn>

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

DAV svn

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

SVNListParentPath on

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

SVNParentPath D:\SVN

告诉 Subversion 在目录 D:\SVN 下寻找版本库

AuthType Basic

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

AuthName "Subversion repositories"

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

AuthUserFile D:\passwd

指定 D:\passwd 用为密码文件用来验证用户的用户名及密码

AuthzSVNAccessFile D:\svnaccessfile

指定 D:\svnaccessfile 来限定各个用户或组在版本库中目录的访问权限

Require valid-user

限定用户只有输入正确的用户名及密码后才能访问这个路径


----------------------------------------

上面的配置仅仅是一个简单的示例。你还可以对 Apache 进行许许多多的配置。

1
如果你想让所有用户对版本库都有读的权限而只有特定的用户才有写的权限,你可以将这行

[Copy to clipboard]

CODE:

Require valid-user


改为

[Copy to clipboard]

CODE:

<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>


2
上面的配置使用了 passwd 文件将你所有的版本库作为一个单元来限定访问权限。如果你想获得更多的控制,如限定某个用户可以访问版本库中的哪个目录,可以把下面这行的 # 去掉:

[Copy to clipboard]

CODE:

#AuthzSVNAccessFile D:\svnaccessfile


然后用文本编辑器创建一个 Subversion 授权文件。 Apache 将确保只有有效的用户可以访问你的 /svn 位置,然后将用户名传到 AuthzSVNAccessFile 模块,这样可以依据 Subversion 授权文件得到更精细的权限控制。注意,路径将被指定为 [ : 路径 ] 或者简单的 [ 路径 ] 。如果你不明确指定一个库,访问规则将应用到由 SVNParentPath 指定的目录下所有的版本库中。一个授权文件例子可能像这样:

[Copy to clipboard]

CODE:

[groups]
admin = john, kate
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


2.4.
使用 SSL 来保护你的服务器
因为美国出口限制,默认安装的 Apache 服务器不支持 SSL 。但是你自己可以很容易地在其它地方下载到所需要的模块,然后安装它。

首先你需要 SSL 的必需文件。你可以 http://hunter.campbus.com/ 或这里找到相应的软件包(或者下载本主题的附件 1

附件 : mod_ssl_etc.rar (2006-10-16 15:30, 595.45 K)
该附件被下载次数 103
)。然后只要将包解开将其中的 mod_ssl.so 拷到 Apache modules 目录、 openssl.exe libeay32.dll ssleay32.dll 拷到 bin 目录、 conf/ssl.conf 拷到 conf 目录。

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

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

[Copy to clipboard]

CODE:

DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog logs/error_log
TransferLog logs/access_log


修改

[Copy to clipboard]

CODE:

SSLCertificateFile conf/ssl.crt/server.crt


[Copy to clipboard]

CODE:

SSLCertificateFile conf/ssl/my-server.cert


修改

[Copy to clipboard]

CODE:

SSLCertificateKeyFile conf/ssl.key/server.key


[Copy to clipboard]

CODE:

SSLCertificateKeyFile conf/ssl/my-server.key


修改

[Copy to clipboard]

CODE:

SSLMutex file:logs/ssl_mutex


[Copy to clipboard]

CODE:

SSLMutex default


删除以下两行 ( 如果有 )

[Copy to clipboard]

CODE:

<IfDefine SSL>
</IfDefine>


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

[Copy to clipboard]

CODE:

#LoadModule ssl_module modules/mod_ssl.so


Openssl
需要一个配置文件。你可以从这里下载一个可工作的版本 http://tud.at/programm/openssl.cnf ( 或者本主题附件 2

附件 : openssl.cnf.rar (2006-9-10 19:11, 1.21 K)
该附件被下载次数 74
)
。将它保存到 bin/openssl.cnf

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

[Copy to clipboard]

CODE:

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


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

下一步,敲入以下命令:

[Copy to clipboard]

CODE:

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


以及(注意,只有一行)

[Copy to clipboard]

CODE:

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


这样将创建一个 4000 天后才过期的证书。最后敲入:

[Copy to clipboard]

CODE:

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

QUOTE:

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

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

[Copy to clipboard]

CODE:

http://192.168.0.1/svn/proj1



[Copy to clipboard]

CODE:

http://192.168.0.1/svn/proj1


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

[Copy to clipboard]

CODE:

<Location /svn>
SVNPath D:\SVN\proj1
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:\passwd
#AuthzSVNAccessFile D:\svnaccessfile
Require valid-user
</Location>


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

[Copy to clipboard]

CODE:

http://192.168.0.1/svn

posted on 2006-11-20 16:16 Joinclass Inc 阅读(707) 评论(0)  编辑 收藏 引用 所属分类: 配置管理
只有注册用户登录后才能发表评论。
 
Copyright © Joinclass Inc Powered by: 博客园 模板提供:沪江博客