凌峰创科服务平台

Linux SVN服务器如何搭建配置?

Linux SVN服务器搭建与配置全指南(2025最新版,从零到精通)

** 本文详细介绍了在Linux系统(以CentOS 7为例)上从零开始搭建和配置Subversion(SVN)服务器的完整过程,内容涵盖环境准备、SVN安装、仓库创建、用户权限配置、多仓库管理、以及通过HTTP/Apache访问等核心步骤,旨在为开发者提供一份清晰、实用、可操作的实战指南。

Linux SVN服务器如何搭建配置?-图1
(图片来源网络,侵删)

引言:为什么在Linux上搭建SVN服务器?

在版本控制的世界里,Git无疑是当之无愧的王者,对于一些历史悠久的项目、或者对集中式管理有偏好的团队来说,Subversion(SVN)依然是一个稳定、可靠且功能强大的选择,SVN的集中式架构使得权限管理、版本历史追溯和代码审计变得异常简单。

本文将以当前企业中广泛使用的 CentOS 7 为例,手把手教你如何搭建一个功能完善的SVN服务器,无论你是系统管理员还是团队负责人,这份指南都能帮助你快速上手,告别代码管理的混乱时代。


准备工作:系统与环境要求

在开始之前,请确保你的Linux服务器满足以下基本条件:

  • 操作系统: CentOS 7 / Red Hat Enterprise Linux 7 (或其他基于RHEL的发行版)
  • 权限要求: 具有root权限或sudo权限的用户账户
  • 网络连接: 服务器可以访问互联网,用于下载安装包
  • 硬件资源: 对硬件要求不高,普通的服务器配置即可

安装Subversion(SVN)

SVN通常在Linux发行版的官方软件仓库中都有提供,因此安装过程非常简单。

Linux SVN服务器如何搭建配置?-图2
(图片来源网络,侵删)

更新系统软件包 更新系统的软件包列表,确保我们安装的是最新版本。

sudo yum update -y

安装SVN服务端和客户端 使用yum命令同时安装SVN的服务端(subversion)和客户端工具(通常也包含在同一个包中)。

sudo yum install subversion -y

验证安装 安装完成后,可以通过以下命令检查SVN的版本号,以确认安装成功。

svnserve --version

如果看到版本信息输出,说明SVN已经成功安装在你的系统上。

Linux SVN服务器如何搭建配置?-图3
(图片来源网络,侵删)

创建SVN仓库

SVN的核心是“仓库”(Repository),它用于存储所有的文件和版本历史。

创建仓库存储目录 我们约定将所有SVN仓库存放在/var/svn目录下,首先创建这个目录。

sudo mkdir -p /var/svn

创建第一个仓库 假设我们要创建一个名为my_project的仓库,使用svnadmin命令进行创建。

sudo svnadmin create /var/svn/my_project

设置仓库目录所有者 为了方便后续配置,我们将仓库目录的所有者设置为当前运行命令的用户(例如apache用户,因为我们后续会通过Apache访问)。

sudo chown -R apache:apache /var/svn/my_project

查看仓库结构 创建成功后,进入my_project目录,你会看到一些自动生成的文件和文件夹,如conf, db, hooks, format等,这些都是SVN仓库正常工作所必需的。


配置SVN用户与权限

SVN的权限和用户信息存储在仓库的conf目录下,我们需要修改三个核心配置文件。

配置用户密码文件 (passwd) passwd文件用于定义哪些用户可以访问仓库。

  • 打开passwd文件:
    sudo vi /var/svn/my_project/conf/passwd
  • 在文件中,按照 [用户名] = 密码 的格式添加用户。
    [users]
    # harry = sally
    # sally = harry
    admin = mysecretpassword
    developer = devpassword

    注释掉的行是示例,我们添加了admindeveloper两个用户。

配置用户权限文件 (authz) authz文件是SVN权限管理的核心,它精细地控制每个用户对不同仓库或目录的读写权限。

  • 打开authz文件:
    sudo vi /var/svn/my_project/conf/authz
  • 在文件末尾添加以下配置:
    [/]
    # 给admin用户读写权限
    admin = rw
    # 给developer用户只读权限
    developer = r
    # 或者给一个用户组分配权限
    #[mygroup]
    #user1 = rw
    #user2 = rw
    • [/] 表示对整个仓库的权限设置。
    • rw 表示读写权限。
    • r 表示只读权限。
    • 你还可以创建用户组进行统一管理,如示例中的[mygroup]

配置仓库主文件 (svnserve.conf) 这个文件是SVN仓库的全局配置,它决定了是否启用passwdauthz文件。

  • 打开svnserve.conf文件:
    sudo vi /var/svn/my_project/conf/svnserve.conf
  • 修改以下几行,确保它们没有被注释掉(去掉行首的)并且值正确:
    [general]
    # 使用我们上面创建的密码文件
    password-db = passwd
    # 使用我们上面创建的权限文件
    authz-db = authz
    # 匿名用户无任何权限
    anon-access = none
    # 认证用户拥有读写权限(这个会被authz文件覆盖,但设置成更安全)
    auth-access = write

设置配置文件权限 为了保证安全性,conf目录下的配置文件应该只能被apache用户(或root)读取和写入。

sudo chmod -R 700 /var/svn/my_project/conf

启动SVN服务并配置开机自启

我们已经完成了仓库和用户权限的配置,可以启动SVN服务了。

启动SVN服务 svnserve是SVN的独立守护进程,我们指定它监听在3690端口(SVN默认端口),并以-d(守护进程模式)和-r(指定仓库根目录)方式运行。

sudo svnserve -d -r /var/svn

检查SVN服务状态 使用netstatss命令检查3690端口是否正在监听。

# 使用netstat
sudo netstat -tulnp | grep 3690
# 或者使用ss (CentOS 7推荐)
sudo ss -tulnp | grep 3690

如果看到类似LISTEN 0 5 *:3690 *:*的输出,说明服务已成功启动。

配置开机自启 为了确保服务器重启后SVN服务能自动运行,我们需要将其添加到系统服务中。 创建一个新的服务文件:

sudo vi /etc/systemd/system/svnserve.service
```粘贴到文件中:
```ini
[Unit]
Description=Subversion protocol daemon
After=network.target
[Service]
Type=forking
User=apache
Group=apache
ExecStart=/usr/bin/svnserve -d -r /var/svn
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

启用并启动该服务:

# 重新加载systemd
sudo systemctl daemon-reload
# 启用服务(开机自启)
sudo systemctl enable svnserve.service
# 立即启动服务
sudo systemctl start svnserve.service

SVN客户端连接与测试

服务器已经搭建好了,现在我们用SVN客户端来测试一下。

检出仓库 假设你的服务器IP地址是 168.1.100,你可以使用以下命令将仓库my_project检出(下载)到本地。

svn checkout svn://192.168.1.100/my_project

系统会提示你输入用户名和密码,分别输入我们之前设置的adminmysecretpassword

提交文件

  • my_project目录下创建一个新文件,例如README.txt
  • 使用svn add命令将新文件加入版本控制。
    svn add README.txt
  • 使用svn commit命令提交文件到服务器。
    svn commit -m "Initial commit: Add README file"

    同样需要输入密码,如果提交成功,说明你的SVN服务器已经可以正常工作了!


(可选)通过Apache访问SVN仓库

虽然svnserve已经足够,但通过Apache(WebDAV)访问SVN仓库可以更好地与现有Web服务集成,并支持HTTPS加密。

安装Apache和SVN模块

sudo yum install httpd mod_dav_svn -y

创建SVN配置文件 在Apache的配置目录下为我们的仓库创建一个配置文件。

sudo vi /etc/httpd/conf.d/svn.conf
# 创建SVN虚拟主机
<Location /svn/my_project>
   DAV svn
   SVNPath /var/svn/my_project
   AuthType Basic
   AuthName "My SVN Repository"
   AuthUserFile /etc/svn-users
   Require valid-user
</Location>
  • DAV svn:启用SVN模块。
  • SVNPath:指定SVN仓库的物理路径。
  • AuthUserFile:指定一个存放用户名和密码的文件(与passwd文件不同)。

创建Apache认证用户 我们需要为Apache创建一个独立的用户认证文件。

# 创建并设置用户密码
sudo htpasswd -cm /etc/svn-users admin

系统会提示你为admin用户设置一个密码,注意,-c选项会创建新文件,如果后续要添加其他用户,请去掉-c,否则会覆盖原有文件。

启动并启用Apache服务

sudo systemctl start httpd
sudo systemctl enable httpd

配置防火墙 如果开启了防火墙,需要开放HTTP(80)和HTTPS(443)端口。

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

测试Web访问 你可以通过浏览器访问 http://你的服务器IP/svn/my_project,浏览器会弹出认证窗口,输入你刚刚创建的用户名和密码即可。


总结与常见问题

至此,我们已经成功在Linux(CentOS 7)上搭建了一个功能完整的SVN服务器,它既可以通过独立的svnserve端口(3690)访问,也可以通过Apache(80端口)访问,并且实现了精细的用户和权限管理。

常见问题(FAQ):

  • Q: 连接SVN服务器时提示“Could not connect to the server”怎么办?

    • A: 首先检查SVN服务是否运行(ss -tulnp | grep 3690),如果未运行,请重新启动,如果已运行,检查服务器防火墙是否放行了3690端口。
  • Q: 提交代码时提示“authorization failed”怎么办?

    • A: 99%的情况是svnserve.confauthz文件配置有误,请仔细检查文件中的password-dbauthz-db路径是否正确,以及authz文件中的用户名和权限设置是否准确。
  • Q: 如何创建多个仓库?

    • A: 只需重复 第四步 的操作,在/var/svn目录下创建新的文件夹,然后用svnadmin create命令初始化即可,每个仓库都是独立的,拥有自己的conf目录。
  • Q: SVN和Git应该如何选择?

    • A: 对于新项目,特别是分布式团队或开源项目,Git是首选,但对于需要严格中央控制、权限审计,或者与Windows系统集成度要求高的环境,SVN依然是一个非常好的选择。

希望这份详尽的指南能帮助你顺利搭建自己的SVN服务器!如果过程中遇到任何问题,欢迎在评论区留言讨论。

分享:
扫描分享到社交APP
上一篇
下一篇