假设我有一个nodejs+express+mongodb web应用程序,现在我想使用运行在linux发行版上的AWS EC2机器(我使用的是ubuntu 14.04,您会使用不同的东西吗?)
让一个体面的生产环境变成一个单层而不是我们通常在开发环境上使用的基本步骤是什么?
您会使用http服务器(nginx,apache,..)吗?您的防火墙配置是什么?在上市之前,您还会考虑什么(nodejs&express配置等)?你会使用什么工具(例如永远)?您还会考虑哪些其他系统配置?
这个问题的重点不是性能,不考虑高水平的机器负载和应用扩展。
发布于 2015-03-18 01:21:45
我在AWS上为几个商业应用程序实现了生产环境,最近一次使用Node/Express/Mongo。通过大量的调查、尝试和错误,以及一些脚本,我已经确定了一个适合我的配置。
下面是我使用的服务/实用程序的摘要。通过设计,所有的东西都是广泛可用的,并且有很好的文档记录,所以您应该不难找到关于如何根据您的特定需求配置每一项需求的讨论。
AWS服务
OS/Utilities
我使用标准apt版本的节点,快递,和npm,没有特殊的配置设置。为了部署应用程序更新,我编写了一个cron脚本来检查github分支,所以发布一个新版本会通过提交到该分支自动触发。
当然还有更多的选择,这绝不是决定性的选择.换句话说,YMMV。然而,在我的经验中,这些都相当容易配置、可靠地工作、保持事情顺利运行,并在出现需要您注意的问题时迅速通知您。
发布于 2015-03-28 15:43:51
我觉得汤姆的回答很棒。除此之外,还有一些事情要考虑。
AWS上的MongoDB
在承载MongoDB实例时,还有一些需要进一步考虑的问题。首先,您可能使用相当标准的EBS卷,但是对于您的生产数据库来说,减少与EBS相关的延迟是非常重要的。Mongodb建议获得EBS优化实例,并将EBS卷与提供的IOPS一起使用。
提供的IOPS卷通常优先于临时存储,因为当您使用临时存储破坏一个实例时,就会丢失该数据。然而,EBS与您的实例是分开的,并且提供了各种其他特性,这些特性可以方便地管理mongodb集群。虽然短暂存储可能更有性能,但是如果删除该实例,您应该意识到丢失数据的可能性。
在为我的客户工作时,我在MongoDB工作了很短时间,我有很好的经验,您绝对应该使用MMS来管理/监视您的mongoDB实例。这是免费的,除非你想要备份,所以没有理由不做。Monit可以监视您的系统,但它不会监视或报告mongoDB集群的运行情况。
过程管理
Upstart是维护节点可用性的一个很好的方法。然而,并不是每个人都擅长编写新的脚本。许多人编写的新贵脚本非常少。正如其他人所建议的那样,PM2是一个很好的过程管理器。PM2将允许在部署时重新加载应用程序,提供零停机部署。但是回到主题,PM2可以将自己作为守护进程启动,并且PM2会坚持您的部署,因此能够为您提供upstart/init.d所提供的好处,您不必担心编写和测试您的upstart脚本。
额外的好处是PM2提供了自己的restart (可选)和用于管理实例的web接口(重新加载、重新启动、停止、加载/mem/cpu等等)。
编辑: PM2只能在集群的情况下才能重新加载。在主机上至少需要2个节点才能使用集群,并且每个节点都需要一个CPU。这可能对你不利,但你仍然可以使用PM2重新启动你的应用程序。
内容分配与静态资产
你可能已经知道最好不要使用节点来服务器静态资产。了。这是典型的Nginx来拯救的地方。Nginx提供了其他好处,就像Tom在他的回答中所指出的(50倍错误,SSL)。值得注意的是,AWS为CloudFront提供了一个内容分发网络。虽然您可能无法将所有静态资产都存储到cloudfront上,但在cloudfront上存储更大和不可压缩的文件(如图像)是值得的,特别是如果您希望拥有大量移动用户的话。这将使您的内容更接近您的最终用户。
参考文献:
发布于 2015-03-24 01:43:18
我最近使用nodejs+express+mongodb创建/安装了一个OpenShift AWS应用程序,它托管在AWS上。它是免费的,我现在只使用两个齿轮(Mongo + web)。没有必要配置任何虚拟防火墙/区域,就像我在AWS EC2上直接将它们拆分出来一样。
到目前为止,似乎还在为我工作,而且比起我之前在AWS控制台上的工作,麻烦要少得多。
https://stackoverflow.com/questions/29098026
复制相似问题