在生产环境中运行 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 建议的 foreversupervisor 来运行节点服务器。我们为此使用 PM2。

如果您有一个数据库,那么您可以为该数据库创建一个单独的 docker 容器并将其映射到您主机中的一个卷。

你可以通过here了解docker。

您还可以从here 阅读有关 nginx 中的负载平衡的信息。

为了进一步提高可用性,您可以在 nginx 和 docker 容器之间添加一个缓存层。 Varnish 是迄今为止我用过的最好的缓存服务。

PS:- 我们使用类似但更先进的架构来运行我们的电子商务应用程序,该应用程序每天生成 5-10k 个订单。所以这是一种经过测试的方法,停机时间为 0。

【讨论】:

【参考方案3】:

您可以考虑foreversupervisor

查看this 博客文章。

【讨论】:

所以只是为了确保将 nginx 用于前端并永远用于后端,这是一种好的做法和可维护性吗?我的意思是,如果我需要对我的前端和后端进行更改,那是否方便? @AbdulAhad 通过 nginx 为您的 react 应用程序提供服务是一种最佳实践,并且对于 nodejs 来说永远是一个很好的实践。是的,试试吧 - 应该很轻松 @AbdulAhad nodemon 也可以使用,但它主要用于您进行代码更改并期望服务器自动重启的情况。非常适合开发工作。对于生产,人们似乎更喜欢 pm2,永远,主管 我确实看到了这个,因此问题为什么不 nodemon。 好的。这也帮助了我link

以上是关于在生产环境中运行 NodeJS 服务器的主要内容,如果未能解决你的问题,请参考以下文章

生产环境中的 DOCKER 环境

node - 开发环境与生产环境

运行环境判断 开发环境和生产环境

Flask 首次运行:不要在生产环境中使用开发服务器

VueJs生产环境部署

用于生产的 Nodejs 网络服务器