

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Elastic Beanstalk Node.js 平台
<a name="create_deploy_nodejs.container"></a>

本主题介绍如何在 Elastic Beanstalk 上配置、构建和运行 Node.js 应用程序。

AWS Elastic Beanstalk 为不同版本的 Node.js 编程语言支持多个平台分支。有关完整列表，请参阅 *AWS Elastic Beanstalk 平台*文档中的 [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)。

Elastic Beanstalk 提供了[配置选项](command-options.md)，可供您用于自定义在 Elastic Beanstalk 环境中的 EC2 实例上运行的软件。您可[配置应用程序所需的环境变量](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)，启用到 Amazon S3 的日志轮换，并将应用程序源中包含静态文件的文件夹映射至代理服务器所提供的路径。

Elastic Beanstalk 控制台中提供了配置选项，可用于[修改运行环境的配置](environment-configuration-methods-after.md)。要避免在终止环境时丢失环境配置，可以使用[保存的配置](environment-configuration-savedconfig.md)来保存您的设置，并在以后将这些设置应用到其他环境。

要保存源代码中的设置，您可以包含[配置文件](ebextensions.md)。在您每次创建环境或部署应用程序时，会应用配置文件中的设置。您还可在部署期间使用配置文件来安装程序包、运行脚本以及执行其他实例自定义操作。

您可以在源包中[包含一个 `Package.json` 文件](nodejs-platform-dependencies.md#nodejs-platform-packagejson)，以便在部署期间安装软件包、提供 start 命令以及指定您希望应用程序使用的 Node.js 版本。您可以包含一个 [`npm-shrinkwrap.json` 文件](nodejs-platform-shrinkwrap.md)来锁定依赖项版本。

Node.js 平台包含一个代理服务器，以服务静态资产、将流量转发到应用程序和压缩响应。您可以[扩展或覆盖默认代理配置](nodejs-platform-proxy.md)，以适应高级方案。

可提供多个选项供您启动应用程序。您可以将 [Procfile](nodejs-configuration-procfile.md) 添加到源包来指定用于启动应用程序的命令。如果您不提供 `Procfile`，但提供 `package.json` 文件，则 Elastic Beanstalk 将运行 `npm start`。如果您未提供上述任一项，则 Elastic Beanstalk 会按此顺序查找 `app.js` 或 `server.js` 文件并运行该脚本。

在 Elastic Beanstalk 控制台中应用的设置会覆盖配置文件中的相同设置（如果存在）。这让您可以在配置文件中包含默认设置，并使用控制台中的特定环境设置加以覆盖。有关优先顺序和其他设置更改方法的更多信息，请参阅[配置选项](command-options.md)。

有关扩展 Elastic Beanstalk 基于 Linux 的平台的各种方法的详细信息，请参阅 [扩展 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

## 配置您的 Node.js 环境
<a name="nodejs-platform-console"></a>

您可以使用 Node.js 平台设置来微调 Amazon EC2 实例的行为。您可以使用 Elastic Beanstalk 控制台编辑 Elastic Beanstalk 环境的 Amazon EC2 实例配置。

使用 Elastic Beanstalk 控制台启用到 Amazon S3 的日志轮换，并配置应用程序可从环境中读取的变量。

**在 Elastic Beanstalk 控制台中配置 Node.js 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

### 容器选项
<a name="nodejs-platform-console-settings"></a>

您可以指定以下特定于平台的选项：
+ **Proxy server**（代理服务器）– 要在环境实例上使用的代理服务器。默认使用 NGINX。

### 日志选项
<a name="nodejs-platform-console-logging"></a>

**日志选项**部分有两个设置：
+ **Instance profile**（实例配置文件）– 指定有权访问与应用程序关联的 Amazon S3 存储桶的实例配置文件。
+ **Enable log file rotation to Amazon S3**（启用到 Amazon S3 的日志轮换）– 指定是否将应用程序的 Amazon EC2 实例的日志文件复制到与应用程序关联的 Amazon S3 存储桶。

### 静态文件
<a name="nodejs-platform-console-staticfiles"></a>

为了提高性能，您可以使用 **Static files**（静态文件）部分配置代理服务器，以便从 Web 应用程序内的一组目录提供静态文件（例如 HTML 或图像）。对于每个目录，您都将虚拟路径设置为目录映射。当代理服务器收到对指定路径下的某个文件的请求时，它将直接提供此文件，而不是将请求路由至您的应用程序。

有关使用配置文件或 Elastic Beanstalk 控制台配置静态文件的详细信息，请参阅 [提供静态文件](environment-cfg-staticfiles.md)。

### 环境属性
<a name="nodejs-platform-console-envprops"></a>

使用 **Environment Properties**（环境属性）部分，在运行应用程序的 Amazon EC2 实例上指定环境配置设置。这些设置会以密钥值对的方式传递到应用程序。

在运行的Node.js环境中 AWS Elastic Beanstalk，您可以通过运行来访问环境变量`process.env.ENV_VARIABLE`。

```
var endpoint = process.env.API_ENDPOINT
```

Node.js 平台会将 PORT 环境变量设置为代理服务器将流量传输到的端口。有关更多信息，请参阅 [配置代理服务器](nodejs-platform-proxy.md)。

请参阅[环境变量和其他软件设置](environments-cfg-softwaresettings.md)了解更多信息。

### 配置 Amazon Linux AMI（在 Amazon Linux 2 之前）Node.js 环境
<a name="nodejs-platform-console.alami"></a>

仅在使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前）的 Elastic Beanstalk Node.js 环境中支持以下控制台软件配置类别。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

#### 容器选项 — 亚马逊 Linux AMI (AL1)
<a name="nodejs-platform-console-settings"></a>

在配置页面上，指定以下内容：
+ **Proxy server**（代理服务器）– 指定要用来代理与 Node.js 连接的 Web 服务器。默认使用 NGINX。如果选择 **none**，则静态文件映射不会生效，并且 GZIP 压缩会被禁用。
+ **Node.js 版本** – 指定 Node.js 的版本。有关受支持的 Node.js 版本的列表，请参阅《AWS Elastic Beanstalk 平台》**指南中的 [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)。
+ **GZIP compression**（Gzip 压缩）– 指定是否启用 GZIP 压缩。默认情况下已启用 GZIP 压缩。
+ **Node command**（节点命令）– 供您输入用于启动 Node.js 应用程序的命令。空字符串（默认值）表示 Elastic Beanstalk 将依次使用 `app.js`、`server.js` 和 `npm start`。

## Node.js 配置命名空间
<a name="nodejs-namespaces"></a>

您可以使用[配置文件](ebextensions.md)设置配置选项并在部署期间执行其他实例配置。配置选项可以[特定于平台](command-options-specific.md)，也可以应用于整个 Elastic Beanstalk 服务中的[所有平台](command-options-general.md)。配置选项被组织到*命名空间*中。

您可以使用 `aws:elasticbeanstalk:environment:proxy` 命名空间选择要在环境的实例上使用的代理。以下示例将您的环境配置为使用 Apache HTTPD 代理服务器。

**Example .ebextensions/nodejs-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
```

您可以使用 `aws:elasticbeanstalk:environment:proxy:staticfiles` 命名空间将代理配置为提供静态文件。有关更多信息以及示例，请参阅 [提供静态文件](environment-cfg-staticfiles.md)。

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外，您还可使用控制台、保存的配置、EB CLI 或 AWS CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。

## Amazon Linux AMI（在 Amazon Linux 2 之前）Node.js 平台
<a name="nodejs.alami"></a>

如果您的 Elastic Beanstalk Node.js 环境使用 Amazon Linux AMI 平台版本（在 Amazon Linux 2 之前），请考虑本节中的特定配置和建议。

**注意**  
本主题中的信息仅适用于基于亚马逊 Linux AMI (AL1) 的平台分支。 AL2023/AL2 平台分支与之前的 Amazon Linux AMI (AL1) 平台版本不兼容，*需要不同的配置设置*。
 [2022 年 7 月 18 日，](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html)**Elastic Beanstalk 将所有基于亚马逊 Linux AMI AL1 () 的平台分支的状态设置为停用。**有关迁移到当前且完全受支持的 Amazon Linux 2023 平台分支的更多信息，请参阅 [将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2023 或 Amazon Linux 2](using-features.migration-al.md)。

### Node.js特定于平台的配置选项 — 亚马逊 Linux AMI () AL1
<a name="nodejs.alami.options"></a>

Elastic Beanstalk 支持用于 Amazon Linux AMI Node.js 平台版本的一些特定于平台的配置选项。可以选择先于应用程序运行的代理服务器，选择要运行的特定版本的 Node.js，并选择用于运行应用程序的命令。

对于代理服务器，您可以使用 NGINX 或 Apache 代理服务器。您可以将 `none` 值设置为 `ProxyServer` 选项。在这种设置下，Elastic Beanstalk 将您的应用程序作为独立项运行，而不是在任何代理服务器后面运行。如果您的环境运行独立应用程序，请更新您的代码以侦听 NGINX 将流量转发到的端口。

```
var port = process.env.PORT || 8080;

app.listen(port, function() {
  console.log('Server running at http://127.0.0.1:%s', port);
});
```

### Node.js语言版本 — 亚马逊 Linux AMI (AL1)
<a name="nodejs.alami.versions"></a>

在支持的语言版本方面，Node.js Amazon Linux AMI 平台与其他 Elastic Beanstalk 托管平台略有不同。这是因为每个 Node.js 平台版本均仅支持几个 Node.js 语言版本。有关受支持的 Node.js 版本的列表，请参阅《AWS Elastic Beanstalk 平台》**指南中的 [https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs)。

您可以使用特定于平台的配置选项来设置语言版本。有关说明，请参阅[配置您的 Node.js 环境](#nodejs-platform-console)。或者，使用 Elastic Beanstalk 控制台在更新平台版本的过程中，更新您的环境使用的 Node.js 版本。

**注意**  
如果对您正在使用的 Node.js 版本的支持已从平台中移除，则您必须先更改或移除版本设置再进行[平台更新](using-features.platform.upgrade.md)。当在一个或多个 Node.js 版本中识别到安全漏洞时，可能会发生这种情况。  
发生这种情况时，尝试更新到不支持配置的平台的新版本会[NodeVersion](command-options-specific.md#command-options-nodejs)失败。为避免需要创建新环境，请将*NodeVersion*配置选项更改为旧平台版本和新平台版本都支持的 Node.js 版本，或者[删除该选项设置](environment-configuration-methods-after.md)，然后执行平台更新。

**在 Elastic Beanstalk 控制台中配置环境的 Node.js 版本**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在环境概述页面上的 **Platform**（平台）下，选择 **Change**（更改）。

1. 在 **Update platform version**（更新平台版本）对话框中，选择 Node.js 版本。  
![\[Elastic Beanstalk 更新平台版本确认\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. 选择**保存**。

### Node.js配置命名空间 — 亚马逊 Linux AMI () AL1
<a name="nodejs.alami.namespaces"></a>

Node.js Amazon Linux AMI 平台在 `aws:elasticbeanstalk:container:nodejs:staticfiles` 和 `aws:elasticbeanstalk:container:nodejs` 命名空间中定义附加选项。

以下配置文件将指示 Elastic Beanstalk 使用 `npm start` 运行应用程序。它也将代理类型设置为 Apache 并启用压缩。最后，它将代理配置为从两个源目录提供静态文件。一个源是来自 `statichtml` 源目录的网站根目录下的 `html` 路径的 HTML  文件。另一个源是来自 `staticimages` 源目录的网站根目录下的 `images` 路径的 HTML 文件。

**Example .ebextensions/node-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:container:nodejs: 
    NodeCommand: "npm start"
    ProxyServer: apache
    GzipCompression: true
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    /html: statichtml
    /images: staticimages
```

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外，您还可使用控制台、保存的配置、EB CLI 或 AWS CLI来配置选项。请参阅[配置选项](command-options.md)了解更多信息。