【问题标题】:How to run nginx and Node.js with EC2 (linux) server startup如何使用 EC2 (linux) 服务器启动运行 nginx 和 Node.js
【发布时间】:2019-08-15 09:09:59
【问题描述】:

如何在服务器启动时运行 nginx 和 Node.js?

为了使用 AWS Auto Scaling 启动 Amazon EC2,我必须直接连接到 EC2 以运行 nginx 和 Node.js。

Auto Scaling 可以这样做吗?


在 Amazon EC2 中,我想通过 Auto Scaling 在 EC2 启动期间使用 Node.js 运行 nginx。

EC2 设置为使用图像的 Auto Scaling 组。我想运行由 Auto Scaling 启动的 EC2 Node.js 应用程序和 nginx,以及 EC2 服务器启动。

对于 nginx,我可以使用 chkconfig 运行可执行文件,但 Node.js 应用程序将使用 package.json 中编写的代码作为 pm2 运行。

如何在 EC2 启动时运行 nginx 和 Node.js 并让新的 EC2(以 Auto Scaling 启动)正确响应?


评论回复:

我不想使用“node app.js”命令运行 node.js。

我想通过 package.json(脚本)运行 node.js

例如

  "start": "NODE_ENV=production PORT=3000 pm2 start server.js -i -1"

我该怎么做?

您的建议是使用 linux 服务器初始化脚本文件。

但是,我想设置 NODE_ENV、PORT 并使用 pm2 命令。


解决方案

我解决了这个问题。

Linux启动时,我尝试使用脚本文件自动运行node.js。

我创建了脚本文件,并让shell脚本在linux启动后自动运行,但这似乎不是一个好主意。

或者,可以使用pm2启动和生态系统.config.js来灵活解决问题。

感谢您的回复。

【问题讨论】:

标签: node.js linux nginx amazon-ec2 server


【解决方案1】:

这与自动缩放无关。它通常与自动缩放器用于启动您的 EC2 实例的 EC2 AMI(Amazon 系统映像)有关,也可能与您在启动时传递给实例的“用户元数据”有关。只有这两件事会影响 EC2 实例在启动时和启动后的行为,直到它开始与外界通信。

因此,您需要做的是创建一个已设置的 AMI,以便在从该 AMI 启动 EC2 实例时启动正确的事情。您要做的是将要使用的 AMI 作为起点,将该 AMI 启动到实例中,进行所需的必要更改和安装,然后保存新的 AMI。然后更改您的自动扩展组以使用该新 AMI 启动新实例。

您可以交替地在“用户元数据”中发送一个脚本来启动事物,但这很少是您想要做的”。大多数时候,您希望让您的 AMI 做正确的事情。

您也可能正在使用某种启动后配置程序,例如 Chef、Ansible 或 Chef Habitat。如果你是,那就是你设置所有这些东西的地方。您希望该系统完成您所描述的工作。但如果你这样做,我之前所说的仍然适用。为此,您通常还构建了一个自定义 AMI,其中已经内置了部分供应系统,以便该系统可以连接到其中并进行供应。这些系统也可以从通用 AMI 开始。这取决于系统。

【讨论】:

  • 感谢您的回答!正如您所建议的,我正在使用通过 AMI 注册的 EC2 自动缩放。但是,我的问题与创建 AMI 时注册初始设置有关。 EC2 运行时,node.js 能不能让它自动运行?
  • 我认为您想要的是在 EC2 实例上工作,直到它完成您想要的一切,包括正确启动一切。当您可以重新启动您的 EC2 实例并让一切正常运行时,您就得到了您想要的。然后您从中创建一个 AMI,每次缩放器启动一个实例时,它都会做同样的事情。所以理想情况下,没有魔法。它只会重现当您启动您用作原型的一个实例时发生的任何事情。有意义吗?
  • 复杂化的唯一方法是如果您想影响行为,以便从您的 AMI 启动的不同实例执行不同的操作。这就是用户元数据将进入其中的地方。您可以以一种或另一种方式导致元数据对于不同的启动有所不同。您的 AMI 中的内容会以某种方式查看传入的数据并决定如何采取行动。从我自己相当丰富的经验来看,这两个想法确实是全部。当然,从这两件事中,你可以继续做任何事情。
  • 一旦实例启动,并且您已经按照您想要的方式进行设置,一切皆有可能。它可以与外部组件对话以获取配置。它可以监听,外部组件可以连接到它。如果外部世界启动一个标准实例,然后通过 ssh 连接到它并开始设置它,这甚至可以在没有自定义 AMI 的情况下完成。这就是我们的系统实际上所做的。由你决定。但主要的想法是,在实例运行之前,您只需设置 AMI 并附加用户实例元数据。大多数时候,您不使用元数据。
  • 我可以帮助你具体,但我不太了解 Node。但是只需启动一个 EC2 实例并将其配置为启动 Node.js,以便在您重新启动它时它可以正常工作。然后保存一个 AMI,每次您从该 AMI 启动一个实例时,node.js 都会启动,就像原始原型一样。
猜你喜欢
  • 2018-03-29
  • 1970-01-01
  • 2021-09-30
  • 2016-11-14
  • 2015-03-18
  • 2010-11-29
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多