【问题标题】:nodejs express app deploying to productionnodejs express 应用程序部署到生产环境
【发布时间】:2016-12-03 18:06:44
【问题描述】:

很抱歉,如果这是一个基本问题,我仍在思考 nodejs 部署。我有一个在 nodejs 上编写的应用程序,我想将其部署到生产环境。到目前为止,出于测试目的,我使用了 Express。但是据我所知,Express 是开发服务器而不是生产服务器。如何将 nodejs 应用程序部署到生产环境以及我应该使用什么服务器。另外,我有很多为 express 编写的代码,比如路由和中间件,当我部署到另一台服务器时,它是如何工作的?

【问题讨论】:

  • 提供更多详细信息,例如您要部署的服务器类型?它是基于云的吗?或者查看这个对于 Azure 云的各种部署:azure.microsoft.com/en-in/documentation/articles/… 对于 IIS Windows:hanselman.com/blog/… 对于 Linux:digitalocean.com/community/tutorials/…
  • 其基于 Azure 的云(Web 角色)。我主要担心的是,这是否意味着我必须放弃我编写的 Express 代码并尝试其他东西?
  • 不需要。如果它是天蓝色的,它真的很容易部署。在发布之前打开 node.js 命令行 - > 转到您的项目文件夹,然后输入 flatten-package。如果你没有他的 npm 安装它然后运行它。由于 npm 模块将具有嵌套模块,并且这是进行 webdeploy 时会出现的唯一问题。访问您的 azure webapp 并下载发布配置文件。并在项目中 - RightClick -> 发布选择 Azure 并导入发布设置。现在您已准备好发布,它会起作用。如果您遇到任何问题,请尝试并发布。
  • 您从哪里得知 Express 不能用于生产?正如您所指出的,如果您不能将 Express 用于生产,您基本上必须重写您的整个应用程序,那么使用它有什么意义呢?
  • 我以为 Express 是一个简单的开发服务器,不能用于生产,如果我错了,请纠正我。另外,用于将 nodejs 应用程序部署到生产环境的标准 Web 服务器是什么?

标签: node.js express production


【解决方案1】:

当您使用 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

【讨论】:

    【解决方案2】:

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

    基本上您需要将文件放入远程服务器并为 pm2 创建一个 .json 或 yaml 文件以了解该过程。

    然后你应该通过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 等编排工具运行。
    • 这取决于但大多数时候 Node.js 应用程序没有被编译,因为它与 node.js 一起运行。您可以使用 BabelJs 编译或转译您的代码,但没有理由这样做。其次,您总是需要一个流程管理器来永远运行任务。您可以选择 pm2、docker 或 forever 进行部署。与 Java 不同,Node.js 使用 Python 等基本命令在终端上运行。
    • 感谢@cangokceaslan 您的意见,它有帮助。 :)
    • 很高兴看到这个:)
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多