在CentOS操作系统上搭建SVN(Subversion)服务器是企业版本控制中常见的需求,SVN作为集中式版本控制系统,能够有效管理代码、文档等文件的变更历史,支持多团队协作开发,以下将详细介绍在CentOS 7/8系统中安装、配置及管理SVN服务器的完整步骤,包括环境准备、安装部署、权限管理、安全优化等内容,帮助用户快速构建稳定可靠的版本控制平台。

环境准备与系统初始化
在开始安装SVN服务器前,需确保系统满足基本要求:CentOS 7/8最小化安装系统,root权限或具有sudo权限的用户账户,至少2GB可用磁盘空间(用于存储版本库),以及稳定的网络连接,首先更新系统软件包并安装必要的编译工具,执行以下命令:
sudo yum update -y sudo yum groupinstall "Development Tools" -y sudo yum install wget openssl openssl-devel -y
关闭SELinux或设置为宽松模式,避免权限冲突影响SVN服务运行:
sudo setenforce 0 sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
安装Subversion服务
CentOS官方软件源中包含Subversion包,可直接通过yum安装:
sudo yum install subversion -y
安装完成后验证SVN版本:

svnserve --version
若显示版本信息(如1.14.0及以上),则表示安装成功,创建SVN数据存储目录,建议使用独立分区或大容量磁盘挂载点,
sudo mkdir -p /data/svn sudo chown -R apache:apache /data/svn
创建版本库与配置访问权限
使用svnadmin命令创建版本库,这里以创建名为"project"的示例仓库:
sudo svnadmin create /data/svn/project
进入版本库配置目录/data/svn/project/conf,修改三个核心配置文件:
- svnserve.conf:SVN服务主配置文件,启用匿名访问控制与认证机制:
[general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = Project Repository
- passwd:用户密码文件,添加或修改用户账户,格式为
username = password:[users] admin = 123456 developer = abcdef
- authz:权限控制文件,定义用户及用户组的访问权限,
[groups] admin_group = admin dev_group = developer
[/] @admin_group = rw

- = r
[/project/trunk] @dev_group = rw admin = rw
### 启动SVN服务与配置自启动
通过`svnserve`命令启动SVN服务,指定监听端口、数据目录及认证域:
```bash
sudo svnserve -d -r /data/svn --listen-port 3690 --config-file /data/svn/project/conf/svnserve.conf
参数说明:-d表示后台守护进程运行,-r指定版本库根目录,--listen-port设置监听端口(默认3690),将SVN服务加入systemd管理,创建服务单元文件/etc/systemd/system/svnserve.service:
[Unit] Description=Subversion Server After=network.target [Service] Type=forking User=apache Group=apache ExecStart=/usr/bin/svnserve -d -r /data/svn ExecStop=/bin/kill -TERM $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target
启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable svnserve sudo systemctl start svnserve
检查服务状态:
sudo systemctl status svnserve netstat -tulnp | grep 3690
安全优化与访问控制
为确保SVN服务器安全,需进行以下配置:
- 防火墙设置:开放SVN服务端口并限制访问来源:
sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --permanent --add-source=192.168.1.0/24 sudo firewall-cmd --reload
- SSL加密传输:通过Apache+HTTPS方式替代明文传输,需安装httpd并配置SSL模块:
sudo yum install httpd mod_dav_svn mod_ssl -y sudo openssl genrsa -out /etc/pki/tls/private/svn.example.com.key 2048 sudo openssl req -new -x509 -key /etc/pki/tls/private/svn.example.com.key -out /etc/pki/tls/certs/svn.example.com.crt -days 365
创建Apache配置文件
/etc/httpd/conf.d/svn.conf:<Location /svn> DAV svn SVNPath /data/svn SSLRequireSSL AuthType Basic AuthName "SVN Repository" AuthUserFile /etc/svn-users Require valid-user </Location>
生成用户密码文件并重启Apache服务:
sudo htpasswd -cm /etc/svn-users admin sudo systemctl restart httpd
- 定期备份:编写备份脚本,通过
svnadmin hotcopy命令创建版本库热备份,结合cron任务实现自动化:#!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR="/backup/svn" svnadmin hotcopy /data/svn/project "$BACKUP_DIR/project_$DATE" find $BACKUP_DIR -name "project_*" -mtime +7 -exec rm {} \;将脚本加入cron,每日凌晨2点执行:
0 2 * * * /path/to/backup_script.sh
常见问题与解决方案
在SVN服务器运维过程中,可能会遇到以下典型问题:
-
问题:用户无法提交代码,提示"permission denied" 解答:首先检查
authz文件中的权限配置是否正确,确保用户所属组或用户名路径匹配无误;然后验证passwd文件中的密码是否正确;最后检查SVN服务进程运行用户(如apache)对版本库目录的读写权限,可通过ls -la /data/svn/project确认,必要时执行sudo chown -R apache:apache /data/svn/project。 -
问题:SVN服务启动失败,显示"Address already in use" 解答:该错误通常因端口被占用导致,使用
netstat -tulnp | grep 3690查看占用端口的进程,若为其他SVN实例,需停止相关进程;若为其他服务占用,可修改svnserve命令中的--listen-port参数更换端口(如3691),并更新防火墙规则及客户端访问地址,若需彻底解决端口冲突,可编辑/etc/services文件,将svn服务的默认端口3690临时修改为其他未占用端口。
通过以上步骤,即可完成CentOS SVN服务器的搭建与配置,后续可根据实际需求扩展功能,如集成LDAP认证、实现多仓库管理等,确保版本控制系统安全高效运行。
