本文档旨在描述 Subversion 1.6.x 系列。如果您正在运行不同版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的文档。

选择服务器配置

那么,您应该使用哪个服务器?哪个最好?

显然,这个问题没有正确答案。每个团队都有不同的需求,不同的服务器代表着不同的权衡。Subversion 项目本身并不支持任何特定服务器,也不认为任何服务器比其他服务器更 官方

以下是一些您可能选择一种部署而不是另一种部署的原因,以及您可能 选择一种部署的原因。

svnserve 服务器

您可能想要使用它的原因
  • 快速简便地设置。

  • 网络协议是有状态的,明显快于 WebDAV。

  • 无需在服务器上创建系统帐户。

  • 密码不会通过网络传输。

您可能想要避免它的原因
  • 默认情况下,只有一种身份验证方法可用,网络协议未加密,服务器存储明文密码。(所有这些都可以通过配置 SASL 来更改,但这需要更多工作。)

  • 没有高级日志记录功能。

  • 没有内置的 Web 浏览。(您需要安装单独的 Web 服务器和存储库浏览软件来添加此功能。)

通过 SSH 运行 svnserve

您可能想要使用它的原因
  • 网络协议是有状态的,明显快于 WebDAV。

  • 您可以利用现有的 SSH 帐户和用户基础设施。

  • 所有网络流量都已加密。

您可能想要避免它的原因
  • 只有一种身份验证方法可用。

  • 没有高级日志记录功能。

  • 它要求用户位于同一系统组,或使用共享 SSH 密钥。

  • 如果使用不当,会导致文件权限问题。

Apache HTTP 服务器

您可能想要使用它的原因
  • 它允许 Subversion 使用任何已经与 Apache 集成的众多身份验证系统。

  • 无需在服务器上创建系统帐户。

  • 提供完整的 Apache 日志记录。

  • 网络流量可以通过 SSL 加密。

  • HTTP(S) 通常可以穿过公司防火墙。

  • 通过 Web 浏览器提供内置的存储库浏览功能。

  • 存储库可以作为网络驱动器挂载,以实现透明的版本控制(参见 名为“自动版本控制”的部分)。

您可能想要避免它的原因
  • 明显慢于 svnserve,因为 HTTP 是一个无状态协议,需要更多的网络往返。

  • 初始设置可能很复杂。

建议

通常,本书的作者建议对小型团队使用标准的 svnserve 安装,这些团队只是尝试开始使用 Subversion 服务器;它是最简单的设置,并且维护问题最少。随着您需求的改变,您可以随时切换到更复杂的服务器部署。

以下是一些基于多年支持用户的经验得出的通用建议和技巧。

  • 如果您尝试为您的团队设置最简单的服务器,标准的 svnserve 安装是最简单、最快的途径。但是请注意,您的存储库数据将在网络上明文传输。如果您的部署完全在公司的 LAN 或 VPN 内,则这不是问题。如果存储库暴露在公共互联网上,您可能需要确保存储库的内容不是敏感的(例如,它只包含开源代码),或者您需要多花一些功夫配置 SASL 来加密网络通信。

  • 如果您需要与现有的传统身份系统(LDAP、Active Directory、NTLM、X.509 等)集成,您必须使用基于 Apache 的服务器或配置了 SASL 的 svnserve

  • 如果您决定使用 Apache 或标准的 svnserve,请在您的系统上创建一个单独的 svn 用户,并以该用户身份运行服务器进程。请确保存储库目录完全由 svn 用户拥有。从安全的角度来看,这可以很好地隔离和保护存储库数据,并且只有 Subversion 服务器进程本身可以更改这些数据。

  • 如果您有一个以 SSH 帐户为基础的现有基础设施,并且您的用户已经在您的服务器机器上拥有系统帐户,那么部署 svnserve-over-SSH 解决方案是有意义的。否则,我们不建议公众广泛使用此选项。通常认为,让用户通过 svnserve 或 Apache 管理的(虚拟)帐户访问存储库,而不是通过完整的系统帐户,会更安全。如果您非常希望使用加密通信,我们建议您改为使用带有 SSL 的 Apache 或带有 SASL 加密的 svnserve

  • 不要被让所有用户直接通过 file:// URL 访问存储库的简单想法所吸引。即使存储库通过网络共享可以轻松地供所有人使用,这也不是一个好主意。它消除了用户和存储库之间的任何保护层:用户可能会意外地(或有意地)破坏存储库数据库,这使得很难将存储库脱机以进行检查或升级,并且会导致文件权限混乱(参见 名为“支持多种存储库访问方法”的部分)。请注意,这也是我们警告不要通过 svn+ssh:// URL 访问存储库的原因之一——从安全的角度来看,这与本地用户通过 file:// 访问的效果相同,如果管理员不小心,可能会导致相同的问题。