在Linux环境下配置SVN服务器,通常通过Apache结合Subversion实现,也可使用svnserve独立服务,以下是详细配置步骤,以Ubuntu/Debian系统为例,CentOS/RHEL可通过yum安装相应软件包。
安装必要软件
首先更新系统并安装SVN和Apache相关组件:
sudo apt update sudo apt install subversion libapache2-mod-svn libsvn-tools
安装完成后,检查服务状态:
svnserve --version # 验证SVN版本 systemctl status apache2 # 检查Apache状态
创建版本库
-
创建版本库目录
建议在/var/svn下创建版本库,sudo mkdir -p /var/svn/project sudo svnadmin create /var/svn/project
-
设置目录权限
确保Apache用户(通常为www-data)有读写权限:sudo chown -R www-data:www-data /var/svn/project sudo chmod -R 775 /var/svn/project
配置Apache支持SVN
-
启用SVN模块
sudo a2enmod dav sudo a2enmod dav_svn
-
创建SVN配置文件
在/etc/apache2/sites-available/下创建svn.conf:<Location /svn> DAV svn SVNParentPath /var/svn # 版本库父目录 AuthType Basic AuthName "SVN Repository" AuthUserFile /etc/svn/passwd # 密码文件路径 Require valid-user </Location>
-
创建认证用户
使用htpasswd命令创建用户并设置密码:sudo htpasswd -cm /etc/svn/passwd admin # 首次创建用-cm,后续用户用-m
-
启用配置并重启Apache
sudo a2ensite svn.conf sudo systemctl restart apache2
配置访问权限(可选)
在版本库的conf/svnserve.conf或Apache配置中设置精细权限,通过AuthzSVNAccessFile指定权限文件:
AuthzSVNAccessFile /etc/svn/authz
创建/etc/svn/authz文件:
[groups] admin = admin developers = user1,user2 [/] @admin = rw * = r [project:/branches/dev] @developers = rw
防火墙与SELinux设置
-
允许HTTP和SVN端口
sudo ufw allow http sudo ufw allow 3690 # 若使用svnserve协议
-
SELinux配置(CentOS/RHEL)
sudo setsebool -P httpd_can_network_connect_db on sudo semanage fcontext -a -t httpd_sys_content_t "/var/svn(/.*)?" sudo restorecon -Rv /var/svn
测试与使用
-
通过浏览器访问
输入http://your-server-ip/svn/project,输入用户名密码验证。 -
客户端检出
svn checkout http://your-server-ip/svn/project /local/path
常见问题解决
- 权限错误:检查
authz文件格式及用户所属组。 - 403 Forbidden:确认Apache用户对版本库目录有执行权限(
chmod o+x /var/svn)。 - 无法创建版本库:确保
svnadmin命令路径正确,磁盘空间充足。
相关问答FAQs
Q1: 如何迁移SVN版本库到另一台服务器?
A1: 使用svnadmin dump导出版本库,再通过svnadmin load导入到新服务器,具体步骤:
- 在原服务器执行:
svnadmin dump /var/svn/project > project.dump - 将
project.dump传输到新服务器,执行:svnadmin load /var/svn/project < project.dump - 重新配置Apache权限和认证。
Q2: SVN服务器如何支持HTTPS加密访问?
A2: 需要配置Apache的SSL模块,步骤如下:
- 安装证书(如Let's Encrypt):
sudo apt install certbot python3-certbot-apache - 获取证书:
sudo certbot --apache -d svn.yourdomain.com - 修改
svn.conf,将Location块改为HTTPS协议,并添加SSL相关指令:<Location /svn> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/svn.yourdomain.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/svn.yourdomain.com/privkey.pem # 其他SVN配置保持不变 </Location>
- 重启Apache使配置生效:
systemctl restart apache2。
