Apache+subversion配置过程。
一、工具准备
Apache Web服务器:httpd-2.0.61.tar.gz
Subversion源码包及依赖包:subversion-1.4.3.tar.gz ,subversion-deps-1.4.3.tar.gz
都放到/home/project1下。
二,安装Apache
Apache的安装要记得打开dav模块和动态模块选项。安装安装命令如下:
tar –zxvf httpd-2.0.61.tar.gz
cd httpd-2.0.61
./configure –enable-dav –enable-so
(这样是默认安装到/usr/local/apache2里面,和
./configure –-prefix=/usr/local/apache2 –enable-dav –enable-so 效果一样)
make
make install
三、安装Subversion
SVN的安装一定要注意:
1,svn依赖的APR的版本要正确。如果apache为2.0.x,对应的APR版本应为0.9.x;Apache为2.2.x,对应的APR版本应为1.2.x。 由于subversion-deps包里的APR是0.9.x的,因此编译svn时要删除从deps里解压出来的apr, apr-util,改而使用apache 2.2里提供的。
2,如果apache不是安装在默认路径,configure必須加上--with-apxs选项,如:./configure --with-apxs=/home/apache2/bin/apxs(你的apahce的安装路径里面的apxs,但最好还是 加上吧)。
安装命令:
tar –zxvf subversion-1.4.3.tar.gz
tar –zxvf subversion-deps-1.4.3.tar.gz
# subversion-deps的文件也会解压到subversion-1.4.3目录中
cd subversion-1.4.3
./configure –prefix=/usr/local/subversion –with-apxs=/home/apache2/bin/apxs
make
make install
(这边我的apache版本里的APR和subversion-deps包里的APR是一样的所以不要修改)
若使用apache为2.2.x,(例如httpd-2.2.4)安装命令如下:
tar –zxvf subversion-1.4.3.tar.gz
tar –zxvf subversion-deps-1.4.3.tar.gz
# subversion-deps的文件也会解压到subversion-1.4.3目录中
cd subversion-1.4.3
rm -rf apr
rm -rf apr-util
ln -s /home/tmp/httpd-2.2.4/srclib/apr apr
ln -s /home/tmp/httpd-2.2.4/srclib/apr-util apr-util
./configure –prefix=/usr/local/subversion –with-apxs=/home/apache2/bin/apxs
make
make install
安装完成后,查看是否存在文件$APACHE_HOME/modules/mod_dav_svn.so(默认 /usr/local/apache2/modules/mod_dav_svn.so)。
四、在apache中配置svn
创建svn库:
cd /home/project1
svnadmin create project1 #建立仓库
svnadmin create project2
chown nobody:nobody –R project1
chown nobody:nobody –R project1 #(修改访问权限,设为nobody(apache默认用户)可读写的,不同的apache版本的默认用户不一样,可去apache的配置文档httpd.conf里查看)
cd /home/project1
touch svn-access-file #存储用户访问权限文档
touch svn-auth-file #存储用户名,密码文档
vim /usr/local/apache2/conf/httpd.conf #修改apache配置
查看是否导入SVN模块,若没导入加上
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
然后配置仓库(在末尾添加即可):
<Location /subversion>
DAV svn
SVNParentPath /home/project1
AuthzSVNAccessFile /home/project1/svn-access-file
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /home/project1/svn-auth-file
Require valid-user
</Location>
说明:
我的目录结构/home/project1/project1(后面一个project1是仓库)
a)第一行:<Location /subversion>表示project1仓库位于/subversion虚拟目录下面(Location的作用有点类似Alias的作用)。当然你可以的目录,比如<Location /src>。那么这样配置一般您将可以通过浏览器http://localhost/subversion进行浏览(如果权限足够的话)。
b)第二行:DAV svn表示dav启用svn支持。如果您想更详细了解dav是啥去baidu或者google一下,网上资料蛮多的。
c)第三行:SVNParentPath表示使用SVN方式 .SVN支持两种对项目的管理方式,一种是SVNParentPath,另一种是SVNPath。使用SVNParentPath这种方式添加一个新项目是不需要重启 apache的,而另一种方式则需要。对于一个实际使用的服务器来说,是否需要常常重启是一件很重要的事情了。
d)第四行:AuthzSVNAccessFile /home/project1/svn-access-file。表示用户权限文件是/home/project1/svn-access-file (权限文件的写法,我在后面再说)。文件可以位于任意其他位置。
e)第五至八行:这个是apache的配置,使用使用apache的用户文件作为身份验证,需且要求有效用户才可以访问。其实在配置文件注释中已经说明了怎么样使用 htpasswd进行用户管理的方式。在此需要注意的是第四行的配置与此处的配置,在svn-access-file权限文件中,只配置哪个用户是什么样的权限,而判断是否已经通过密码验证却是由apache的用户管理实现的。也就是说,比如我有一个用户qsg,那么判断这个用户的密码是否正确是由此处完成的,而判断此用户对哪些项目有什么样的权限则是由svn-access-file文件完成的。
修改svn-access-file文件
cd /home/project1
vim svn-access-file
添加下面(我有两个仓库):
[groups]
admin=king
team1=
team2=
[/]
*=r
@admin=rw
[project1:/]
@team1=rw
[project2:/]
@team2=rw
#权限分配说明
[project1:/] //这表示,仓库project1的根目录下的访问权限
@team1= rw //project1仓库team1用户组具有读和写权限,如果在前面加上@符号,则表示这是个群组权限设置
bao = r //project1仓库bao用户具有读权限
[project2:/] //project2仓库根目录下的访问权限
@team2=rw //project2仓库team2用户组具有读和写权限
wooin = r //wooin用户在test2仓库根目录下只有读权限
bao = //bao用户在 test2仓库根目录下无任何权限
[/] //这个表示在所有仓库的根目录下
* = r //这个表示对所有的用户都具有读权限
@admin=rw//这个表示对admin组具有读权限
#[groups] //这个表示群组设置(添加组成员)
admin=king
team1=developer1,developer2
team2=developer3,developer4
添加用户,密码。
htpasswd –c /home/project1/svn-auth-file king(第一次添加 -c是创建密码文件)
会提示输入密码,两次输入后就OK了。
(注意再次添加的时候用 htpasswd –m /home/project1/svn-auth-file otheruser)
重启服务器;
/usr/local/apache2/bin/apachectl restart
(如果没错误,就大功告成了)
实验一下,
links http://localhost/subversion/project1
会提示输入用户名密码。
能进去就OK了。
如果发生连http://localhost/都上不了,看 看 你的防火墙设置,修改一下就OK了 。