++ 版本库搭建
为工作需要,要架设一个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服务自动运行,可在浏览器地址栏中输入 查看是否安装成功。
++++安装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>则不能访问,此时 (https://127.0.0.1/svn)和(https://127.0.0.1/svn)无效,只能单独访问其中一个版本库,如https://127.0.0.1/svn/proj1 (假设proj1是个已存在的单独版本库),推荐使用/svn/这种方式。
说明
设置 解释
<Location /svn> Subversion版本库的URL是 (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
Subversion+Apache的源码服务器搭建
内容版权声明:除非注明,否则皆为本站原创文章。