假设一个 Web 应用程序需要在客户的服务器上运行,并由系统管理员在客户方安装,哪种技术堆栈会导致部署更容易,并且系统管理员完成的“服务器手术”最少?
我们的目标平台是 Windows/IIS/SQLServer 和 Linux/Apache/MySQL,但由于客户的 Web 服务器主机可以是任何东西,从刚打开的 Windows 机器到完全修补和最新的 Ubuntu 机器,我们正在尝试找到可以为系统管理员带来最少工作量的技术(阅读,尽量减少我们的支持要求)。
典型的选项当然是 PHP、Python、ASP.Net(为 Linux 安装运行 Mono)、Rails、Java 等。
需要考虑的一些事情是,如果使用一种技术而不是另一种技术构建产品,那么运行 IIS 或 Apache 的普通“开箱即用”Web 服务器是否具有安装产品所需的库。例如,对于客户来说,基于 PHP 的解决方案可能更容易部署在 Linux 机器上,而不必安装 mono 以及在 Linux 机器上将 ASP.Net 解决方案作为 Web 应用程序运行所需的任何其他依赖项.
除此之外,还有一些问题是在“开箱即用”功能和“易于集成”之间取得适当的平衡,例如:包含的 Web 服务器会有帮助吗?或者当 Apache 已经在 80 端口上运行时,这是否会让事情变得更加混乱?
我们正在假设客户可以访问系统管理员,但可能不是全职/专用的 - 类似于共享网络主机帐户。
鉴于此,我们希望客户能够在他们的 Web 服务器上安装 Web 应用程序时尽量减少摩擦,我们正在讨论为此使用的正确技术堆栈。
您可以用 PHP 编写您的应用程序,IIS 管理员的唯一添加是 fastcgi 和 PHP。(此处为教程)。无论您采取何种路线,您都将依赖于需要解决的任何一个平台。从支持方面来看,windows 方面的变量比 linux 方面要少得多。如果您选择以 ASP.net 为目标,您可以从 .net 平台获得大量开箱即用的调试信息。Windows 虚拟主机也是标准化的(只要虚拟主机实际上获得了进行虚拟主机的许可——这当然是您可以传递给您的客户的一个警告),您可以轻松地验证它根据规范设置的服务器。
你可以使用 Python。它可以很好地跨平台运行,安装在大多数 Linux 发行版中,并且很容易在 Windows 上安装(请参阅ActiveState Python)。您可以用几行代码编写自己的 Web 服务器,该服务器可以在 Linux 上运行或作为 Windows 服务运行。
我见过很多依赖堆栈来分发为其应用程序预先配置的整个堆栈的应用程序。我熟悉的例子是 Zimbra 和 Knowledge Tree。从本地管理员的角度来看,他们只有一个安装程序,其中包含他们需要的一切已经配置并准备就绪。
另一个可行的选择是走虚拟设备路线。基于诸如 rpath 之类的东西,或者自己动手制作,并将其作为 Xen、VMWare 和 Hyper-V 的映像提供。
这实际上取决于您是卖给 LAMP 商店还是 .NET 商店。可移植性的最佳选择是 PHP,但您可以使用 .NET 或 Rails 进行更快的开发,这会将您锁定在一个或另一个堆栈中(除非 Mono 比我听说的更好或 Rails 具有良好的 IIS 支持...)。来自 Windows 世界,设置一个基本的 IIS 配置完全是微不足道的,即使您也需要 SQL Express。您甚至可以为他们提供 servermanagercmd.exe 的应答文件并说“使用它,它将为您安装 Web 服务器。”。
在大多数情况下,我希望答案是 PHP/MySQL或.NET/MSSQL。我与许多在一家商店或另一家商店的客户(不是 IT 部门)一起工作 - 如果他们需要安装的应用程序不在他们现有的基础设施上,那么他们可能会对此感到满意,但随后他们会继续前进- 即使您提供了良好的文档和教程,如何在 IIS 上安装 php 支持或需要任何(看似微不足道的)附加组件。
如果您的目标客户是只能访问兼职/临时系统管理员或可能正在使用共享主机的客户,那么我认为您确实需要提供像Wordpress 5 分钟安装一样简单的东西。如果您已经有一个共享主机计划,您将不希望安装另一个网络服务器,并且您可能没有足够的访问权限来添加对 PHP 的支持(如果您使用的是 Windows 主机计划,反之亦然)。
就我个人而言,我会看看哪个是您最容易开发的平台,以及如何将其移植到另一端。
到目前为止,我提出的最好的一体式解决方案(和你一样,我也考虑过)是 Java。在 Linux/Windows/Mac/BSD 或其他任何设备上安装 Java 很容易,它几乎总是可用的。我最近一直在使用 Winstone Java servlet 容器:
http://winstone.sourceforge.net/
它是一个小型的、自包含的 Web 服务器 - 事实上,它是如此自包含,以至于您可以将整个内容归档为单个 JAR 文件。最终用户只需运行 Jar 文件(现在大多数情况下只需双击),您的服务器就会运行。正如您所指出的,如果端口 80 上已经运行了某些东西,这确实会导致问题,但是由于它是一个 Java servlet,因此您无论如何都在创建它,因此无需额外的努力就可以使该 servlet 也可供用户使用 - 如果他们不这样做'不想运行您的一体化 Web 服务器,他们可以在通常的 servlet 容器上以标准方式安装 servlet。