CentOS/Fedora下SVN+Apache服务器配置

SVN是一个优秀的版本管理工具,并且适用于小型的团队开发。SVN可以独立服务器运行或者借助Apache运行,所谓独立运行是指在服务器上配置好SVN服务器后,网内的计算机可以利用诸如TortoiseSVN这样的SVN客户端软件通过SVN协议(svn://***.***.***.***)对服务器进行签出(checkout)提交(commit)等操作。若SVN借助Apache运行,则可通过浏览器的http协议直接访问服务器对应地址下的代码。

本文先讲述如何单独配置SVN服务器,之后再讲述如何添加Apache的http访问支持。
安装环境:Fedora 19 / CentOS 6.4
(Windows也可当作SVN服务器,貌似配置过程很简单,不过从稳定性上考虑,还是选用CentOS作为服务器更为理想)

独立SVN服务器配置

1.安装subversion包

2.初始化版本仓库(Repositories) 
安装完subversion后,需要初始化一个版本仓库,用于管理代码。 新建目录

在新建的目录上创建仓库

这里,svnadmin create之后跟的为版本仓库存放代码的目录地址,在本文中为 /home/svn/project,当然,可以根据需求改成其它目录,但请在以下的操作中根据具体目录进行对应的修改。 在执行完svnadmin create操作后,在创建的仓库下,会自动生成几个目录

此时,如果你的电脑上有待进行管理的代码目录,可以将其导入(import)到SVN的仓库中。作为示例,这里要导入的代码目录为

在svn import命令中,末尾的-m(–message)选项表示为执行操作的日志消息,如果不加-m “消息内容”的话,此操作将会报错svn: E205007。
如果导入成功,你将会看到诸如如下过程(此处截取了导入过程中的末尾部分)

3.用户管理及权限设置
SVN服务器的配置文件主要有3个,分别为

添加用户
添加用户只需要打开/home/svn/project/conf/passwd文件,添加一行形如“user = password”条目即可。这里,作为示例,添加一个admin账户,密码为123456,以及其它2个账户则passwd文件如下

用户访问策略配置
/home/svn/project/conf/authz文件用于管理用户以及用户组的访问策略。authz文件中包含若干个节,包括[groups]以及类似[repository:/baz/fuz]这样的节,注意[groups]节,这里用于定义用户组,在[groups]节中定义完不同组的用户后可以很方便的利用组进行权限管理。

在以上的authz文件中,定义了组g_admin和g_common,g_admin组中包含有admin用户,g_common组中包含了用户role_a和role_b。
接下来进行具体目录的权限控制,可用类似 user = rw 类似的方式为用户分配该目录的对应权限,也可用 @groupname = rw 类似的方式为用户组分配该目录的对应权限,r代表可读,w代表可写,rw代表可读可写。同时,一定要注意在末尾添加其他人的权限设置,利用 * 通配符代表除了之前提到的其他人。* = 表示其他人不具有任何权限。
注意到文件中的两个节[/]和[project:/],[/]表示SVN根目录的权限配置,而[project:/]表示库project的根目录权限配置,二者存在细微的差别,但是若没搞清楚,则会导致访问时验证失败或连接失败等问题。这里需要涉及到SVN服务启动过程的命令,具体见4.启动SVN服务器中的描述。除此之外还可参考:基于svnserve的服务器,权限文件authz配置的常见问题及解答

SVN全局配置文件
/home/svn/project/conf/subserve.conf 为SVN的全局配置文件,这里取消对应行的注释并指定适当的值,注意不要行前不要留空格,具体如下

4.启动SVN服务器

-d 表示以deamon方式运行,即后台运行。 -r用于指定SVN服务根目录,这里我们指定的根目录为 /home/svn。
联系到authz文件中,[/]节中的权限则对应 /home/svn 下权限,[project:/]节中的权限即对应 /home/svn/project 下的权限。但是如果指定SVN服务根目录为 /home/svn/project,那么authz文件中[/]代表目录 /home/svn/project,而此时[project:/]则没有对应目录,因为/home/svn/project下并没有名为project的仓库,所以就会出错。
如果修改了SVN的配置文件,那么需要重启SVN服务器才能使修改生效。

5.在防火墙中开放SVN端口
如果不在防火墙中开放SVN默认端口3690,则会出现,服务器本机可以访问SVN服务,而其它网内机器无法连接SVN服务器的错误。
首先关闭selinux,修改 /etc/selinux/config 文件

SVN服务的默认端口为3690,设置防火墙开放3690端口

6.测试SVN服务器
随意找一个目录,尝试从SVN服务器签出(check out)仓库

在第一次签出的时候会提示是否保存明文密码(因为SVN的密码是明文保存的,所以SVN的账户安全依赖与Linux系统账户的安全)选择”yes”的话下次就不需要在输入密码了,反之,选择”no”的话下次操作还需进行身份验证。如果想换个身份操作SVN或者密码输错太多被拒绝,可以删除用户目录下的 ~/.subversion 文件夹以清空身份信息。
如果能顺利 check out revision 则表明独立SVN服务器配置已成功。
这时不论是在服务器本机上还是其它客户端机器,均能使用SVN服务。对于客户端操作系统为Windows的计算机,可以安装TortoiseSVN进行相应的客户端操作。

为SVN服务器添加HTTP支持

经过上面的配置过程后,SVN服务器已经可以正常使用,但是,只能通过SVN协议,无法通过http协议访问。为SVN服务器添加HTTP支持可以使得用户能用浏览器通过HTTP协议直接查看仓库内容,同时也可以在代码签出提交时使用HTTP协议。

1.安装必要包

2.转换SVN明文密码为HTTP要求的加密格式
SVN的密码是明文保存的,而http服务器不支持明文密码,所以需要将SVN服务的明文密码转换为http要求的加密格式,可以通过以下的perl脚本完成:
移动到 /home/svn/project/conf 目录下,编辑perl脚本 PtoWP.pl  (此脚本的作者为ha97)

为脚本添加可执行属性

在目录 /home/svn/project/conf/passwd 所在目录中运行PtoWP.pl脚本,对passwd文件进行转换

转换过程如下

转换完成后目录下会出现一个 webpasswd 文件,即为http支持的密码文件。

2.修改http.conf,使得http支持SVN

在httpd.conf文件的最后添加如下信息

看了不少文章,有部分文章说在这里还需添加两个模块的语句,另外还需要 yum install subversion-deps-* 包来使得svn得到http的支持。

但是,根据官方的说明(Please note that the dependencies distribution subversion-deps-* is no longer available in 1.7 and later.)也就是说在1.7以及1.7之后的版本中不需要安装依赖的subversion-deps-*包,而本人实验证明,也不需要在httpd.conf文件中添加上述两行加载模块的语句。

修改SVN主目录的所有者和所属组为Apache

3.在防火墙中开放httpd服务的80端口

如果不在防火墙中开放80端口,则会出前客户机无法通过http协议连接SVN服务器的情况。
注:关于服务重启命令,在fedora 19中采用的是systemctl restart service_name.service形式。

4.重启httpd服务

5.通过浏览器测试
在浏览器地址栏输入 http://your_svn_server_ip/project,在弹出的身份确认框中输入用户名密码,能通过浏览器查看SVN仓库。
同时可以通过http协议执行svn操作

参考网页:
(总结)CentOS Linux搭建SVN Server配置详解


你可能感兴趣的:(linux,SVN,数据仓库,subversion,fedora)