Subversion+Apache 配置和管理

来源:互联网 发布:中文域名的作用 编辑:程序博客网 时间:2024/06/05 07:40

Subversion+Apache 配置和管理

“apache2.2 + svn1.74 + 虚拟目录 + 多项目版本 + 多用户” 的配置过程:

1、安装apache:apache_2.2.11-win32-x86-no_ssl.msi,双击安装程序,之后点击下一步,并按要求填写域名和邮箱(这个可以随便填写),直到安装完成,建议将Apache安装成 for all Users,on Port 80,as a service。注意:如果已经有一个IIS或者其它的程序使用80端口,安装可能会失败。如果是这样,可以到程序目录下的Apache Group\Apache2\conf目录中找到文件httpd.conf,将其中的Listen 80改成一个不用的端口,比如Listen 81。然后重新运行这个安装程序,这次应该不会再有问题了。现在你可以在你的浏览器中键入http://loccalhost,如果呈现了一个已经配置好的网站,那么你的Apache就安装成功了。

然后安装svn和TortoiseSVN-1.6.0.15855-win32-svn-1.6.0.msi。

2、Apache配置:原理如下,利用apache服务访问svn服务器,在apache服务启动时,加载svn启动库,客户就可以通过webdav的方式访问了。svn启动时需要必须加载的库是mod_dav_svn.so,如果需要对访问的repository进行用户和目录的权限设置,则需要mod_authz_svn.so库。这两个库都在%subversion%/bin目录下,先把这两个文件拷入到%apache%/modules目录下。从Subversion的安装目录拷贝文件libdb43.dll(或者libdb44.dll,根据自己的版本决定)到Apache的modules目录。

物理文件准备完毕,修改%apache%/conf/下面的httpd.conf文件。可以看到
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
也就是说,apache默认启动不是以webdav方式,去掉#,再下面添加如下两行
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
现在apache启动时会加载上面三个so。

在文件末尾加上如下内容,下面是比较简单的配置:
<Location /repos>                # "/repos"是在url上指定的访问路径,客户访问需要键入这个路径。
  DAV svn                             # 声明svn
  SVNPath E:/svn                 # "E:/svn"是服务器上svn的repository的目录。
#  SVNParentPath E:/svn    # 对于一个目录下存在多个工程的情况,可以声明这个变量。
# 在apache中配置svn有两种,可以混合使用,一种是apache自身的认证机制,对进入/repos目录的用户进行统一认证,
# 一种是应用svn的认证,可以深入到目录级别进行权限控制,和svn独立启动时设置权限一样。
### apache auth begin
  AuthType Basic                     
  AuthName "Subversion repository"    # 认证的名字
  AuthUserFile D:/svn_auth_file           # D:/svn_auth_file里面存放的是使用htpasswd -m D:/svn_auth_file user
                                                           # 生成的用户名与密码的加密文件。注意,此处的路径不能有空格。
  Require valid-user                            # 声明,必须是有效的用户才可以访问
### apache auth end

### svn auth begin 
  AuthzSVNAccessFile D:/svn_authz     # D:/svn_authz文件是根据%respository%/conf/authz的规则编写,其实就
                                                             # 是svn对用户权限读取的文件格式,mod_authz_svn.so要求的格式。
#  SVNIndexXSLT "d:/svnindex.xsl"       # d:/svnindex.xsl是用户可以自定义的显示模版,设计好模板,html上的显会更漂亮。
# authentication if necessary.
  Satisfy Any                         # 字面翻译是:都要满足,是声明用户要满足条件   
  Require valid-user                  # 声明,必须是有效的用户才可以访问
### svn auth end 
</Location>

如果是单资源库:

<Location /svn>
DAV svn
SVNPath E:\Repository
AuthType Basic
AuthName "Subversion Reporsitory"
AuthUserFile E:\Repository\conf\passwd
AuthzSVNAccessFile E:\Repository\conf\authz
Require valid-user
</Location>

如果是多资源库:

<Location /svn>

DAV svn

SVNListParentPath on

SVNParentPath E:\Resources\SVN\Repositories

AuthType Basic

AuthName "Subversion Reporsitory"

AuthUserFile E:\Resources\SVN\conf\passwd

AuthzSVNAccessFile E:\Resources\SVN\conf\authz

Require valid-user

</Location>

其中:<Location /svn>是指SVN服务的实例路径,需要用http://XXX.XXX.XXX.XX/svn/的方式才可以访问;E:\Resources\SVN\Repositories是资源库主目录;E:\Resources\SVN\conf是存放用户文件和权限文件的目录;E:\Resources\SVN\conf\passwd就是存放用户信息的文件,它是一个没有后缀的文件,用Apache的htpasswd.exe来维护,负责将用户的密码用MD5加密成暗文;E:\Resources\SVN\conf\authz就是存放访问权限的文件,它也是一个没有后缀的文本文件可以用文本工具直接编辑;AuthType Basic是认证类型,此处采用基本类型,即采用用户名+密码的方式;AuthName "Subversion Reporsitory"是指认证时代表示,起到提示作用;Require valid-user表示SVN必须提供用户和密码才可以访问,不能匿名登录。重启Apache,查看Apache Service Monitor状态栏是否包含“SVN/1.6.0  DAV/2”字样。在浏览器中输入http://******/svn/(其中******为你的主机域名地址或者IP地址),验证配置。

要创建passwd文件,可以打开命令行(DOS窗口),将当前目录切换到apache2目录(通常为c:\program files\apache group\apache2),然后打入以下命令以创建文件:bin\htpasswd -c passwd <username>,此命令执行bin目录下的htpasswd.exe来创建一个密码文件,重启Apache服务。

 

上面的配置仅仅是一个简单的示例。你还可以对Apache进行许许多多的配置。
1 如果你想让所有用户对版本库都有读的权限而只有特定的用户才有写的权限,你可以将这行

  1. Require valid-user
改为
  1. <LimitExcept GET PROPFIND OPTIONS REPORT>
  2. Require valid-user
  3. </LimitExcept>
2 上面的配置使用了passwd文件将你所有的版本库作为一个单元来限定访问权限。如果你想获得更多的控制,如限定某个用户可以访问版本库中的哪个目录,可以把下面这行的#去掉:
  1. #AuthzSVNAccessFile D:\svnaccessfile
复制代码然后用文本编辑器创建一个Subversion授权文件。Apache将确保只有有效的用户可以访问你的/svn位置,然后将用户名传到AuthzSVNAccessFile模块,这样可以依据Subversion授权文件得到更精细的权限控制。注意,路径将被指定为[库:路径]或者简单的[路径]。如果你不明确指定一个库,访问规则将应用到由SVNParentPath指定的目录下所有的版本库中。一个授权文件例子可能像这样:
  1. [groups]
  2. admin = john, kate
  3. devteam1 = john, rachel, sally
  4. devteam2 = kate, peter, mark
  5. docs = bob, jane, mike
  6. training = zak

  7. # 为所有库指定默认访问规则
  8. # 所有人可以读,管理员可以写,危险分子没有任何权限
  9. [/]
  10. * = r
  11. @admin = rw
  12. dangerman =

  13. # 允许开发人员可以完全访问他们的项目版本库
  14. [proj1:/]
  15. @devteam1 = rw
  16. [proj2:/]
  17. @devteam2 = rw
  18. [bigproj:/]
  19. @devteam1 = rw
  20. @devteam2 = rw
  21. trevor = rw

  22. # 文档编写人员对所有的docs目录有写权限
  23. [/trunk/doc]
  24. @docs = rw

  25. # 培训人员可以完全访问培训版本库
  26. [TrainingRepos:/]
  27. @training = rw


apache启动不了的解决办法:

一、运行CMD进入命令行模式,定位在apache的安装目录下的BIN目录。

二、输入此命令:httpd.exe -k install -n apache2 。这条命令的意思就是把apache服务做为系统服务以apache2做为服务名进行安装。

三、安装完成后,运行: net start apache2。即可成功

 

Winsock的异常将会导致Apache2.2.8服务无法启动(具体为httpd.exe程序无法启动),其错误日志error.log文件将会有如下提示:(OS10022)提供了一个无效的参数。  : Child500: setup_inherited_listeners(), WSASocket failed to open theinherited socket.
但系统日志不一定会出现该setup_inherited_listeners错误信息,反而可能会出现“httpd.exe:Could not reliably determine the server's fully qualified domainname, using xxx.xxx.xxx.xxx forServerName.”的错误信息,从而误导了排错方向。

如果系统能记录setup_inherited_listeners错误将会出现如下日志描述:

The Apache servicenamed  reported the following error:
>>> (OS10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 : make_sock: could not bind to address0.0.0.0:80.

解决方法是修复winsock,重置为初始状态即可。如果此方法无效,还要配合在网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾。


3、Apache的一般使用

安装好Apache后,我们可以在Apache的安装目录下找到htdocs文件夹,此文件夹就是默认网站的路径,可以在此文件夹里面保存网页文件,修改查看。

或者也可以新建虚拟目录:

使用Notepad++(或者记事本)打开D:/Apache/conf/httpd.conf文件,在最后添加一段代码

Listen 8088

<VirtualHost *:8088>

DocumentRoot "D:/jerry916/"

</VirtualHost>

我们使用了8088端口,这个端口大家可以随便指定,但不要和其它程序重复,不能使用80端口,因为IIS使用了80端口。保存文件。 重启Apache。

原创粉丝点击