【问题标题】:NodeJS Managed Hostings vs VPS [closed]NodeJS托管与VPS [关闭]
【发布时间】:2012-09-21 02:20:09
【问题描述】:

有一堆基于托管云的 nodejs out there 托管服务似乎相对较新,有些仍处于测试阶段。

另一个托管 nodejs 应用程序的方法是在像 Linode 这样的 VPS 上设置堆栈。

我想知道这两种部署之间的基本区别是什么。 在选择一个而不是另一个时应该考虑哪些因素?

考虑到这些服务的年轻程度,哪一个更适合生产。

需要明确的是,我不是要选择提供商,而是要决定是在托管 nodejs 特定主机上托管还是在老式的自我设置 VPS 上托管。

【问题讨论】:

  • 有些人已经注意到了,即使您与主机商一起去,也值得通过一次来了解发生了什么。希望我的链接能帮助...
  • 谢谢,我相信我现在会使用 Linode VPS,所以您的链接会非常有帮助,尽管我希望能找到一些不太明显的缺点和优点,特别是在托管解决方案上,这些解决方案似乎非常黑箱我现在。
  • 好的 - 有道理。在优点/缺点上添加了更多内容。如果我想到更多,我会跟进......
  • 我没用过云主机,一直用VPS for Node。在 linux 机器上管理 Node 实际上非常容易。但是,您是否考虑过 Linode 的替代品?我一直觉得它们比较贵。 Digital Ocean 相当新,价格实惠,服务优质。
  • 当我在生产环境中使用它们时,我发现 Nodejitsu 和 Heroku 等这些简单的一键式云提供商有一个阴暗面。每个“VM”的内存真的很小,比如 256MB 小。就像他们将系统设计为必须具有负载平衡一样。只有一个节点,很抱歉很慢,有时会延迟唤醒。 Linode 和 Digital Ocean 速度很快,亚马逊也有,但这些都需要你自己动手。

标签: node.js hosting cloud vps


【解决方案1】:

使用 Docker 是在单个 Linux VPS 上简化设置的另一种方法。使用 Docker,开发和生产设置都更快、更健壮、更安全。

设置更快、更健壮,因为您将立即部署准备好的 Node.js 映像,而无需运行任何安装脚本。而且它会更加安全,因为内部依赖项,例如数据库,可以完全对外界隐藏,并且只能从 Docker 内部网络访问。最重要的是,Docker 显着简化了底层操作系统和 Node.js 运行时的升级过程。

有两种设置 Node.js Docker 环境的方法。第一个 – 遵循发布的说明 here 如何对您的应用程序进行 docker 化并使用 Docker 部署它,并在需要时与数据库一起部署。该指南提供了开发设置的说明,生产设置将类似。

另一种方法是部署官方 Node.js docker 映像并将应用程序代码作为卷或文件夹安装到 Node.js 映像。这将允许在不重新构建和重新部署应用程序的情况下更新 Node.js 映像。这种方法通过 Docker 映像的安全补丁解决了long-standing problem

为了帮助在单机上设置 Docker - 您可以使用Abberit Admin Panel。只需单击一个按钮,它将为您设置 Node.js 环境,包括数据库(如果您需要它们)。该工具是免费的,您可以在完成初始设置后将其关闭。另一方面,如果以后您决定减少生产的维护税 - 您可以迁移到托管服务,而无需对应用程序进行任何更改。

免责声明:我是 Abberit 的创始人之一。

【讨论】:

    【解决方案2】:

    使用其中一项服务在大多数情况下无需动手 - 您编写代码并让他们担心管理盒子、保持您的流程正常运行、创建发布渠道、修补操作系统等...

    相比之下,拥有自己的虚拟机可为您提供更多控制权,但需要更多的前期和持续时间投资。

    另一个考虑因素是一些托管商和云提供商提供专有或独特的技术变体。它们有理由并且它们提供了价值,但这确实意味着如果你想切换云提供商,这可能意味着你必须重写代码、部署脚本等......另一方面,使用具有标准操作系统的虚拟机作为基线是很一般。如果您自动化/脚本/记录您的虚拟机配置并且您的代码保持通用,那么您的选项将保持开放。如果您确实依赖于专有云技术,那么最好将其抽象到接口后面,这样它就是一个解耦的组件,而不是散布在您的代码中。

    我都做过。我最近做 VM 路径主要是因为我想要学习经验。我不得不:

    • 从云提供商处获取虚拟机
    • 我必须更新和修补操作系统
    • 我必须安装 git 并将其配置为发布渠道
    • 我不得不编写一些脚本并使用 forever 之类的东西来保持运行
    • 我必须配置反向 http-proxy 才能让它运行多个站点。
    • 我必须通过云提供商配置 DNS,为 git 等打开端口...

    名单还在继续。最后,它花费了我更多的前期时间而不是编码,但我学到了更多的东西。如果这些对你很重要,那就试一试。如果您想专注于编写代码,那么节点托管服务提供商可能适合您。

    最后,我还有更多选择——我想添加第二个网站。我在我的反向代理中添加了一个条目,附加我的脚本以永远启动另一个应用程序,瞧,另一个站点。更多的控制。在那之后,我想试试 MongoDB - 很简单 - 安装它。

    在成本方面它们大致相同,但如果您开始使用许多其他软件包(如数据库等)托管多个站点,那么 VM 可以开始变得更便宜。

    Nodejitsu open sourced 他们的工具,如果您自己动手,也更容易。

    如果您自己做,这里有一些链接可能会对您有所帮助:

    保持服务器正常运行:

    https://github.com/nodejitsu/forever/

    http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever

    https://github.com/bryanmacfarlane/svchost

    暴发户和监控 通过监控实现通用自动启动和重启

    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

    http://blog.argteam.com/coding/hardening-node-js-for-production-part-2-using-nginx-to-avoid-node-js-load/

    脚本安装

    https://github.com/bryanmacfarlane/svcinstall

    Exit Shell Script Based on Process Exit Code

    发布网站

    Using git to publish to a website

    【讨论】:

      【解决方案3】:

      恕我直言,设置自己的堆栈的最大缺点是您需要管理诸如使 Node.js 运行forever、将其作为守护进程启动、将其置于 Nginx 等反向代理后面等事情... Node.js 的伟大之处 - 使启动 Web 服务器成为单线 - 是其在生产就绪系统方面的最大缺点之一。

      此外,您还解决了自己管理、更新和保护服务器的所有问题。

      对于主机来说,这要容易得多:通常是git push,仅此而已。缩放?简单。复制?简单。 ...?简单。只需点击几下即可。

      hosters 的缺点是你无法调整环境。好的,您可能可以选择运行哪个版本的 Node.js 和/或 npm,但仅此而已。您无法控制安装的第 3 方软件。您无法控制操作系统。您无法控制服务器的位置。等等……

      当然,有些托管商允许您访问其中的一些内容,但很少有托管商支持所有这些。

      所以,关于 Node.js 的问题基本上与其他技术相同:这是个人主义、定价、可扩展性、可靠性、知识等方面的利弊……

      我个人选择与主持人一起去:我节省的时间和精力轻松胜过缺点。请注意:对我个人而言。

      这个问题需要单独回答。

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 2010-10-08
        • 1970-01-01
        • 2010-09-11
        • 2012-03-08
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        相关资源
        最近更新 更多