构建基于Apache的SVN服务器

(一)安装前准备

1. Apache服务器安装包

 
wget http://labs.mop.com/apache-mirror/httpd//httpd-2.4.2.tar.bz2
wget http://labs.mop.com/apache-mirror/httpd//httpd-2.4.2-deps.tar.bz2

2. apr和apr-util安装包

 
wget http://www.fayea.com/apache-mirror/apr/apr-1.4.6.tar.bz2
wget http://www.fayea.com/apache-mirror/apr/apr-util-1.4.1.tar.bz2

二、安装Apache

1. 安装apr

 
tar -jxvf apr-1.4.6.tar.bz2 -C /usr/src/
cd /usr/src/apr-1.4.6
./configure --prefix=/usr/local/apr
make 
make install 

2. 安装apr-util

 
tar -jxvf apr-util-1.4.1.tar.bz2 -C /usr/src
cd /usr/src/apr-util-1.4.1
./configure --with-apr=/usr/local/apr
make
make install 

3. 安装Apache

 
tar -jxvf httpd-2.4.2.tar.bz2 -C /usr/src
tar -jxvf httpd-2.4.2-deps-tar.bz2 -C /usr/src
cd /usr/src/httpd-2.4.2
./configure \
--prefix=/usr/local/apache2 \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr/bin/apu-1-config \
--enable-modules-so \
--enable-dav \
--enable-maintainer-mode \
--enable-rewrite
make
make install 

默认安装目录为/usr/local/apache2。
安装后启动:

 
apachectl -k start

设置为开机启动:

 
chkconfig httpd on 

如果出现错误:

 
httpd: Could not reliably determine the server's fully qualified domain name, 
using ** for ServerName

在/etc/httpd/conf/httpd.conf中取消ServerName的注释即可。
验证Apache是否安装成功:
启动浏览器,输入http://localhost/,看是否有Apache的测试页面。

(三)安装subversion

由于用源码包安装会遇到版本和兼容性问题,比较不方便,以下用yum来安装。
1. 安装

 
yum install subversion mod_dav_svn

其中:
subversion为主程序包
mod_dav_svn是apache用到的功能模块 

(四)创建SVN版本库

 
mkdir -p /opt/svn #根目录
svnadmin create /opt/svn/svn/svntest #svntest项目
#修改svn库的所有者,readable and writable by apache user.
chown -R apache.apache svntest
chcon -R -t httpd_sys_content_t svntest
#change file SELinux security context. labelled with the 'httpd_sys_content_t'
#if using SELinux 

(五)创建SVN用户文件

#创建用户文件passwd,添加一个用户
# -c表示创建,-m采用MD5加密密码

htpasswd -cm passwd username  

会显示:

 
htpasswd -cm passwd username 
New password:
Re-type new passwd:
Adding password for user username 

如果还需要添加用户:

htpasswd -m passwd anotherusername 

只有第一次才需要-c 
删除用户:

htpasswd -D passwd username  

(六)创建SVN访问权限控制文件

cd /opt/svn
touch authz

编辑authz:

[group]
group1=user1, user2 
[svntest:/]
@group=r
user1=rw 

(七)配置Apache以支持SVN

Apache中SVN的配置文件为:/etc/httpd/conf.d/subversion.conf
其中必须有以下两行,没有则自行添加:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so 

添加:

 
    DAV svn
    SVNParentPath /opt/svn               #svn的根目录
    AuthType Basic                       #Basic认证方式
    AuthName "Subversion"                #认证时显示的信息
    AuthUserFile /opt/svn/passwd         #用户文件
    AuthzSVNAccessFile  /opt/svn/authz   #访问权限控制文件
    Require valid-user                   #要求真实用户,不能匿名
 

(八)测试

service httpd start 


在浏览器中输入

URL:http://localhost/svn/svntest/ 

会弹出一个认证窗口,通过认证后即可访问svntest项目。 

(九)验证方式

Basic和Digest都是Web应用可采用的验证机制。
Basic验证使用原文传送秘密,所以应该只通过加密的传输途径发送,如HTTPS。
Digest保证不会通过纯文本发送证书,如果使用没有加密的HTTP,还希望达到最大
安全性的时候,摘要验证便具有很高的吸引力。
在/etc/httpd/conf.d/subversion.conf中:

AuthType Digest
AuthName "Subversion"

在/opt/svn下
格式:htdigest -c passwdfile realm username

htdigest -c digest "Subversion" username
htdigest digest "Subversion" anotherusername 

(十)问题解决

http://localhosts/svn/
显示:

Forbidden
You don't have permission to access /svn/ on this server.

决绝措施:
在/opt/svn/authz中增加权限:

[/]
username = r

/etc/httpd/conf.d/subversion.conf中修改
改成
SVNParentPath /opt/svn改成SVNParentPath /opt/svn/
添加:

SVNListParentPath on 

OK,重启httpd后再访问就有:

Collection of Repositories
Author
yujiankd @ csdn
Reference

(十一)参考

[1] http://baike.baidu.com/view/429581.htm 
[2] http://www.cnblogs.com/sunyubo/archive/2010/05/25/2282164.html 
[3] http://ybhanxiao.iteye.com/blog/1280999 


发布日期:

所属分类: Apache/Ngnix, 后端 标签: