凌峰创科服务平台

Linux下如何搭建SVN服务器?

  1. 安装 SVN 服务
  2. 创建版本库
  3. 配置用户权限
  4. 配置防火墙与 SELinux
  5. 启动并设置开机自启
  6. 客户端连接测试
  7. 常用管理命令

第 0 步:准备工作

确保您拥有一台已经安装好 CentOS 7 (或类似 RHEL/CentOS 系统) 的服务器,并且拥有 root 或 sudo 权限。

Linux下如何搭建SVN服务器?-图1
(图片来源网络,侵删)
# 检查系统版本
cat /etc/redhat-release
# 输出应为类似 "CentOS Linux release 7.9.2009 (Core)"
# 更新系统软件包
sudo yum update -y

第 1 步:安装 SVN 服务器

在 CentOS 7 中,SVN 服务通常由 subversionsubversion-devel 软件包提供。httpd (Apache) 是可选的,但我们这里先介绍更简单、更常用的独立服务器模式 (svnserve)。

# 使用 yum 安装 subversion
sudo yum install -y subversion

安装完成后,可以验证一下版本:

svnserve --version

第 2 步:创建版本库

版本库是 SVN 用来存放代码和数据的地方,我们通常会在 /var/svn 目录下创建它。

  1. 创建 SVN 根目录

    Linux下如何搭建SVN服务器?-图2
    (图片来源网络,侵删)
    sudo mkdir -p /var/svn
  2. 创建一个新的版本库 我们以创建一个名为 myproject 的项目为例。

    sudo svnadmin create /var/svn/myproject

    执行此命令后,/var/svn/myproject 目录下会自动生成一系列文件和文件夹,如 conf, db, hooks, locks 等。

  3. 设置版本库目录的所有者 为了方便管理,我们将这个目录的所有者设置为当前运行 svnserve 服务的用户(通常是 apacheroot),这里我们设置为 root

    sudo chown -R root:root /var/svn/myproject

第 3 步:配置用户和权限

SVN 的用户和权限信息存储在版本库的 conf 目录下,我们需要编辑三个核心文件。

Linux下如何搭建SVN服务器?-图3
(图片来源网络,侵删)
  1. 进入版本库的配置目录

    cd /var/svn/myproject/conf
  2. 编辑 passwd 文件:添加用户 这个文件用于定义 SVN 的用户名和密码,格式为 用户名 = 密码

    sudo vi passwd

    在文件末尾添加两个用户,dev1dev2

    [users]
    # harry = harryssecret
    # sally = sallyssecret
    dev1 = password123
    dev2 = anotherpass
  3. 编辑 authz 文件:配置权限 这个文件用于定义用户对版本库中不同路径的访问权限(读 r,写 w)。

    sudo vi authz

    在文件末尾添加如下配置:

    [/]
    # 根目录下的所有路径
    dev1 = rw
    dev2 = r
    # 可以设置一个管理员组
    # [groups]
    # admin = dev1
    # [/]
    # @admin = rw
    • [/] 表示整个版本库的根目录。
    • dev1 = rw 表示用户 dev1 对根目录及其所有子目录有读写权限。
    • dev2 = r 表示用户 dev2 只有读权限。
  4. 编辑 svnserve.conf 文件:启用认证 这是 SVN 服务器的核心配置文件,它告诉 svnserve 去哪里查找用户和权限信息。

    sudo vi svnserve.conf

    找到并修改/取消注释以下几行,确保它们指向正确的配置文件:

    [general]
    # 这行必须启用,告诉 svnserve 使用哪个权限配置文件
    authz-db = authz
    # 这行必须启用,告诉 svnserve 使用哪个密码文件
    password-db = passwd
    # 这行用于指定匿名用户的权限,默认是只读,我们设为无权限更安全
    # anon-access = none
    # auth-access = write # 这行通常已经存在且被注释,确保它是启用的

重要提示: svnserve.conf 文件中,所有以 开头的都是注释。取消注释这些行时,务必确保行首没有多余的空格,否则会导致配置不生效。


第 4 步:配置防火墙与 SELinux

为了能从外部访问 SVN 服务器,我们需要开放相应的端口,并正确配置 SELinux。

  1. 开放 SVN 端口 svnserve 默认使用 3690 端口。

    # 永久开放 3690 端口
    sudo firewall-cmd --permanent --add-port=3690/tcp
    # 重新加载防火墙使配置生效
    sudo firewall-cmd --reload
  2. 配置 SELinux (非常重要!) 默认情况下,SELinux 会阻止 svnserve 访问 /var/svn 这样的目录,我们需要为它设置正确的安全上下文。

    # 为 /var/svn 目录设置正确的 SELinux 上下文
    sudo semanage fcontext -a -t svnrhapsody_content_t "/var/svn(/.*)?"
    # 应用上述上下文设置
    sudo restorecon -Rv /var/svn
    • 如果系统没有安装 semanage 工具(通常在 policycoreutils-python 包中),可以先安装它:
      sudo yum install -y policycoreutils-python
    • 如果上面的命令执行后问题依旧,可以尝试一个更宽松的设置(不推荐用于生产环境):
      sudo chcon -R -t public_content_rw_t /var/svn

第 5 步:启动 SVN 服务并设置开机自启

  1. 启动 svnserve 服务 我们使用 -d 选项让它以守护进程模式在后台运行,-r 选项指定版本库的根目录。

    # -d: 后台运行
    # -r: 指定版本库根目录,这样用户就可以通过 svn://IP/myproject 访问
    # --listen-port: 指定端口,默认是 3690
    svnserve -d -r /var/svn
  2. 检查服务状态

    # 检查端口是否监听
    netstat -tuln | grep 3690
    # 或者使用 ss 命令 (新版本推荐)
    ss -tuln | grep 3690
    # 输出应为类似 tcp    0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN
  3. 设置开机自启 为了让服务器重启后 SVN 服务能自动启动,我们可以创建一个 systemd 服务文件。

    sudo vi /etc/systemd/system/svnserve.service

    写入文件:

    [Unit]
    Description=Subversion protocol daemon
    After=network.target
    [Service]
    Type=forking
    User=root
    Group=root
    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
    # 检查服务状态
    sudo systemctl status svnserve.service

第 6 步:客户端连接测试

您可以从任何一台安装了 SVN 客户端的机器(Windows, Linux, macOS)来访问这个服务器了。

SVN 的客户端命令是 svn

  1. 检出项目到本地 假设您的服务器 IP 是 168.1.100

    # svn://服务器IP/版本库名称
    svn checkout svn://192.168.1.100/myproject

    系统会提示您输入用户名和密码:

    Authentication realm: <svn://192.168.1.100:3690> 1234567890
    Username: dev1
    Password: <在这里输入 dev1 的密码>
  2. 测试写入权限 进入检出的 myproject 目录,添加一个新文件并尝试提交。

    cd myproject
    echo "Hello from dev1" > test.txt
    svn add test.txt
    svn commit -m "dev1 adds a test file"

    这次同样需要输入 dev1 的密码,如果提交成功,说明 dev1 的写权限配置正确。

  3. 测试只读权限 切换到另一个用户(dev2)的 shell 或终端,再次尝试检出:

    svn checkout svn://192.168.1.100/myproject myproject_dev2

    使用 dev2 的密码登录。dev2 可以检出,但如果尝试修改并提交,会收到权限错误。


第 7 步:常用管理命令

  • 查看版本库信息

    svnlook info /var/svn/myproject
  • 查看日志

    svnlook log /var/svn/myproject
  • 导出版本库

    # 导出整个库到一个临时目录
    svnadmin dump /var/svn/myproject > myproject_backup.svn.dump
  • 导入备份

    # 创建一个新库来恢复
    svnadmin create /var/svn/myproject_restore
    # 导入备份
    svnadmin load /var/svn/myproject_restore < myproject_backup.svn.dump
  • 修改用户密码 只需编辑 /var/svn/myproject/conf/passwd 文件,修改对应用户的密码行,然后重启 svnserve 服务即可。

至此,您已经成功在 Linux 下搭建并配置好了一个功能完整的 SVN 服务器。

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