在CentOS系统上搭建SVN服务器是一个常见的需求,Subversion(SVN)是一款开源的版本控制系统,能够有效管理文件和目录的变更历史,以下将详细介绍在CentOS 7系统中通过Apache和SVN模块搭建SVN服务器的完整步骤,包括安装配置、用户权限管理及安全设置等内容。

安装必要软件包
首先需要安装SVN服务器软件包以及Apache服务器及其SVN模块,打开终端,执行以下命令更新系统软件包并安装所需组件:
sudo yum update -y sudo yum install subversion mod_dav_svn -y
subversion是SVN的核心程序,mod_dav_svn是Apache服务器的SVN模块,用于支持通过HTTP协议访问SVN仓库,安装完成后,可以通过svnserve --version命令验证SVN是否安装成功。
创建SVN仓库
SVN仓库用于存储版本控制的数据,可以选择在/var/svn目录下创建仓库,例如创建一个名为project_repo的仓库:
sudo mkdir -p /var/svn/project_repo sudo svnadmin create /var/svn/project_repo
创建完成后,仓库目录会包含多个子目录和文件,如conf(配置文件)、db(数据文件)、hooks(钩子脚本)等,需要修改仓库所有者为Apache进程用户,以确保Apache有读写权限:

sudo chown -R apache:apache /var/svn/project_repo
配置Apache支持SVN
接下来需要配置Apache服务器以支持SVN访问,编辑Apache的SVN配置文件/etc/httpd/conf.d/subversion.conf,如果文件不存在则新建,添加以下内容:
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /etc/svn-users
Require valid-user
</Location>
上述配置中,SVNParentPath指定SVN仓库的父目录,AuthUserFile定义用户认证文件路径,需要创建用户认证文件并添加用户:
sudo htpasswd -cm /etc/svn-users admin
执行后会提示输入密码,-c参数表示创建新文件(仅第一次使用),后续添加用户时需去掉-c,例如添加第二个用户:
sudo htpasswd -m /etc/svn-users user1
配置SVN仓库权限
SVN仓库的权限通过conf/svnserve.conf和conf/authz文件控制,首先编辑仓库的svnserve.conf文件(位于/var/svn/project_repo/conf/),启用认证和权限控制:
[general] anon-access = none auth-access = write password-db = /etc/svn-users authz-db = /etc/svn-authz
anon-access = none表示禁止匿名访问,auth-access = write表示认证用户可读写,password-db指定用户密码文件(与Apache配置一致),authz-db指定权限控制文件。
然后创建权限控制文件/etc/svn-authz,定义用户和组的访问权限。
[groups] admin = admin developers = user1, user2 [/] @admin = rw * = r [project_repo:/trunk] @developers = rw
上述配置中,[groups]定义用户组,[/]表示仓库根目录权限,@admin组成员有读写权限,其他用户只读;[project_repo:/trunk]定义trunk目录下developers组成员有读写权限。
启动并配置服务
启动Apache服务并设置开机自启:
sudo systemctl start httpd sudo systemctl enable httpd
检查Apache是否正常监听80端口,可通过netstat -tuln | grep 80验证,如果需要通过SVN协议(默认3690端口)访问,还需启动svnserve服务:
sudo svnserve -d -r /var/svn
-d表示后台运行,-r指定仓库根目录,建议将svnserve设置为系统服务,创建/etc/systemd/system/svnserve.service文件:
[Unit] Description=Subversion Daemon After=network.target [Service] Type=forking User=apache Group=apache ExecStart=/usr/bin/svnserve -d -r /var/svn Restart=on-abort [Install] WantedBy=multi-user.target
然后执行sudo systemctl enable svnserve && sudo systemctl start svnserve启用服务。
防火墙与SELinux配置
确保防火墙允许HTTP和SVN端口访问:
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --reload
如果启用SELinux,需要设置相应上下文:
sudo semanage port -a -t http_port_t -p tcp 3690 sudo chcon -R -t httpd_sys_content_t /var/svn
测试SVN仓库
使用SVN客户端测试访问,例如通过HTTP协议检出仓库:
svn co http://localhost/svn/project_repo
输入配置的用户名和密码,若成功检出则表示搭建完成,也可通过svn list命令远程列出仓库内容。
相关问答FAQs
问题1:如何修改SVN仓库的访问密码?
答:若需修改用户密码,使用htpasswd命令重新设置密码文件,例如修改用户admin的密码:
sudo htpasswd -m /etc/svn-users admin
执行后会提示输入新密码,修改后,Apache和SVN协议认证会自动生效,无需重启服务。
问题2:如何限制SVN仓库的磁盘空间使用?
答:可通过Linux文件系统配额限制仓库磁盘空间,首先安装quota工具并启用分区配额,例如对/var/svn分区设置配额:
sudo quotacheck -ug /var/svn sudo setquota -u apache 0 10G 0 2G /var/svn
上述命令限制apache用户在/var/svn分区最多使用10GB硬限制和2GB软限制,也可通过SVN的pre-commit钩子脚本在提交时检查仓库大小并拒绝超限提交。
