凌峰创科服务平台

Apache SVN服务器如何搭建?

概述

我们将使用以下软件组合:

Apache SVN服务器如何搭建?-图1
(图片来源网络,侵删)
  • Apache: 作为 Web 服务器,提供 HTTP/S 访问和用户认证。
  • SVN (Subversion): 版本控制系统的核心服务器软件。
  • SVN-Mod (mod_dav_svn): Apache 的一个模块,使 Apache 能够理解并处理 SVN 协议。
  • HTTPS: 通过配置 SSL/TLS 来加密数据传输,保证安全性。

第一步:准备工作

  1. 系统要求

    • 一台干净的 Linux 服务器(推荐 CentOS 7/8 或 Ubuntu 20.04/22.04)。
    • 拥有 rootsudo 权限的用户。
    • 服务器有固定的公网 IP 地址。
    • 已关闭防火墙或 SELinux(如果不确定如何配置,可以先临时关闭,配置完成后再按需开启)。
  2. 关闭防火墙和 SELinux(临时,可选)

    • 关闭防火墙:
      # 对于 CentOS 7/8
      sudo systemctl stop firewalld
      sudo systemctl disable firewalld
    • 关闭 SELinux:
      sudo setenforce 0
      # 编辑 /etc/selinux/config 文件,将 SELINUX=disabled 永久关闭

第二步:安装 Apache 和 SVN

使用包管理器(yumapt)安装所需的软件。

对于 CentOS / RHEL / Rocky Linux:

Apache SVN服务器如何搭建?-图2
(图片来源网络,侵删)
# 更新软件包列表
sudo yum update -y
# 安装 Apache、SVN 服务器和 Apache 的 SVN 模块
sudo yum install -y httpd subversion mod_dav_svn

对于 Ubuntu / Debian:

# 更新软件包列表
sudo apt update
# 安装 Apache、SVN 服务器和 Apache 的 SVN 模块
sudo apt install -y apache2 subversion libapache2-mod-svn

安装完成后,启动并设置 Apache 开机自启:

# 启动 Apache 服务
sudo systemctl start httpd
# 设置 Apache 开机自启
sudo systemctl enable httpd

检查 Apache 服务状态:

sudo systemctl status httpd

你应该看到 active (running) 的状态。

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

第三步:创建 SVN 仓库

我们需要一个专门存放 SVN 仓库的目录。

  1. 创建仓库根目录

    sudo mkdir -p /var/svn/repos
  2. 创建一个新的 SVN 仓库 我们创建一个名为 myproject 的项目仓库。

    sudo svnadmin create /var/svn/repos/myproject
  3. 设置仓库目录的所有权 为了让 Apache 进程能够读写仓库,需要将仓库的所有权分配给 Apache 运行时的用户,在 CentOS 上,这个用户是 apache;在 Ubuntu 上是 www-data

    # CentOS
    sudo chown -R apache:apache /var/svn/repos
    # Ubuntu
    # sudo chown -R www-data:www-data /var/svn/repos

第四步:配置 Apache 访问 SVN

这是最关键的一步,我们将配置 Apache 来托管 SVN 仓库,并启用用户认证。

  1. 创建 SVN 配置文件 在 Apache 的 conf.d 目录下创建一个配置文件。

    sudo vim /etc/httpd/conf.d/svn.conf

    粘贴到文件中,请根据你的实际情况修改 SVNParentPathSVNListParentPath 的路径。

    # 启用 SVN 和 DAV 模块
    LoadModule dav_svn_module     modules/mod_dav_svn.so
    LoadModule authz_svn_module   modules/mod_authz_svn.so
    # --- 全局 SVN 配置 ---
    # 设置 SVN 仓库的父目录
    SVNParentPath /var/svn/repos
    # 允许列出父目录下的所有仓库名称(方便发现仓库)
    SVNListParentPath on
    # --- 针对 myproject 仓库的特定配置 ---
    <Location /svn/myproject>
        # 指定具体的仓库路径
        DAV svn
        SVNPath /var/svn/repos/myproject
        # 认证类型:基本认证(用户名/密码)
        AuthType Basic
        # 认证领域,会在浏览器弹窗中显示
        AuthName "SVN Repository for MyProject"
        # 使用哪个文件来存储用户名和密码
        AuthUserFile /etc/svn-auth-users
        # 只有认证通过的用户才能访问
        Require valid-user
        # 权限控制,使用哪个文件来定义用户/组的访问权限
        AuthzSVNAccessFile /etc/svn-authz
    </Location>
    # --- 可选:列出所有父目录下的仓库 ---
    # 如果你启用了 SVNListParentPath,可以添加如下配置
    # <Location /svn>
    #     DAV svn
    #     SVNParentPath /var/svn/repos
    #     AuthType Basic
    #     AuthName "SVN Repositories"
    #     AuthUserFile /etc/svn-auth-users
    #     Require valid-user
    #     AuthzSVNAccessFile /etc/svn-authz
    # </Location>
  2. 创建密码文件 我们使用 htpasswd 命令来创建和管理用户,这个命令通常随 Apache 安装。

    • -c 参数表示创建新文件(仅在第一次创建时使用)。
    • -m 参数表示使用 MD5 加密密码(推荐)。
    # 创建第一个用户 user1
    sudo htpasswd -cm /etc/svn-auth-users user1
    # 系统会提示你输入并确认密码
    # 创建第二个用户 user2
    sudo htpasswd -m /etc/svn-auth-users user2
    # 注意:这里不再使用 -c,否则会覆盖之前的文件

    现在你有了一个包含用户名和加密密码的文件 /etc/svn-auth-users

  3. 创建权限控制文件 这个文件用于精细控制不同用户对不同仓库或目录的读写权限。

    sudo vim /etc/svn-authz

    粘贴到文件中:

    # 全局设置
    [groups]
    # 定义一个名为 'developers' 的用户组,包含 user1 和 user2
    developers = user1, user2
    # 针对 myproject 仓库的权限设置
    [/]
    # 'developers' 组的成员对根目录有读写权限
    @developers = rw
    # 针对 myproject/branches 目录的权限设置
    [/myproject/branches]
    # user1 对 branches 目录有读写权限
    user1 = rw
    # user2 对 branches 目录只有读权限
    user2 = r
    # 针对 myproject/tags 目录的权限设置
    [/myproject/tags]
    # 'developers' 组的成员对 tags 目录只有读权限
    @developers = r
    # 针对 myproject/trunk 目录的权限设置
    [/myproject/trunk]
    # 'developers' 组的成员对 trunk 目录有读写权限
    @developers = rw
  4. 设置配置文件的所有权 Apache 进程需要能够读取这两个配置文件。

    # CentOS
    sudo chown apache:apache /etc/svn-auth-users /etc/svn-authz
    # Ubuntu
    # sudo chown www-data:www-data /etc/svn-auth-users /etc/svn-authz
  5. 重启 Apache 服务使配置生效

    sudo systemctl restart httpd

第五步:测试 SVN 服务器

你可以通过命令行或图形客户端来测试你的 SVN 服务器了。

使用命令行客户端 (svn)

假设你的服务器 IP 是 168.1.100

  1. 列出仓库

    svn list svn://192.168.1.100/svn/myproject

    浏览器会弹出用户名/密码输入框,输入你之前创建的用户(如 user1)和密码,如果认证成功,应该能看到仓库中的内容(如 trunk, branches, tags)。

  2. 检出仓库

    # 创建一个本地目录用于检出
    mkdir -p ~/svn_test
    cd ~/svn_test
    # 检出仓库到本地
    svn checkout svn://192.168.1.100/svn/myproject .

    同样需要输入用户名和密码,完成后,你的

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