node.js - 在生产环境中运行 NodeJS 服务器
问题描述
我有一个需要部署的 react + node 应用程序。我正在使用 nginx 为我的前端提供服务,但我不确定使用什么来保持我的 nodejs 服务器在生产中运行。
该项目托管在 Windows VM 上。由于许可证问题,我无法使用 pm2。我不知道在生产中使用 nodemon 运行服务器是否好。我从未在生产中部署过应用程序,因此我不知道合适的方法。
解决方案
你也可以使用码头工人。您可以创建多个 docker 容器来运行您的节点服务器。现在在您的主机上的 nginx 级别,您可以进行负载平衡配置,这会将流量平均路由到不同的 docker 节点容器,这将提高您的可用性和可扩展性,在繁忙的流量中,您只需要增加 docker 节点容器的数量在需要的时候。我猜最初 2 个容器足以处理流量(不过取决于您的用例)。
注意:- 您也可以在 docker 容器中使用forever
或supervisor
按照@Rajesh Gupta 的建议来运行节点服务器。我们为此使用 PM2。
如果您有一个数据库,那么您可以为该数据库创建一个单独的 docker 容器并将其映射到您的主机中的一个卷。
你可以从这里了解 docker 。
您还可以从此处阅读有关 nginx 中的负载平衡的信息。
为了进一步提高可用性,您可以在 nginx 和 docker 容器之间添加一个缓存层。Varnish是迄今为止我用过的最好的缓存服务。
PS:- 我们使用类似但更先进的架构来运行我们的电子商务应用程序,该应用程序每天生成 5-10k 个订单。因此,这是一种经过测试的方法,停机时间为 0。
推荐阅读
- python - 当其中一个被触摸时,Kivy Labels 都会一起行动
- c# - 物体传送到另一个位置 - Unity3D
- c# - 在 .cs 文件的常规类中引发 Fluxor Action
- css - 为什么在以下情况下继承属性不起作用?
- java - 在 Windows 10 中访问 SPNEGO 单点登录的纯 Java 方式
- apache-spark - 使用 Spark 进行流式传输时查询数据库是否是一种好习惯
- java - Spring security oauth2 中的错误客户端凭据
- python - 如何存储来自 tkinter 的目录路径,然后在以后使用它?
- python - 我怎样才能使这个类在计数方面具有可比性?
- vue.js - 在 $axios $get url 中传递日期