在生产环境中运行 NodeJS 服务器
Posted
技术标签:
【中文标题】在生产环境中运行 NodeJS 服务器【英文标题】:Running NodeJS server in production 【发布时间】:2019-11-10 04:53:20 【问题描述】:我有一个需要部署的 react + node 应用程序。我正在使用 nginx 为我的前端提供服务,但我不确定使用什么来保持我的 nodejs 服务器在生产中运行。
该项目托管在 Windows VM 上。由于许可证问题,我无法使用 pm2。我不知道在生产中使用 nodemon 运行服务器是否好。我从未在生产环境中部署过应用,因此我不知道合适的方法。
【问题讨论】:
【参考方案1】:尝试 dockerize 整个应用程序,包括数据库、缓存服务器(如果有)等。 以下是一些示例:
您可以在任何 支持 Docker 的计算机;您不必安装库, 依赖项、下载包、配置文件混乱等。
应用程序的工作环境保持一致 整个工作流程。这意味着应用程序的运行方式完全相同 开发人员、测试人员和客户,无论是在开发、登台还是 生产服务器。简而言之,Docker 是针对 软件开发中的古老反应:“奇怪,它适用于 我!”
每个应用程序都需要特定的工作环境:预安装的应用程序、依赖项、数据库以及特定版本中的所有内容。 Docker 容器允许您创建这样的环境。然而,与 VM 不同的是,容器并不包含整个操作系统——仅包含应用程序、依赖项和配置。这使得 Docker 容器比常规 VM 更轻、更快。
【讨论】:
【参考方案2】:你也可以使用 docker。您可以创建多个 docker 容器来运行您的节点服务器。现在在您的主机上的 nginx 级别,您可以进行负载平衡配置,这会将流量平均路由到不同的 docker 节点容器,这将提高您的可用性和可扩展性,在繁忙的流量中,您只需要增加 docker 节点容器的数量在需要的时候。我猜最初 2 个容器足以处理流量(不过取决于您的用例)。
注意:- 您也可以在 docker 容器中使用 @Rajesh Gupta 建议的 forever
或 supervisor
来运行节点服务器。我们为此使用 PM2。
如果您有一个数据库,那么您可以为该数据库创建一个单独的 docker 容器并将其映射到您主机中的一个卷。
你可以通过here了解docker。
您还可以从here 阅读有关 nginx 中的负载平衡的信息。
为了进一步提高可用性,您可以在 nginx 和 docker 容器之间添加一个缓存层。 Varnish 是迄今为止我用过的最好的缓存服务。
PS:- 我们使用类似但更先进的架构来运行我们的电子商务应用程序,该应用程序每天生成 5-10k 个订单。所以这是一种经过测试的方法,停机时间为 0。
【讨论】:
【参考方案3】:您可以考虑forever
或supervisor
。
查看this 博客文章。
【讨论】:
所以只是为了确保将 nginx 用于前端并永远用于后端,这是一种好的做法和可维护性吗?我的意思是,如果我需要对我的前端和后端进行更改,那是否方便? @AbdulAhad 通过 nginx 为您的 react 应用程序提供服务是一种最佳实践,并且对于 nodejs 来说永远是一个很好的实践。是的,试试吧 - 应该很轻松 @AbdulAhad nodemon 也可以使用,但它主要用于您进行代码更改并期望服务器自动重启的情况。非常适合开发工作。对于生产,人们似乎更喜欢 pm2,永远,主管 我确实看到了这个,因此问题为什么不 nodemon。 好的。这也帮助了我link以上是关于在生产环境中运行 NodeJS 服务器的主要内容,如果未能解决你的问题,请参考以下文章