本文档正在编写中,内容可能会发生很大变化,可能无法准确描述任何已发布版本的 Apache™ Subversion® 软件。将此页面添加为书签或以其他方式向他人推荐此页面可能不是一个好主意。请访问 https://svnbook.subversion.org.cn/ 查看此书的稳定版本。
那么,您应该使用哪种服务器?哪种最好?
显然,这个问题没有正确答案。每个团队都有不同的需求,不同的服务器代表了不同的权衡。Subversion 项目本身并不认可任何特定服务器,也不认为任何服务器比其他服务器更 “官方”。
以下是一些可能选择一种部署而不是另一种部署的原因,以及可能 不 选择一种部署的原因。
快速易于设置。
网络协议是有状态的,明显快于 WebDAV。
无需在服务器上创建系统帐户。
密码不会通过网络传输。
默认情况下,只有一种身份验证方法可用,网络协议未加密,服务器存储明文密码。(所有这些都可以通过配置 SASL 来更改,但这需要做更多工作。)
没有高级日志记录功能。
没有内置的 Web 浏览。(您需要安装单独的 Web 服务器和存储库浏览软件来添加此功能。)
网络协议是有状态的,明显快于 WebDAV。
您可以利用现有的 SSH 帐户和用户基础设施。
所有网络流量都已加密。
只有一种身份验证方法可用。
没有高级日志记录功能。
它要求用户位于同一系统组中,或使用共享 SSH 密钥。
如果使用不当,会导致文件权限问题。
它允许 Subversion 使用已与 Apache 集成的众多身份验证系统中的任何一个。
无需在服务器上创建系统帐户。
提供完整的 Apache 日志记录。
网络流量可以通过 SSL 加密。
HTTP(S) 通常可以穿过公司防火墙。
通过 Web 浏览器提供内置的存储库浏览。
存储库可以作为网络驱动器挂载,以实现透明的版本控制(参见 名为“自动版本控制”的部分)。
明显慢于 svnserve,因为 HTTP 是无状态协议,需要更多网络往返。
初始设置可能很复杂。
一般来说,本书作者建议对于刚开始使用 Subversion 服务器的小型团队,使用普通的 svnserve 安装;它是最简单的设置,维护问题最少。您始终可以在需要时切换到更复杂的服务器部署。
以下是一些基于多年支持用户的经验得出的常规建议和技巧
如果您试图为您的团队设置最简单的服务器,使用普通的 svnserve 安装是最简单、最快的途径。但是请注意,您的存储库数据将通过网络以明文形式传输。如果您的部署完全在您公司的局域网或 VPN 内,这不成问题。如果存储库暴露于开放的互联网,您可能需要确保存储库的内容不敏感(例如,它只包含开源代码),或者您需要付出额外努力来配置 SASL 以加密网络通信。
如果您需要与现有的遗留身份系统(LDAP、Active Directory、NTLM、X.509 等)集成,您必须使用基于 Apache 的服务器或配置了 SASL 的 svnserve。
如果您已决定使用 Apache 或标准的 svnserve,请在您的系统上创建一个名为 svn 的用户,并将服务器进程作为该用户运行。确保存储库目录完全由 svn 用户拥有。从安全的角度来看,这将存储库数据很好地隔离并受操作系统文件系统权限保护,并且只有 Subversion 服务器进程本身才能更改这些权限。
如果您有一个现有的基础设施,它严重依赖于 SSH 帐户,并且您的用户已经在您的服务器机器上拥有系统帐户,那么部署通过 SSH 的 svnserve 解决方案是有意义的。否则,我们不建议公众广泛使用此选项。一般来说,让您的用户通过(虚拟)帐户访问存储库更安全,这些帐户由 svnserve 或 Apache 管理,而不是通过完整的系统帐户管理。如果您仍然渴望加密通信,我们建议使用带有 SSL 的 Apache 或带有 SASL 加密的 svnserve。
不要被让所有用户直接通过 file://
URL 访问存储库的简单想法所诱惑。即使存储库可以通过网络共享轻松供所有人使用,这也是一个坏主意。它消除了用户和存储库之间的任何保护层:用户可能会意外地(或故意地)损坏存储库数据库,使存储库脱机进行检查或升级变得很困难,并且会导致文件权限问题混乱(参见 名为“支持多种存储库访问方法”的部分)。请注意,这也是我们警告不要通过 svn+ssh://
URL 访问存储库的原因之一,从安全的角度来看,它与本地用户通过 file://
访问的效果相同,如果管理员不小心,它会导致所有相同的问题。