在Linux系统中搭建SVN(Subversion)服务器是一种常见的需求,SVN作为版本控制系统,能够有效管理代码、文档等文件的变更历史,适合团队协作开发,以下将详细介绍在Linux环境下配置SVN服务器的完整步骤、核心配置及注意事项。
安装SVN服务
首先需要确保系统已安装SVN服务,以CentOS为例,可通过yum包管理器安装:
sudo yum install subversion -y
安装完成后,检查SVN版本确认安装成功:
svnserve --version
对于Ubuntu/Debian系统,可使用apt命令安装:
sudo apt update && sudo apt install subversion -y
创建版本库
SVN通过版本库(Repository)存储文件,需先创建一个目录作为版本库根路径,例如/var/svn/repos:
sudo mkdir -p /var/svn/repos
使用svnadmin命令创建版本库,这里以创建myproject为例:
sudo svnadmin create /var/svn/repos/myproject
创建后,版本库目录会自动生成若干子目录和配置文件,包括conf(配置文件夹)、db(数据存储)、hooks(钩子脚本)等。
配置访问权限
进入版本库的conf目录,修改三个核心配置文件:
-
svnserve.conf:SVN主配置文件,需启用匿名访问和权限验证:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户写权限 password-db = passwd # 密码文件路径 authz-db = authz # 权限控制文件路径 realm = MyProject Repository # 认证域名称
-
passwd:用户密码文件,格式为
用户名 = 密码,[users] admin = 123456 developer = abc123
-
authz:权限控制文件,可按用户或用户组分配权限。
[groups] admin_group = admin dev_group = developer [/] @admin_group = rw # admin组成员对根目录有读写权限 * = r # 其他用户只读 [/myproject/trunk] @dev_group = rw # dev组成员对trunk目录有读写权限
启动SVN服务
使用svnserve命令启动SVN服务,需指定监听端口(默认3690)、版本库路径及绑定IP:
sudo svnserve -d -r /var/svn/repos --listen-host 0.0.0.0
参数说明:
-d:后台守护进程模式运行-r:指定版本库根路径,客户端通过此路径访问--listen-host:绑定IP地址,0.0.0表示监听所有IP
防火墙与SELinux配置
为确保外部访问,需开放3690端口,以CentOS为例:
sudo firewall-cmd --permanent --add-port=3690/tcp sudo firewall-cmd --reload
若启用SELinux,需调整上下文:
sudo semanage port -a -t svn_port_t -p tcp 3690 sudo chcon -R -t svnrpx_t /var/svn/repos
客户端访问测试
使用SVN客户端(如TortoiseSVN或命令行)测试访问,例如检出项目:
svn checkout svn://服务器IP/myproject
输入配置文件中设置的用户名和密码,若成功则说明服务器搭建完成。
常见问题与优化
-
服务开机自启:通过systemd管理服务,创建
/etc/systemd/system/svnserve.service如下:[Unit] Description=SVN Server After=network.target [Service] Type=forking ExecStart=/usr/bin/svnserve -d -r /var/svn/repos User=svn Group=svn [Install] WantedBy=multi-user.target
启用并启动服务:
sudo systemctl enable --now svnserve
-
性能优化:对于大型版本库,可调整
svnserve.conf中的max-connections参数限制并发连接数,或通过svnlook命令定期清理未使用的版本数据。
相关问答FAQs
Q1: 如何修改SVN服务默认端口?
A: 启动svnserve时通过--listen-port参数指定新端口,例如sudo svnserve -d -r /var/svn/repos --listen-port 8080,同时需在防火墙开放对应端口。
Q2: SVN服务无法连接,如何排查?
A: 首先检查服务状态(systemctl status svnserve),确认端口是否监听(netstat -tuln | grep 3690),再检查防火墙和SELinux设置,最后验证版本库配置文件(svnserve.conf、passwd、authz)语法是否正确。
