前言

SVN 是最流行的版本管理软件之一,可以为源码或者文档记录每次的修改记录,是开发团队协作必备的工具。

这篇文档,我们将讲解如何使用Apache来搭建SVN服务端,Linux服务器我们使用CentOS 7为例,其他Linux版本操作也差不多。

第一步,安装 Apache

使用 yum 安装

1
yum install httpd

第二步,安装 Subversion 和 mod_dav_svn 模块

CentOS 7 默认的源安装的 svn 是比较旧的版本,我们使用 wandisco 源安装SVN1.9版本。
新建文件

1
vim /etc/yum.repos.d/wandisco-svn.repo

写入源内容

1
2
3
4
5
[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/
enabled=1
gpgcheck=0

删除旧版本(如果存在)

1
2
yum remove subversion*
yum clean all

开始安装 Subversion

1
yum install subversion

为了Apache能提供SVN服务,我们还需要安装一个Apache的模块

1
yum install mod_dav_svn

第三步,Apache配置SVN

修改svn配置文件

1
vim /etc/httpd/conf.modules.d/10-subversion.conf

文件内容应该如下:

1
2
3
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule dontdothat_module modules/mod_dontdothat.so

我们配置一个/svn的访问路径,新增以下内容

1
2
3
4
5
6
7
8
9
<Location /svn>
DAV svn
SVNParentPath /svn
AuthName "SVN Repos"
AuthType Basic
AuthUserFile /etc/svn/svn-auth
AuthzSVNAccessFile /svn/authz
Require valid-user
</Location>

注意:上面我们指定了svn的授权文件/svn/authz和用户密码配置文件/etc/svn/svn-auth,后面我们将创建这两个文件。

第四步,创建SVN仓库

创建仓库

1
2
3
4
sudo mkdir /svn
cd /svn
sudo svnadmin create repo1
sudo chown -R apache:apache repo1

创建用户帐号user001

1
2
3
4
sudo mkdir /etc/svn
sudo htpasswd -cm /etc/svn/svn-auth user001
sudo chown root:apache /etc/svn/svn-auth
sudo chmod 640 /etc/svn/svn-auth

如果需要创建更多帐号,参考以下命令:

1
2
sudo htpasswd -m /etc/svn/svn-auth user002
sudo htpasswd -m /etc/svn/svn-auth user003

注意“-c”参数是表示创建文件,如果文件已经存在了,就不要再使用这个参数

创建权限配置文件

1
2
sudo cp /svn/repo1/conf/authz /svn/authz
sudo vi /svn/authz

假设:
user001 是作为管理员
user002 是测试人员,拥有”repo1”仓库的读写权限
user003 是实习生,只有”repo1”仓库的读权限
我们的配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 分组
[groups]
admin=user001
repo1_user=user002
repo1_trainee=user003

[/]
@admin=rw

[repo1:/]
@repo1_user=rw
@repo1_trainee=r

第五步,启动 Apache 服务,修改防火墙

启动apache

1
2
sudo systemctl start httpd.service
sudo systemctl enable httpd.service

开启http服务端口

1
2
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload

最后,我们就可以使用下面的地址访问到我们的svn仓库了。

1
http://<your-server-ip>/svn/repo1/