凌峰创科服务平台

Apache SVN如何快速搭建服务器?

这个方案结合了 svnserveHTTP(S) 两种访问方式,是目前最稳定、最主流的部署方式。

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

方案概述

我们将采用以下架构:

  1. Apache HTTP Server: 作为 Web 服务器,提供 HTTP(S) 协议访问 SVN 仓库,这种方式支持通过浏览器浏览仓库,并且可以方便地与防火墙和代理协同工作。
  2. SVN (Subversion): 版本控制系统的核心软件。
  3. mod_dav_svn: Apache 的一个模块,用于将 SVN 仓库“挂载”到 Apache 服务器上,使其能够通过 HTTP 协议访问。
  4. svnserve: SVN 自带的一个轻量级服务器,我们将用它来处理 svn:// 协议的访问,以及管理用户认证和权限。

最终效果:用户可以通过两种方式访问仓库:

  • svn://your_server_ip/svn/project_repo (通过 svnserve)
  • http://your_server_ip/svn/project_repo (通过 Apache HTTP)

第一步:环境准备

我们假设你有一台干净的 CentOS 7 服务器,并且拥有 root 权限。

  1. 更新系统

    Apache SVN如何快速搭建服务器?-图2
    (图片来源网络,侵删)
    sudo yum update -y
  2. 安装必要的软件包 我们需要安装 Apache、SVN 以及 Apache 的 SVN 模块。

    sudo yum install -y httpd subversion mod_dav_svn
    • httpd: Apache HTTP 服务器。
    • subversion: SVN 软件包。
    • mod_dav_svn: Apache 的 SVN 模块。
  3. 启动并设置 Apache 开机自启

    sudo systemctl start httpd
    sudo systemctl enable httpd
  4. 检查防火墙和 SELinux 为了让外部能访问,需要开放 HTTP (80) 和 SVN (3690) 端口。

    # 开放端口
    sudo firewall-cmd --permanent --add-service=http
    sudo firewall-cmd --permanent --add-port=3690/tcp
    # 重载防火墙规则
    sudo firewall-cmd --reload

    SELinux (安全增强型 Linux) 是一个安全子系统,配置不当会阻止 Apache 访问 SVN 仓库,为了简化,我们暂时将其设置为宽松模式(生产环境请谨慎配置)。

    Apache SVN如何快速搭建服务器?-图3
    (图片来源网络,侵删)
    # 临时设置(重启后失效)
    setenforce 0
    # 永久设置
    sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

    重要提示:在生产环境中,建议学习并正确配置 SELinux 策略,而不是简单地禁用它。


第二步:创建 SVN 仓库

我们将在 /var/svn 目录下创建仓库。

  1. 创建仓库根目录

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

    sudo svnadmin create /var/svn/myproject

    执行后,/var/svn/myproject 目录下会出现一系列文件和文件夹,如 conf, db, hooks, hooks-env.tmpl 等。

  3. 设置仓库目录所有者 Apache HTTP 进程通常以 apache 用户运行,需要给它赋予仓库的读写权限。

    sudo chown -R apache:apache /var/svn

第三步:配置用户认证和权限

这是 SVN 服务器的核心部分,我们将使用 svnserve 的认证机制,这样 svn://http:// 两种方式可以共用同一套用户和密码。

  1. 进入仓库的配置目录

    cd /var/svn/myproject/conf

    你会看到三个文件:svnserve.conf, passwd, authz

  2. 配置 svnserve.conf (仓库主配置文件) 这个文件是 SVN 仓库的“总开关”,用来启用认证和权限文件。

    sudo vim svnserve.conf

    编辑文件,确保以下配置项被取消注释并且值正确:

    [general]
    # 匿名用户不可读,必须认证
    anon-access = none
    # 认证用户可读写
    auth-access = write
    # 密码文件路径,相对于当前目录
    password-db = passwd
    # 权限文件路径,相对于当前目录
    authz-db = authz
    # 认证命名空间,提示用户输入用户名时会显示它
    realm = My Project Repository

    注意svnserve.conf 文件中的每一项配置的前面和后面都不能有空格,否则会出错。

  3. 配置 passwd (用户密码文件) 这个文件用于存储用户名和密码。

    sudo vim passwd

    在文件末尾添加你的用户和密码,格式为 用户名 = 密码

    [users]
    # harry = harryssecret
    # sally = sallyssecret
    admin = your_strong_password
    user1 = another_password
  4. 配置 authz (权限控制文件) 这个文件用于精细控制不同用户或用户组对不同仓库或目录的访问权限。

    sudo vim authz

    编辑文件,添加如下内容:

    # 定义用户组
    [groups]
    # admin_group = admin
    # developers = user1, user2
    # 根目录权限设置
    [/]
    # admin_group = rw
    # * = r  # * 代表所有用户,这里表示所有用户只有读权限,但我们上面设置了anon-access=none,所以匿名用户无法访问
    # 给特定用户授权
    admin = rw
    user1 = rw
    # 如果你有多个仓库,可以这样设置
    # [/project1]
    # harry = rw
    # sally = r
    • [groups]: 定义用户组。
    • [/]: 表示根目录,即整个仓库的权限。
    • 用户名 = 权限:
      • r: 只读
      • rw: 读写
      • 或没有权限条目:表示无权限

第四步:启动 svnserve 服务

svnserve 负责处理 svn:// 协议的请求。

  1. 创建 svnserve 的 systemd 服务文件 为了方便管理,我们创建一个服务文件。

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

    粘贴进去:

    [Unit]
    Description=Subversion protocol daemon
    After=network.target
    [Service]
    Type=forking
    ExecStart=/usr/bin/svnserve -d -r /var/svn
    User=apache
    Group=apache
    Restart=on-abort
    [Install]
    WantedBy=multi-user.target
    • -d: 以守护进程模式运行。
    • -r /var/svn: 将 /var/svn 作为仓库的根目录,这样访问 svn://your_ip/myproject 时,svnserve 就会去 /var/svn/myproject 寻找仓库。
  2. 启动并设置开机自启

    sudo systemctl daemon-reload
    sudo systemctl start svnserve
    sudo systemctl enable svnserve
  3. 检查 svnserve 状态

    sudo systemctl status svnserve

    如果看到绿色的 active (running),说明服务已成功启动。


第五步:配置 Apache HTTP 服务器

现在配置 Apache,使其也能提供 SVN 服务。

  1. 检查 Apache 的 SVN 模块是否加载

    httpd -M | grep dav_svn

    如果看到 dav_svn_module (shared)authz_svn_module (shared),说明模块已正确加载。

  2. 创建 SVN 的 Apache 配置文件 在 Apache 的配置目录下创建一个专门用于 SVN 的文件。

    sudo vim /etc/httpd/conf.d/svn.conf
    # 启用SVN DAV模块
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    # 定义SV
分享:
扫描分享到社交APP
上一篇
下一篇