在 CentOS 7 上部署 Apache Subversion(SVN)服务器是一个常见的任务,尤其是在需要版本控制系统来管理代码和文档的环境中,以下是详细的步骤,包括安装、配置和启动 SVN 服务器的全过程:
先决条件
1、CentOS 7:最小化安装即可,但非必需。

2、sudo 用户登录:直接使用 root 亦可。
3、非 root 用户:请在命令前加 sudo。
安装 Apache
1、使用 YUM 安装 Apache:
- sudo yum install y httpd
2、检查 Apache 是否安装成功:
- httpd version
- # Server version: Apache/2.4.6 (CentOS)
3、删除 Apache 的默认欢迎页面:
- sed i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
4、防止 Apache 在/var/www/html
目录中显示文件:

- sed i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf
三、安装 SVN 和 mod_dav_svn 模块
1、安装 subversion 和 mod_dav_svn:
- sudo yum install y subversion mod_dav_svn
2、检查 svnserve 是否安装成功:
- svnserve version
- # svnserve, version 1.7.14 (r1542130)
配置 SVN
1、修改 SVN 配置文件:
- vim /etc/httpd/conf.modules.d/10subversion.conf
2、添加以下内容到配置文件:
- <Location /svn>
- DAV svn
- SVNParentPath /svn
- AuthName "SVN Repos"
- AuthType Basic
- AuthUserFile /etc/svn/svnauth
- AuthzSVNAccessFile /svn/authz
- Require validuser
- </Location>
3、创建 SVN 仓库:

- mkdir /svn
- cd /svn
- svnadmin create repo1
- chown R apache:apache repo1
4、设置 SVN 用户帐号:
- mkdir /etc/svn
- htpasswd cm /etc/svn/svnauth user001
- chown root:apache /etc/svn/svnauth
- chmod 640 /etc/svn/svnauth
5、为用户设置权限:
- cp /svn/repo1/conf/authz /svn/authz
- vim /svn/authz
假设:用户 user001 是管理员,用户 user002 具有读写权限,用户 user003 只能读,可以修改以下设置:
- [groups]
- admin=user001
- repo1_user=user002
- repo1_trainee=user003
-
- [/]
- @admin=rw
- [repo1:/]
- @repo1_user=rw
- @repo1_trainee=r
启动 Apache 并修改防火墙规则
1、启动 Apache:
- sudo systemctl start httpd.service
- sudo systemctl enable httpd.service
2、打开 HTTP 服务端口:
- sudo firewallcmd zone=public permanent addservice=http
- sudo firewallcmd reload
访问 SVN 仓库
使用以下路径从 SVN 客户端访问服务器上的 SVN repo repo1:
- http://<yourserverip>/svn/repo1/
FAQs
1、问题:如何为 SVN 仓库添加更多用户?
解答:可以使用htpasswd
命令来添加更多用户,要添加用户 user002 和 user003,可以运行以下命令:
- htpasswd m /etc/svn/svnauth user002
- htpasswd m /etc/svn/svnauth user003
注意:不要使用c
标志,否则会重建身份验证文件,并清除之前设置的所有用户帐户。
2、问题:如何配置用户的读写权限?
解答:可以通过编辑/svn/authz
文件来配置用户的读写权限,假设用户 user001 是管理员,user002 具有读写权限,user003 只能读,则可以修改以下设置:
- [groups]
- admin=user001
- repo1_user=user002
- repo1_trainee=user003
-
- [/]
- @admin=rw
- [repo1:/]
- @repo1_user=rw
- @repo1_trainee=r