有一堆基于托管云的 nodejs 托管服务,这些服务看起来相对较新,有些仍处于测试阶段。
托管 nodejs 应用程序的另一种方法是在像 Linode 这样的 VPS 上设置堆栈。
我想知道这两种部署之间的基本区别是什么。在选择一个而不是另一个时应该考虑哪些因素?
考虑到这些服务的年轻程度,哪一种更适合生产。
需要明确的是,我不是要选择提供商,而是要决定是托管在托管的 nodejs 特定主机上还是在老式的自我设置 VPS 上。
使用其中一项服务在很大程度上是无需动手的——您编写代码并让他们担心管理盒子、保持您的流程正常运行、创建发布渠道、修补操作系统等......
相比之下,拥有自己的 VM 可为您提供更多控制权,但需要更多的前期和持续时间投资。
另一个考虑因素是一些托管商和云提供商提供专有或独特的技术变体。它们有理由并且它们提供了价值,但这确实意味着如果你想切换云提供商,这可能意味着你必须重写代码、部署脚本等......另一方面,使用具有标准操作系统的虚拟机作为基线是很一般。如果您自动化/脚本/记录您的虚拟机配置并且您的代码保持通用,那么您的选项将保持开放。如果您确实依赖于专有云技术,那么最好将其抽象到接口后面,这样它就是一个解耦的组件,而不是散布在您的代码中。
我都做过。我最近做 VM 路径主要是因为我想要学习经验。我不得不:
名单还在继续。最后,它花费了我更多的前期时间而不是编码,但我学到了更多的东西。如果这些对你很重要,那就试一试。如果您想专注于编写代码,那么节点托管提供商可能适合您。
最后,我还有更多选择——我想添加第二个站点。我在我的反向代理中添加了一个条目,附加我的脚本以永远启动另一个应用程序,瞧,另一个站点。更多的控制。在那之后,我想试试 MongoDB - 很简单 - 安装了它。
成本方面它们大致相同,但是如果您开始使用许多其他软件包(如数据库等)托管多个站点,那么 VM 可以开始变得更便宜。
Nodejitsu 开源了他们的工具,如果你自己做也可以更容易。
如果你自己做,这里有一些链接可以帮助你:
保持服务器正常运行:
https://github.com/nodejitsu/forever/
http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever
https://github.com/bryanmacfarlane/svchost
Upstart 和 Monit 通用自动启动和通过监控重新启动
http://howtonode.org/deploying-node-upstart-monit
集群节点每个核心运行一个进程
http://nodejs.org/docs/latest/api/cluster.html
反向代理
https://github.com/nodejitsu/node-http-proxy
https://github.com/nodejitsu/node-http-proxy/issues/232
http://blog.nodejitsu.com/http-proxy-middlewares
https://github.com/nodejitsu/node-http-proxy/issues/168#issuecomment-3289492
编写安装脚本
https://github.com/bryanmacfarlane/svcinstall
发布网站
恕我直言,设置自己的堆栈的最大缺点是您需要管理诸如让 Node.js 运行forever
、将其作为守护进程启动、将其置于 Nginx 等反向代理后面等事情......很棒的事情关于 Node.js - 让启动 Web 服务器成为单线 - 是它在生产就绪系统方面的最大缺点之一。
此外,您还遇到了自己管理、更新和保护服务器的所有问题。
这对主持人来说要容易得多:通常是这样git push
,就是这样。缩放?简单的。复制?简单的。...?简单的。只需点击几下即可。
房东的缺点是您无法调整环境。好的,您可能可以选择运行哪个版本的 Node.js 和/或 npm,但仅此而已。您无法控制安装的第 3 方软件。您无法控制操作系统。您无法控制服务器的位置。等等 ...
当然,一些主机允许您访问其中的一些内容,但很少有主机支持所有这些。
所以,基本上关于 Node.js 的问题与其他技术的问题是一样的:这是个人主义、定价、可扩展性、可靠性、知识......
我个人选择和主持人一起去:我节省的时间和精力轻松胜过缺点。请注意:就我个人而言。
这个问题需要单独回答。
使用 Docker 是在单个 Linux VPS 上简化设置的另一种方法。使用 Docker,开发和生产设置都更快、更健壮、更安全。
设置更快、更健壮,因为您将立即部署准备好的 Node.js 映像,而无需运行任何安装脚本。而且它会更加安全,因为内部依赖项,例如数据库,可以完全对外界隐藏,并且只能从 Docker 内部网络访问。最重要的是,Docker 显着简化了底层操作系统和 Node.js 运行时的升级过程。
有两种方法可以设置 Node.js Docker 环境。第一个 – 按照此处发布的说明如何对您的应用程序进行 docker 化并使用 Docker 部署它,并在需要时与数据库一起部署。该指南提供了开发设置的说明,生产设置将类似。
另一种方法是部署官方 Node.js docker 映像并将应用程序代码作为卷或文件夹安装到 Node.js 映像。这将允许在不重新构建和重新部署应用程序的情况下更新 Node.js 映像。这种方法解决了长期存在的 Docker 镜像安全补丁问题。
要帮助在单台机器上设置 Docker - 您可以使用Abberit Admin Panel。只需单击一个按钮,它将为您设置 Node.js 环境,包括数据库(如果您需要它们)。该工具是免费的,您可以在完成初始设置后将其关闭。另一方面,如果以后您决定减少生产的维护税 - 您可以迁移到托管服务,而无需对应用程序进行任何更改。
Disclaimer: I am one of the founders of Abberit.