将Node.js Express应用部署到生产环境

13

如果这是一个基础问题,我很抱歉,我还在学习nodejs部署方面的知识。我有一个使用nodejs编写的应用程序,希望将其部署到生产环境。目前为了测试目的,我已经使用了Express。然而,据我所知,Express是一个开发服务器,而不是生产服务器。我该如何将nodejs应用程序部署到生产环境,并且应该使用哪个服务器。此外,我编写了很多与Express相关的代码,例如路由和中间件,当我将其部署到另一个服务器时,这些代码会如何运作?


1
提供更多细节,比如您将要部署的服务器类型是什么?它是基于云的吗?或者查看以下各种部署方式:对于Azure Cloud:https://azure.microsoft.com/zh-cn/documentation/articles/cloud-services-nodejs-develop-deploy-app/对于IIS Windows:http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx对于Linux:https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-14-04 - Thennarasan
它是基于Azure(Web角色)的云。我的主要关注点是,这是否意味着我必须放弃我编写的Express代码并尝试其他东西? - user3547774
如果是Azure,部署非常容易。在发布之前,打开Node.js命令行->进入您的项目文件夹,然后输入“flatten-package”。如果您没有安装它的npm,请先安装它,然后运行它。由于npm模块将具有嵌套模块,并且这是进行WebDeploy时唯一可能出现的问题。访问您的Azure Web应用程序并下载发布配置文件。在项目中-右键单击->发布选择Azure并导入发布设置。现在,您已准备好发布并且它将正常工作。尝试一下,如果遇到任何问题,请发布。 - Thennarasan
2
你从哪里得到的观念,认为Express不能用于生产环境?正如你所指出的,如果你不能在生产环境中使用Express,那么你基本上必须重写整个应用程序,那么使用它的意义何在呢? - Benny B
2
我认为Express是一个简单的开发服务器,不适合用于生产环境,请纠正我如果我错了。另外,在生产环境中部署Node.js应用程序使用哪些标准Web服务器? - user3547774
2个回答

5
当你使用express.js创建应用程序时,所有的express模块都已在package.json中指定,并将安装为npm模块。
你只需要在生产服务器上安装node.js,将代码放在那里,运行“npm install”,然后使用“NODE_ENV = production”参数启动Web服务器。如果您可以使用grunt或gulp处理静态资源(js / css最小化等),以优化生产模式的性能,则会更好。
要了解更多信息,请参阅此处:https://expressjs.com/en/advanced/best-practice-performance.html

3

您可以使用pm2结合ExpressJs在远程服务器上部署。基本上,pm2可以使用集群模式使您的代码在后台任务中永久运行。

基本上,您需要将文件放入远程服务器,并创建一个.json或yaml文件,以便pm2理解将是什么进程。

然后,您应该通过npm install安装库和模块。完成这些步骤后,您需要使用npm i -g pm2在远程服务器上安装pm2。

在完成所有这些步骤后,您可以使用pm2的基本cli命令进行部署。pm2 start process.yml --env=production是部署的基本示例。您可以使用pm2 stop process.yml停止任务。您还可以使用pm2 monit进行系统监控。如果要查看日志,可以运行pm2 logs。如果要重新启动或更新:可以使用pm2 reload allpm2 update

对于远程服务器,您可以使用云来获得最佳性能。您可以查看 AWSAzureGCloudHerokuDigitalOcean 的定价。它们提供免费层级,您可以搜索它们。


感谢您的输入,@cangokceaslan!我已经开发了一个Express后端和一个React前端。现在我像一个球一样跳来跳去,寻找连接React应用程序与后端Express应用程序的方法,并随后“编译”后端以获得最佳性能。据我所知,Express应用程序不会像J2EE应用程序一样手动编译为WAR文件;而是使用诸如pm2之类的编排工具简单地运行。 - Insanovation
好吧,这取决于具体情况,但大部分情况下 Node.js 应用程序不需要编译,因为它可以直接在 node 上运行。你可以使用 BabelJs 来编译或转译代码,但实际上没有必要这么做。其次,你总是需要一个进程管理器来永久运行任务。你可以选择 pm2、docker 或者 forever 进行部署。和 Java 不同,Node.js 可以在终端上基本命令下运行,就像 Python 一样。 - cangokceaslan
感谢@cangokceaslan的贡献,它很有帮助。 :) - Insanovation
很高兴看到这个 :) - cangokceaslan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接