丁亮的个人博客   Java/Go/Linux/开源

GitHub 上 Star 数最多的 Java 博客 Solo
Golang 黑科技之在线 IDE Wide
黑客与画家的社区 Sym

安装基于Apache的Subversion服务器

    1. 引言

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

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

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

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

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

    一旦你已经有了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,如果呈现了一个已经配置好的网站,那么你的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),修改以下内容:

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


    #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

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

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


    <Location /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),然后打入以下命令以创建文件:


    bin\htpasswd -c passwd <username>
    重启Apache服务。

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

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

    <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如果你想让所有用户对版本库都有读的权限而只有特定的用户才有写的权限,你可以将这行


    Require valid-user
    改为


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


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


    [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

    以上介绍的配置为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/proj1
    还有一种配置方式为Apache单库方式,即一个location只能为一个版本库服务,
    配置时只要将上面的SVNParentPath改为SVNPath,同时将后面的路径由版本库的父目录改为版本库的目录
    如:


    <Location /svn>
    SVNPath D:\SVN\proj1
    AuthType Basic
    AuthName "Subversion repositories"
    AuthUserFile D:\passwd
    #AuthzSVNAccessFile D:\svnaccessfile
    Require valid-user
    </Location>
    这时,可以用下面的URL来访问版本库proj1


    http://192.168.0.1/svn

     
    ---- EOF ----
    点击加入开源技术 Q 群 242561391,让学习和分享成为一种习惯!
    validate