您的位置:首页 > 运维架构 > Apache

基于 Apache 的服务器Subversion安装与配置

2017-05-08 02:23 393 查看
源代码管理, 做为程序员来讲应该是经常使用的.在源代码管理中, 以Apache + Subversion的方式最为方便好用了. 对于这个安装配置, 其实很简单, 但如果是第一次搞, 可能还是会很郁闷的, 有些小细节需要掌握. 下面就以Windows2003上配置Apache + Subversion + TortoiseSVN来讲下如何配置.

一. 安装Apache

1. 在 http://httpd.apache.org/download.cgi 下载2.0以上版本(推荐使用2.0以上的)

2. 下载Windows版本就可以了, 直接安装, 这个一般人都会, 没有什么交待的.

二. 安装Subversion

1. 在 http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100.下载Subversion版本, 下载完后是一个压缩文件,
如是Exe则直接安装就可以了.如果是压缩文件, 则直接解压到某个目录, 然后把环境变量的Path中加上这个目录中Bin目录所在路径就可以了. 安装Subversion成功的标识就是在命令行中敲入svn 回车会得到"使用svn help 得到用法" 的提示即Ok了.

2. 在安装Subversion时(如果是Exe程序的), 会弹出Apache服务器, 根据你前面选择的Apaceh版本选择对应的, 如果是最新的Apache的话, 应该是2.2.X版本的.

3. 双击Apache右下角的Apache Server Monitor 如下图所示, 同为安装成功.





图1

4. 如果没有, 则需要下面的手功操作:

 

  1). 到Subversion的安装目录(通常是
c:\program
files\Subversion
),找到文件
/httpd/mod_dav_svn.so
mod_authz_svn.so
,复制这些文件到Apache的模块目录(通常是
c:\program files\apache group\apache2\modules 


 

2). 使用记事本之类的文本编辑器修改Apache的配置文件(通常是 
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
),做出如下修改:

去掉以下几行的注释(删除 '#'标记):

    #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

 

 3). 从 Subversion 安装目录bin下的:intl3_svn.dll, libapr-1.dll, libapriconv-1.dll, libaprutil-1.dll, libeay32.dll, ssleay32.dll
 
 复制到
Apache 的 bin 目录(如果不行, 就把所有的DLL到复制过去)
 


 4).重新启动Apache, 应该就可以看到图1所示的内容了.


 

三. 安装TortoiseSVN:

TortoiseSVN 是一个开源项目,那意味着你可以访问程序所有的源代码,你可以在http://tortoisesvn.tigris.org/svn/tortoisesvn/ 浏览代码(用户名:
guest,密码为空)。

四. 下面进行SVN的配置了.

1. 假设我想把SVN的版本库放在E:\svn目录下, 则新建一个目录: E:\svn, 在这个目录里新建一个用于测试的版本库test, 这样, 就有了一个目录E:\svn\test\, 保证此目录里是空的, 没有任何内容. 然后在目录E:\svn\test目录中,右键菜单中点击TortoiseSVN -> 在此创建版本库. 这样就会生成一堆文件. 或者用命令行方式创建版本库也可以.

2. 编辑 Apache 的配置文件(通常在 
c:\program files\apache group\apache2\conf\httpd.conf
), 在最后面加上如下内容:

<Location /svn>

  DAV svn

  SVNListParentPath on

  SVNParentPath "E:\svn"
  AuthType Basic

  AuthName "Subversion repositories"

  #AuthUserFile "E:\svn\passwd"

  #AuthzSVNAccessFile "E:\svn\Access.conf"

  Require valid-user

</Location>

重新启动Apache, 在浏览器中直接输入: http://127.0.0.1/svn/test/ 你就可以看到版本库中的文件了, 用TortoiseSVN直接访问版本库, 不用输入任何用户名和密码, 一路确定过去, 也可以看到版本库内容了.





图2


 

3. 下面进行添加用户.

为了创建 
passwd
 文件,再次打开命令行提示符(DOS 窗口),进入 
apache2
 目录(通常是 
C:\Program Files\Apache Software Foundation\Apache2.2\bin
),通过输入下面的命令创建文件:

htpasswd -c passwd <username>

在这里以用户名为tianjp为例, 则输入htpasswd -c passwd tianjp 回车

这时, 在C:\Program Files\Apache Software Foundation\Apache2.2\bin\目录下会多出一个文件passwd, 把此文件复制到E:\svn\ 目录下, 用UE打开看看, 发现是这样的:

tianjp:$apr1$4gDi43NL$yTTrdUFmDUST44DuBRbSj0

很明显, 是用户名: 后面是经过加密后的密码了.

好了, 现在有了用户名了, 我们可以把上面的配置改成如下了:

<Location /svn>

  DAV svn

  SVNListParentPath on

  SVNParentPath "E:\svn"

  #SVNIndexXSLT "/svnindex.xsl"
  AuthType Basic

  AuthName "Subversion repositories"

  AuthUserFile "E:\svn\passwd"

  #AuthzSVNAccessFile "E:\svn\Access.conf"

  Require valid-user

</Location>


再次用户TortoiseSVN浏览时, 就要输入用户名和密码了.

 





图3





图4





图5

 

4. 管理版本库;

自然有了用户后, 就要进行一些限制, 比如谁可以访问, 谁可以提交代码等权限管理.

这时我们又要做一件事情. 用记事本编辑如下内容:

[groups]

AdminGroup = tianjp, test

CodeGroup = qicf,zhoub,wusy,mitj,xiezj,wanggc,yangming,linxx,yangc,gaozw,luochl,tansd,qicf,zhuhl,gbq

GuestGroup = guest

[/]

* = r

@AdminGroup = rw

@GuestGroup = r

[test:/]

* = r

@AdminGroup = rw

@CodeGroup = rw

 

另存为到E:\svn\Access.conf 文件上(文件名随便取, 不一定非要叫access.conf的).这样tianjp所在的AdminGroup组在test版本库下是具有rw权限的了.
相信上面的配置很简单, 大家一看就明白.

别忘了, 把配置文件里的这一行: #AuthzSVNAccessFile "E:\svn\Access.conf" 注释去掉

这样, 最后就变成了:

<Location /svn>

  DAV svn

  SVNListParentPath on

  SVNParentPath "E:\svn"

  #SVNIndexXSLT "/svnindex.xsl"

  AuthType Basic

  AuthName "Subversion repositories"

  AuthUserFile "E:\svn\passwd"

  AuthzSVNAccessFile "E:\svn\Access.conf"

  Require valid-user

</Location>

到此, 完成了SVN服务器的搭建工作.

 

下面介绍下关于域控制下的SVN权限设置. 很多公司现在是基于域来管理用户的. 用上面的方式来管理版本库有个问题, 就是用户的密码要想改的话, 自己没办法修改, 必须要到管理员那去, 很不方便. 这样用域来管理用户密码不矢为良策.

使用 Windows 域认证

在这里, 我们需要一个模块: mod_auth_sspi

到这里下载 http://sourceforge.net/projects/mod-auth-sspi/  下载此匹配你的 Apache 版本的模块,将文件
mod_auth_sspi.so
复制到
Apache 的 modules 目录, 编辑 Apache 的配置文件: 增加一行

LoadModule sspi_auth_module modules/mod_auth_sspi.so

 

到 LoadModule 节。确认你在下行之前插入此行

LoadModule auth_module modules/mod_auth.so

为了让 Subversion 领域使用此认证类型,你需要将

AuthType Basic

修改为

AuthType SSPI

修改后的配置如下:

<location />

  # how to authenticate a user
  AuthType SSPI

  AuthName "Grandsoft SVN repository"

  SSPIAuth On

  SSPIAuthoritative On

  #SSPIDomain <你的域名称> 在这里是GRANDSOFT

  #如果你没有域控制器,可以将域控制器的名称置为 
<domaincontroller>


  SSPIDomain GRANDSOFT

  SSPIOmitDomain on

  SSPIUsernameCase lower

  SSPIPerRequestAuth on

  SSPIOfferBasic On

  require valid-user

</location>

<location /svn>

  DAV svn

  SVNParentPath "E:\svn"

  SVNListParentPath on

# our access control policy

  AuthzSVNAccessFile "E:\svn\Access.conf"                           

</location>

 

OK, 到此你可以使用域账号登陆了.

 

其它疑难杂症:

1. 我在经过上面的配置后, 发现在用浏览器访问版本库时没有问题, 但在用TortoiseSVN访问时, 老是报405的一个错误:

服务器发送了意外的返回值(405 Method not Allowed), 在响应"PROPFIND"的请求 "/svn/test" 中

, 郁闷了很久, 最后终于有牛人告诉我, 把Apache配置里的

LoadModule dir_module modules/mod_dir.so 这名给注释掉就OK了. 结果果然是这样, 为什么? 不知道.

2. 多重认证源问题: 有兴趣的可以自己再学习下了.

3. 还是那名话, 知之为知之, 不知为不知, 是知也. 很简单的问题, 会者不难, 难者不会.真是有道理啊.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: