节点JS托管主机与VPS

时间:2012-09-29 12:54:20

标签: node.js hosting cloud vps

为nodejs out there提供了大量基于托管云的托管服务,这些服务看起来相对较新,有些还处于测试阶段。

托管nodejs应用程序的另一条路径是在像Linode这样的VPS上设置堆栈。

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

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

要明确我不是要求选择提供商,而是要决定是在托管节点上托管特定托管还是在老式自我设置VPS上托管。

3 个答案:

答案 0 :(得分:34)

使用其中一项服务大部分是免费的 - 您编写代码并让他们担心管理框,保持流程,创建发布渠道,修补操作系统等等。

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

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

我做到了。我最近做了VM路径主要是因为我想要学习经验。我必须:

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

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

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

成本方面它们大致相同,但如果你开始托管多个网站,包括许多其他软件包,如数据库等......,那么虚拟机可以开始变得更便宜。

Nodejitsu open sourced他们的工具,如果你自己做的话也会更容易。

如果您自己动手,可以使用以下链接:

保持服务器正常运行:

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

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

答案 1 :(得分:14)

恕我直言,设置自己的堆栈的最大缺点是你需要管理诸如使Node.js运行forever,将其作为守护进程启动,将其置于反向代理(如Nginx)之后,以及等等......关于Node.js的好处 - 让网络服务器成为一个单线程 - 是生产就绪系统的最大缺点之一。

另外,您已经遇到了自己管理,更新和保护服务器的所有问题。

对于托管人来说这更容易:通常它是git push,就是这样。缩放?简单。复制?简单。 ...?简单。只需点击几下即可。

主机的缺点是您无法调整环境。好的,您可以选择运行哪个版本的Node.js和/或npm,但就是这样。您无法控制安装的第三方软件。你无法控制操作系统。您无法控制服务器的位置。等等...

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

因此,基本上关于Node.js的问题与其他技术相同:这是个人主义,定价,可扩展性,可靠性,知识等方面的专业与对比...

我个人选择与主持人一起去:我节省的时间和精力轻松超越劣势。提醒你:对我个人而言。

这个问题需要单独回答。

答案 2 :(得分:2)

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

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

有两种方法可以设置 Node.js Docker 环境。第一个 - 按照发布的说明 here 如何对您的应用程序进行 dockerize 并使用 Docker 部署它,并在需要时与数据库一起部署。该指南给出了开发设置的说明,生产设置将类似。

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

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

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