Subversion+Apache的源码服务器搭建

++ 版本库搭建
为工作需要,要架设一个Subversion+Apache的源码服务器.以便协同工作,以下是整理的安装过程和一些注意事项。

++++安装APACHE软件:apache_2.2.6-win32-x86-openssl-0.9.8e.exe(带ssl版本)

##说明,如果下载安装不带openssl版本,以后配置mod_ssl.so模块时可能会有点麻烦,出些小问题。
##安装时不需要改动或添加很多信息,一般来说直接点Next即可。domain以及host可设置为localhost,Email可任意填写.但很重要的一点:安装apache时,80端口不能被占用,否则http服务无法启动。
###装好apache后,http服务自动运行,可在浏览器地址栏中输入http://localhost 查看是否安装成功。


++++安装Subversion:Binary Code:svn-1.4.6-setup.exe或编译好的解压缩文件svn-win32-1.4.6.zip(推荐)

##说明:注意subversion和Apache的版本搭配
##如果采用编译好的zip文件,直接解压缩即可。采用exe文件根据指导安装,如果Subversion检测到已安装的Apache,会自动完成配置工作。如果之前未安装或本版不配合导致未检测到,需要容一些额外的设置步骤。
##以%SVN_DIR%代表SVN安装目录,%APACHE_DIR%代表APACHE安装目录
    步骤1 从%SVN_DIR%/bin 中将mod_authz_svn.so mod_dav_svn.so复制到%APACHE_DIR%/modules中
    步骤2 从%SVN_DIR%/bin 中将intl3_svn.dll libdb*.dll复制到%APACHE_DIR%/bin中
    步骤3 打开(记事本即可)%APACHE_DIR%/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
   
    QT:采用exe安装后提示dav_svn_module签名版本不对?

++++配置服务

##编辑%APACHE_DIR%/conf/httpd.conf文件,

添加下面代码,位置不限
anchor: httpd
<Location /svn/>                       
DAV svn
SVNListParentPath on
#SVNPathAuthz off
SVNParentPath "D:/SVN"

#SVNIndexXSLT "/svnindex.xsl"
SSLRequireSSL
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile "D:/svndata/passwd"

AuthzSVNAccessFile "D:/svndata/svnaccessfile"
#<LimitExcept GET PROPFIND OPTIONS REPORT>
#Require valid-user
#</LimitExcept>
#Satisfy Any
Require valid-user
</Location>

##备注: <Location /svn/>可列出C:/svndata下的所有版本库,若为<Location /svn>则不能访问,此时http://127.0.0.1/svn (https://127.0.0.1/svn)和http://127.0.0.1/svn(https://127.0.0.1/svn)无效,只能单独访问其中一个版本库,如https://127.0.0.1/svn/proj1 (假设proj1是个已存在的单独版本库),推荐使用/svn/这种方式。

说明
设置    解释   
<Location /svn>         Subversion版本库的URL是http://Server/svn/    (Server:IP/DNS可解析的名字/本机:localhost)
DAV svn                    通知Apache:哪个模块响应上述URL的请求,svn代表是Subversion模块。   
SVNListParentPath on    对于Subversion1.3或者更高版本,显示所有SVNParentPath下的版本库。   
SVNParentPath D:/SVN    通知Subversion需要查看的版本库位于D:/SVN之下   
SVNIndexXSLT "/svnindex.xsl"    使用该选项可以在用浏览器浏览时更好看。   
AuthType Basic            激活基本认证,就是用户名/密码   
AuthName "Subversion repositories"    用来说明何时弹出要求用户输入认证信息的认证对话框
SSLRequireSSL           必须采用安全连接,https:// 方式访问   
AuthUserFile passwd        指定使用的认证密码文件   
AuthzSVNAccessFile        指定Subversion版本库的访问控制文件的路径   
Require valid-user        指定只有输入正确的用户/密码的用户才可访问本URL   

++++建立版本库
    与上述配置对应,需要在D驱动器建立目录SVN,其中包含多各项目的代码版本库,假设名proj1、proj2、proj3,建立了版本库命令如下(命令行方式):
    %SVN_DIR%/bin/svnadmin create --fs-type fsfs D:/SVN/proj1
    %SVN_DIR%/bin/svnadmin create --fs-type fsfs D:/SVN/proj2
    %SVN_DIR%/bin/svnadmin create --fs-type fsfs D:/SVN/proj3
   
++++设置密码文件

##将用户名和密码(MD5加密)存储到特定配置文件中,初次创建文件命令如下;
    %APACHE_DIR%/bin/htpasswd -c passwd <username>
    ##即可在当前目录下创建passwd(可改名,移动到其他位置,任意取,只需与配置文件中AuthUserFile保持一致即可,<username>是要添加的用户名,如zhangsan,lisi等),以后添加用户可使用命令
    bin/htpasswd passwd <username>
##删除用户,使用命令:
    bin/htpasswd -D passwd user
   
++++设置权限文件

##用文本编辑器在AuthzSVNAccessFile所指定路径下生成名为svnaccessfile的文件(注意名称与配置文件一致,无扩展名),编辑内容如下:
    [groups]
    admin=lds
    develpteam1=zhangsan,lisi
    [/]
    * = r
    @admin = rw
    dangerman =
    [proj1:/]
    @admin = rw
    @developteam1=rw
    [proj2:/]
    @admin = r
    @developteam1=rw
    [proj3:/]
    @admin =
    @developteam1=
##基本含义是根目录下任何人有读权限,admin组有读写权限;admin对proj1读写权限,对proj2有读权限,对proj3没有任何权限,develop1组对对proj1读写权限,对proj2有读写权限,对proj3没有任何权限。
    补充说明:待考证两点-->1、没有指定某个版本库权限时,默认继承[/]权限设定(已验证),当[/]中未设定时,为不可读写。
                        -->2、对某特定版本库而言,没有指明某组或某用户权限时,继承[/]该项权限设定。
                        因此,推荐只有管理员组才可查看根目录。
##进一步设定读写目录权限:[MyProject:/module1]
##备注: 如果有中文路径,那要把文件存成UTF8格式

++++ [开启SSL]
请确认Apache已安装并可正常工作. 并且ssl需要的文件在如下的位置:
    %APACHE_DIR%/modules/mod_ssl.so
    %APACHE_DIR%/bin/openssl.exe, libeay32.dll, ssleay32.dll
    %APACHE_DIR%/conf/openssl.cnf           (openssl)


    bin/openssl req -config bin/openssl.cnf -new -out my-server.csr  
    bin/openssl rsa -in privkey.pem -out my-server.key
    bin/openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
bin/openssl x509 -in my-server.cert -out my-server.der.crt -outform DER


----------
创建SSL证书
----------
##1. 打开cmd, cd到%APACHE_DIR%/bin
##2. 运行
openssl req -config ../conf/openssl.cnf -new -out my-server.csr
    (注意, my-server是自己起的名字, 以下步骤中提到的my-server也是自己起的名字)
这一步需要设置一系列的问题, 包括密码(这个密码要记住, 以后要用) 和其他的问题. 全部完成之后会生成一个my-server.csr和 privkey.pem 文件在bin文件夹中.
##3. 运行
openssl rsa -in privkey.pem -out my-server.key
此时要输入密码, 就是步骤2中设定的密码
##4. 运行
openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
这将创建一个4000天后才过期的证书
#5. 运行
openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

全部运行过后这些命令会在bin文件夹中生成6个文件:
.cnt
privkey.pem
my-server.der.crt
my-server.scr
my-server.key
my-server.cert

  将这些文件移到conf/ssl目录中(如果不存在这个目录就创建一个, 这个步骤中放到其他的目录也可以,关键是记住文件的位置, 在接下来的设置中会用到)

----------
设置Apache支持SSL
----------
注意: 本设置步骤针对针对Apache 2.2.x版本, 如果正在使用的是Apache 2.0.x版本, 请摸索相似的设置.

    用文本编辑器打开%APPACHE_DIR%/conf/httpd.conf
    1. 去掉下面设置行前面的#
LoadModule ssl_module modules/mod_ssl.so
    2. 去掉下面设置行前面的# (在2.0.x版本中没有这一项)
Include conf/extra/httpd-ssl.conf

    3. 用文本编辑器打开%APPACHE_DIR%/conf/extra/httpd-ssl.conf
    更改如下设置.
SSLMutex  default
SSLCertificateFile "%APPACHE_DIR%/conf/ssl/my-server.der.crt"
SSLCertificateKeyFile "%APPACHE_DIR%/conf/ssl/my-server.key"
    说明:my-server的两个文件就是前一个步骤制作的文件, “%APPACHE_DIR%/conf/ssl/my-server.key”-->文件的位置就是这些文件在磁盘中的位置 (在2.0.x版本中这些设置仍然在 httpd.conf文件中进行)
----------
测试
----------
    1. 保存设置文件
    2. 在开始菜单中运行Apache的Test Configuration工具, 检查设置文件是否正确
    3. 重新启动Apache 2.2.x
    4. 顺利启动之后, 在浏览器中输入 https://localhost  看看是否可以访问, 如果可以访问, 则设置成功
----------
使用https访问版本库
----------
    可以选择修改%APACHE_DIR%/conf/httpd.conf,在<location>语句块中添加SSLRequireSSL语句强制使用ssl(即https连接方式)

++++QA
Q:HTTP 错误 403 - 禁止访问
Internet Explorer
-----------------------------------------------------------------------------------------------------
去掉显示友好信息的钩(IE设置中)
显示Forbidden   You don't have permission to access / on this server.
-----------------------------------------------------------------------------------------------------
A:
打开httpd.conf文件,找到如下代码段:
<Directory />
     Options FollowSymLinks
     AllowOverride None
     Order deny,allow
     deny from all
     Satisfy all
</Directory>
试着把deny from all中的deny改成了allow
保存后重启apache

相关推荐