选择一个服务器配置

那你应该用什么服务器?什么最好?

显然,对这个问题没有正确的答案,每个团队都有不同的需要,不同的服务器都有各自的代价。Subversion项目没有更加认可哪种服务,或认为哪个服务更加“正式”一点。

下面是你选择或者不选择某一个部署方式的原因。

svnserve服务器

为什么你会希望使用它:
  • 设置快速简单。

  • 网络协议是有状态的,比WebDAV快很多。

  • 不需要在服务器创建系统帐号。

  • 不会在网络传输密码。

为什么你会希望避免它:
  • 网络协议没有加密。

  • 只有一个认证方法选择。

  • 在这个服务器上明文保存密码。

  • 没有任何类型的日志,甚至是错误。

svnserve使用SSH通道

为什么你会希望使用它:
  • 网络协议是有状态的,比WebDAV快很多。

  • 你可以利用现有的ssh帐号和用户基础。

  • 所有网络传输是加密的。

为什么你会希望避免它:
  • 只有一个认证方法选择。

  • 没有任何类型的日志,甚至是错误。

  • 需要用户在同一个系统组,使用共享ssh密钥。

  • 如果使用不正确,会导致文件许可问题。

Apache 的 HTTP 服务器

为什么你会希望使用它:
  • 允许Subversion使用大量已经集成到Apache的用户认证系统。

  • 不需要在服务器创建系统帐号。

  • 完全的Apache日志。

  • 网络传输可以通过SSL加密。

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

  • 通过web浏览器访问内置的版本库浏览。

  • 版本库可以作为网络驱动器加载,实现透明的版本控制,见“自动版本化”一节

为什么你会希望避免它:
  • 比svnserve慢很多,因为HTTP是无状态的协议,需要更多的传递。

  • 初始设置可能复杂

推荐

通常,本书的作者推荐希望尝试开始使用Subversion的小团队使用svnserve;这是设置最简单,维护最少的方法,而当你的需求改变时,你可以转换到复杂的部署方式。

下面是一些常见的建议和小技巧,基于多年对用户的支持:

  • 如果你尝试为你的团队建立最简单的服务器,安装svnserve是最简单的,最快速的方法。注意,无论如何,如果你的整个部署都是在局域网或者VPN中,版本库数据可以在网络上没有限制的传递。如果版本库部署在internet,你会希望确定版本库的内容不是敏感的(例如只包含开源代码。)

  • 如果你希望与现有的认证系统(LDAP、Active Directory、NTLM、X.509等)集成,你你只能选择Apache服务器,同样的,如果你绝对需要服务器端的日志(服务日志或客户端活动),也需要Apache服务器。

  • 如果你已经决定使用Apache或svnserve,应该单独创建一个运行服务器进程的svn用户,也需要确定版本库目录属于svn用户。从安全的角度,这样很好的利用了操作系统的文件系统许可保护了版本库数据,只有Subversion服务进程可以修改其内容。

  • 如果你有一个严重依赖于SSH帐号的基础,而且你的用户已经在服务器上有了帐号,那建立一个通过ssh的svnserve方案就非常有意义,否则,我们不会建议这种方案。通常还是通过svnserve或Apache管理的用户访问版本库比较安全,而不是使用完全的系统帐户。如果你很希望加密的通讯,那可能还是需要选择这个方案,但我们更加推荐SSL的Apache方案。

  • 不要被简单的让所有用户使用file://的URL访问版本库的方案诱惑,即使,版本库版本库已经对网络共享的所有用户可见,这也不是一个好方案。这样删除了用户和版本库之间的所有保护层:用户可能会偶然(或有意的)毁坏版本库数据库,这样也很难在检查或升级时将版本库脱机,而且这样会造成曾混乱的文件许可问题(见“支持多种版本库访问方法”一节。),注意那就是我们警告使用svn+ssh://的原因—从安全角度讲,这样与作为本地用户访问file://是一样的,如果管理员不小心,会造成同样的问题。