部署Apache+Subversion版本控制系统
SVN是Subversion的简称,是一个开放源代码的版本控制系统,采用C/S模式。SVN有2中数据存储模式, 一是Berkeley DB 数据库中存放数据;二是使用普通文件,采用自定义的格式来储存,称为 FSFS
两种存储格式各有优缺点,如果需要使用FSFS,在创建版本库的时候加参数“--fs-type fsfs”即可。即:“svnadmin create --fs-type fsfs /data/svn/project”
| 特性 | Berkeley DB | FSFS |
|---|---|---|
| 对操作中断的敏感 | 很敏感;系统崩溃或者权限问题会导致数据库“塞住”,需要定期进行恢复 | 不敏感 |
| 可只读加载 | 不能 | 可以 |
| 存储平台无关 | 不能 | 可以 |
| 可从网络文件系统访问 | 不能 | 可以 |
| 版本库大小 | 稍大 | 稍小 |
| 扩展性:修订版本树数量 | 无限制 | 某些本地文件系统在处理单一目录包含上千个条目时会出现问题。 |
| 扩展性:文件较多的目录 | 较慢 | 较慢 |
| 检出最新代码的速度 | 较快 | 可以 |
| 大量提交的速度 | 较慢,但时间被分配在整个提交操作中 | 较快,但最后较长的延时可能会导致客户端操作超时 |
| 组访问权处理 | 对于用户的 umask 设置十分敏感,最好只由一个用户访问 | 对 umask 设置不敏感 |
| 功能成熟时间 | 2001 年 | 2004 年 |
安装SVN
环境:
Centos 7.2
Subversion 1.7.14
Apache 2.4.6
1 | [root@localhost ~]# yum -y install svn |
1 | #导入项目 |
SVN安装成功
安装Apache
通过 Http 协议可更方便的访问 Subversion 版本库,只需要打开浏览器,输入 URL 即可轻松的浏览整个版本库1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@localhost ~]# yum -y install httpd mod_dav_svn
[root@localhost ~]# httpd -version
Server version: Apache/2.4.6 (CentOS)
Server built: Apr 12 2017 21:03:28
[root@localhost ~]#
[root@localhost ~]# chown apache:apache /data/svn/project/ -R
[root@localhost ~]# cd /data/svn/project/
[root@localhost project]# htpasswd -cm htpassword jack
New password:
Re-type new password:
Adding password for user jack
[root@localhost project]# cat htpassword
jack:$apr1$wqsFKPQo$XwD1nh1Y7OPX.62dQIMt..
[root@localhost project]#
[root@localhost project]# chmod 644 htpassword
Apache与Subversion结合
由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用 WebDAV(Web 分布式创作和版本控制)。WebDAV 是 HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,参考:http://www.ietf.org/rfc/rfc2518.txt
为了使 Subversion 与 dav 模块通信,需要安装 mod_dav_svn 插件。默认情况下没有安装,至少我这里是这样的1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29[root@localhost ~]# cd /etc/httpd/modules/
[root@localhost modules]# ll | grep -i mod_dav_svn.so
-rwxr-xr-x 1 root root 181336 Nov 21 2015 mod_dav_svn.so
[root@localhost modules]# ll | grep -i mod_dav.so
-rwxr-xr-x 1 root root 102400 Apr 13 05:04 mod_dav.so
[root@localhost modules]#
[root@localhost ~]# cd /etc/httpd/
[root@localhost httpd]# tail -1 conf/httpd.conf
IncludeOptional conf.d/*.conf
[root@localhost httpd]#
[root@localhost httpd]# cat conf.d/subversion.conf
#使用mod_authz_svn进行目录访问控制
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNPath "/data/svn/project/"
AuthType Basic
AuthName "svn repos"
AuthUserFile "/data/svn/project/htpassword" #前面用htpasswd生成的认证文件
AuthzSVNAccessFile "/data/svn/project/conf/authz" #SVN的 authz 的策略文件
Satisfy Any #用户验证机制,值为all|any。用于一个目录同时被这两个规则作用,All要同时满足两个条件,Any只要满足一个即可
Require valid-user
</Location>
[root@localhost httpd]#
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
初始版本库
这样做的好处是,用户访问管理员给的URL时,首先需要通过Apache的登录验证,再验证SVN的 authz ,两者都满足时,才能正常访问,且用户无法点上面的两个冒号切到上级目录(这时会切到初始版本库),如下图
如果用户满足了Apache的登录验证,但不满足SVN的验证,则会出现下图所示的情况
如果启动报下面这个错误,是因为没有安装mod_dav_svn,而在apache和subversion通讯需要加载“mod_dav_svn.so”和“mod_authz_svn.so”模块1
May 31 01:42:22 localhost httpd[11633]: Unknown DAV provider: svn
如果通过浏览器访问,出现下面信息,说明我们部署是没有问题的,只是访问URL搞错了
在subversion.conf中如果配置“<Location /svn>”,则浏览器访问时的URL为:http://ip/svn1
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay ) ) )
关于其他配置可以参考:https://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自Jack Wang Blog,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文出自”Jack Wang Blog”:http://www.yfshare.vip/2017/05/30/%E9%83%A8%E7%BD%B2Apache-Subversion%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6%E7%B3%BB%E7%BB%9F/