CentOS SVN 服务器配置完整指南
本教程将指导您在 CentOS 7 或 CentOS 8 系统上,使用 Apache 和 mod_dav_svn 模块来搭建一个功能完善的 SVN 服务器,这种方式的优势在于可以利用 Apache 的强大功能,如 HTTPS 加密、基本认证、LDAP 集成等。

环境准备
- 操作系统: CentOS 7 / CentOS 8
- 管理员权限: 需要使用
root或具有sudo权限的用户。 - SVN 仓库存放位置: 我们将创建在
/var/svn/目录下。
安装 SVN 和 Apache
我们需要安装 Subversion 软件本身以及 Apache Web 服务器,以及让 Apache 支持 SVN 的模块 mod_dav_svn。
-
更新系统软件包
sudo yum update -y
-
安装 SVN 和 Apache
- 对于 CentOS 7:
sudo yum install -y subversion httpd mod_dav_svn
- 对于 CentOS 8:
sudo dnf install -y subversion httpd mod_dav_svn
- 对于 CentOS 7:
安装完成后,httpd (Apache) 服务和 svnserve (SVN 独立服务) 都已经安装,但我们主要使用 Apache 的方式。

创建 SVN 仓库
我们创建一个名为 myproject 的示例项目仓库。
-
创建仓库根目录
sudo mkdir -p /var/svn
-
创建新仓库 使用
svnadmin命令创建仓库。sudo svnadmin create /var/svn/myproject
-
设置仓库目录所有者 为了让 Apache 进程 (
apache用户) 可以读写仓库,需要将仓库目录的所有权更改为apache用户。
(图片来源网络,侵删)sudo chown -R apache:apache /var/svn/myproject
注意: 如果后续需要通过
svnserve访问,所有者也需要是apache,如果通过系统用户(如svnuser)访问,则所有者应为该用户,本教程统一使用apache用户。
配置 Apache 以支持 SVN
我们需要配置 Apache 来处理 SVN 的请求。
-
创建 SVN 配置文件 在 Apache 的
conf.d目录下创建一个新的配置文件。sudo vi /etc/httpd/conf.d/svn.conf
-
添加以下配置内容 将下面的内容复制并粘贴到
svn.conf文件中,请根据您的实际情况修改SVNParentPath和AuthUserFile的路径。# 启用 SVN 和 DAV 模块 LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so # 设置 SVN 仓库的父目录 # SVNParentPath 指向包含所有仓库的根目录 <Location /svn> DAV svn SVNParentPath /var/svn # 认证方式:基本认证 AuthType Basic AuthName "SVN Repository for MyProject" # 指定密码文件路径 # 我们将在下一步创建这个文件 AuthUserFile /etc/svn/passwd # 授权策略文件路径 # 我们将在下一步创建这个文件 AuthzSVNAccessFile /etc/svn/authz # 只有认证成功的用户才能访问 Require valid-user </Location>配置说明:
<Location /svn>: 定义了 SVN 服务的 URL 前缀,你的仓库将通过http://your_server_ip/svn/myproject访问。SVNParentPath /var/svn: 告诉 Apache 所有 SVN 仓库都在/var/svn目录下。AuthType Basic: 使用 HTTP 基本认证(用户名/密码)。AuthName: 弹出认证框时显示的提示信息。AuthUserFile: 存储用户名和密码的文件。AuthzSVNAccessFile: 存储用户和用户组权限的文件。Require valid-user: 强制只有AuthUserFile中存在的用户才能访问。
创建用户和权限
-
创建密码文件并添加用户 使用
htpasswd命令来创建和管理用户,第一次创建用户时需要使用-c(create) 选项。# 创建第一个用户 'admin' sudo htpasswd -c /etc/svn/passwd admin # 系统会提示你输入并确认密码 # 添加第二个用户 'developer' sudo htpasswd /etc/svn/passwd developer # 添加第三个用户 'guest' sudo htpasswd /etc/svn/passwd guest
注意:
-c选项只在第一次创建文件时使用,后续添加用户不要使用,否则会覆盖已有用户。 -
设置权限文件 创建并编辑权限配置文件
/etc/svn/authz。sudo vi /etc/svn/authz
在
authz文件中,你可以为不同用户和用户组分配对不同仓库或目录的读 (r)、写 (w) 权限。示例配置:
# [仓库路径:用户/用户组] # 权限: r (读), w (写), (空) (无) # 全局设置 [/] # admin 用户对所有仓库有读写权限 admin = rw # [myproject] 仓库的特定设置 [:/myproject] # admin 用户有读写权 admin = rw # developer 用户有读写权 developer = rw # guest 用户只有读权 guest = r # 可以创建用户组 [groups] # 定义一个名为 'dev_team' 的用户组,包含 developer 和 guest dev_team = developer, guest # 使用用户组分配权限 [:/myproject/trunk] # dev_team 用户组对 'trunk' 目录有读写权 @dev_team = rw [:/myproject/branches] # 只有 developer 对 'branches' 目录有读写权 developer = rw guest = r [:/myproject/tags] # 所有人都只能读 'tags' 目录 * = r
配置说明:
[/]: 匹配所有仓库。[:/myproject]: 匹配myproject仓库的根目录。[:/myproject/trunk]: 匹配myproject仓库下的trunk目录。admin = rw: 用户admin对该路径有读写权限。@dev_team = rw: 用户组dev_team中的所有成员对该路径有读写权限。* = r: 所有认证用户都有读权限。
-
设置权限文件的所有者 确保 Apache 进程可以读取这两个配置文件。
sudo chown apache:apache /etc/svn/passwd /etc/svn/authz sudo chmod 640 /etc/svn/passwd /etc/svn/authz
启动并配置防火墙
-
启动 Apache 服务
sudo systemctl start httpd sudo systemctl enable httpd # 设置开机自启
-
检查 Apache 状态
sudo systemctl status httpd
-
配置防火墙 为了能从外部访问 SVN 服务,需要开放 HTTP (80) 和 HTTPS (443) 端口。
- 对于 CentOS 7 / 8 (使用 firewalld):
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
- 对于 CentOS 7 / 8 (使用 firewalld):
测试 SVN 服务器
你可以通过 SVN 客户端(如 TortoiseSVN、命令行 svn 或 IDE 集成工具)来访问你的服务器了。
SVN 仓库地址: http://<你的服务器IP或域名>/svn/myproject
访问步骤:
- 在 SVN 客户端中,使用 "Repository Browser" 或 "Checkout" 功能。
- 输入仓库地址:
http://<你的服务器IP>/svn/myproject - 当弹出认证框时,输入你之前创建的用户名和密码(
admin和其密码)。 - 如果一切配置正确,你应该能够看到仓库内容(如
trunk,branches,tags目录,如果它们存在的话)。
(可选) 配置 HTTPS 加密 (推荐)
在生产环境中,强烈建议使用 HTTPS 来加密数据传输,防止密码和代码被窃听。
-
安装 SSL 模块
# CentOS 7 sudo yum install -y mod_ssl # CentOS 8 sudo dnf install -y mod_ssl
-
获取 SSL 证书 你可以从 Let's Encrypt 免费获取,或者使用自签名证书进行测试。
- 自签名证书 (仅用于测试):
sudo openssl genrsa -out /etc/pki/tls/private/svn.key 2048 sudo openssl req -new -key /etc/pki/tls/private/svn.key -out /etc/pki/tls/certs/svn.csr sudo openssl x509 -req -days 365 -in /etc/pki/tls/certs/svn.csr -signkey /etc/pki/tls/private/svn.key -out /etc/pki/tls/certs/svn.crt
- 自签名证书 (仅用于测试):
-
修改 Apache SSL 配置 编辑
/etc/httpd/conf.d/ssl.conf文件,找到SSLCertificateFile和SSLCertificateKeyFile并指向你的证书文件。SSLCertificateFile /etc/pki/tls/certs/svn.crt SSLCertificateKeyFile /etc/pki/tls/private/svn.key
-
强制使用 HTTPS (推荐) 编辑你的
/etc/httpd/conf.d/svn.conf文件,在<Location /svn>块的开头添加以下内容,强制所有访问都跳转到 HTTPS。<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> -
重启 Apache 服务
sudo systemctl restart httpd
访问 http://<your_server_ip>/svn/myproject 会自动跳转到 https://<your_server_ip>/svn/myproject,并且是加密连接。
常见问题排查
-
问题:
403 Forbidden- 原因: 通常是权限问题。
- 解决:
- 检查
/var/svn/myproject目录的所有者是否为apache(chown -R apache:apache /var/svn)。 - 检查
/etc/svn/passwd和/etc/svn/authz文件的所有者和权限是否正确 (chown apache:apache ...,chmod 640 ...)。 - 检查
authz文件中的路径和用户名拼写是否正确。
- 检查
-
问题:
405 Method Not Allowed- 原因:
mod_dav_svn模块未正确加载或配置。 - 解决: 检查
/etc/httpd/conf.d/svn.conf文件,确保LoadModule指令存在且正确。
- 原因:
-
问题:
DAV request failed on repository '/svn/myproject': Could not open the requested SVN filesystem- 原因: Apache 无法访问仓库文件。
- 解决: 再次检查仓库目录 (
/var/svn/myproject) 和其内部文件(如db目录)的所有者是否为apache。
-
问题: 防火墙阻止访问
- 原因: 防火墙规则未开放 HTTP/HTTPS 端口。
- 解决: 运行
sudo firewall-cmd --list-all检查规则,并确保http和https服务已添加并重新加载。
