日期:2014-05-17  浏览次数:20877 次

Windows server 2003 下Appache 和 Subversion 进行双向认证(一)

去年转到Subversion下后,确实尝到了Subversion的不少甜头,那个时候开发比较集中,绝大部分开发人员都不进行异地开发,因而一直使用Subversion 自带的svnserve服务器运行版本服务。随着公司业务的发展软件开发人员开发场地的分散,版本问题突显,为了解决这个问题,我不得不停下手头的工作研究下如何配置到外网上去。谁让我编程以外还得处理配置管理问题呢?!!经过一番Google和Baidu,总算搞定。做这记录在这里备忘.

本文阅读者必须已经能够熟悉使用SVN及理解版本库之类配置管理的基本概念,这里不对SVN安装配置这些东西作说明,官方文档已经说的够清楚了.
以下是我所用的资源信息:
??? OS????????????????? : Windows Server 2003
??? SVN?????????????? :?? svn-1.4.6-setup.exe
??? HTTP Server :?? apache_2.2.6-win32-x86-openssl-0.9.8e.msi
?? Text Editor????? :?? gvim72.exe

一. Apache 服务器安装及配置
????? 到apache官方http://archive.apache.org/dist/httpd/binaries/win32/下载apache服务器 2.2.6(包含openssl)的版本,一定要2.2.6以上的版本,第一次我下的2.0的结果累死也不对,Google了下才发现svn1.4.6和apache 2.0的版本结合不起来……,当然可以不下含用openssl的版本,不过你可能需要到http://www.openssl.org/ 下载openssl并安装,或许要编译,我比较懒,没有去弄,也许你可以试试.

????? 有Windows操作经验的人都会安装,我安装的路径是默认的C:\Program Files\Apache Software Foundation\Apache2.2,反正随你便.安装成功后,服务器会自动启动,如果没有启动,检查端口80是否已被占用。你也可以在安装目录下的bin文件里找到ApacheMonitor.exe启动服务,再出错,就打开/logs/下的日志看看去Google 一下,我已经够啰嗦的了。

????? 验证下:浏览器地址栏中输入:http://localhost ,你将会看到 It works!. Apache就算安完啦!

二. 让SVN运行起来

???? 网上很多说先安装Apache ,再安装svn,SVN会自动配置到Apache里,但是对于我这种SVN已经很好地运行着的情况,我可不愿把它卸载掉再重新装起来,吃饱了撑着!幸好svn官方把这种情况考虑到了,那就照着说明来吧。Let’s Go!
???? a) 告诉它要做什么
???????????? Apache并不知道它将做什么样的服务,我们得告诉它应该运行什么.
???????????? 找到Subversion的安装目录,我的在C:\Program Files\Subversion\下面,进入bin目录。把下面的
???????? mod_authz_svn.so, mod_dav_svn.so,libdb44.dll拷贝到Apache安装目录的conf文件夹下面(例如我的
???????? 就是C:\Program Files\Apache Software Foundation\Apache2.2\conf下).
??????? 用文本编辑器(比如Ultraedit 32, Editplus,最好别用写字板和记事本.我最近对Linux下的工具比较感兴
???????? 趣,所以用的是NT下的gvim,根linux下的基本一样,很好用而且免费)打开Apache安装目录下的
??????? /conf/ httpd.conf.找到
??????????????? #LoadModule dav_module modules/mod_dav.so ??????????
??????????????? #LoadModule dav_fs_module modules/mod_dav_fs.so???
???????? 两行,去掉前面的注释符#, 然后在这一系列LoadModule的最后面加上
?????????????? LoadModule dav_svn_module modules/mod_dav_svn.so????
?????????????? LoadModule authz_svn_module modules/mod_authz_svn.so
???????? 不一定非要在最后,便这两行必须在mod_dav.so的后面,但是我建议你放到后面好些。
???????? 这样Apache就会知道在启动时加载svn的模块与身份认证模块了
?????? b) 我在哪里
?????????????? 前面只是告诉Apache要做什么,但是仓库在哪里,Apache一点也不知道,因而你还得告诉它你的配
????????? 置库在哪个位置.
?????????????? 还是在httpd.conf里,到最后一行,加入
??????????????????? <Location /svn>???????????????????????????????
????????????????????????? DAV svn?????????????????????????????????????
????????????????????????? SVNParentPath D:\svnServices??
??????????????????? </Location>?????????????????????????????????????
??????????? 保存,重启服务器.

????????? 作点说明:
??????????????? <Location /svn>中的/svn标识了svn服务的根路径.表示你所有项目库服务都基于http://ip:port/svn/
????????? 下的./svn命名随你喜欢
?????????????? DAV svn 指示DAV模块,老实说,现在我也不清楚它的具体作用,不用变它
?????????????? SVNParentPath , 指示SVN仓库父目录的所在地,相当于svnserve -d -r D:\svnServices 中的??
????????? -r 参数.

?????????????? 另外,Subversion与Apache版本不一致时,就是在这里重启不了,害我重查了几次配置文件和说
????????? 明文档。

????????? 验证一下:
?????????????? 如果你的配置管理库和我采用的管理方式有着一样的结构
????????????????????? / svnServices /repse1
???????????????????? / svnServices /repse2
?????????????? 那么你就应该可以通过http://localhost/svn/repse1 看到repse1的源码库目录,那么恭喜你,
????????? 基于http 的 svn服务器已经正确运行了.

??????? c) 别高兴太早-安全问题
?????????????????? 随便找台开发机,checkout, edit, commit, update,看下吧,肯定吓