

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar a plataforma Node.js do Elastic Beanstalk
<a name="create_deploy_nodejs.container"></a>

Este tópico descreve como configurar, criar e executar suas aplicações Node.js no Elastic Beanstalk.

AWS Elastic Beanstalk suporta várias ramificações de plataforma para diferentes versões da linguagem de programação Node.js. Consulte [Node.js](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs) no documento *Plataformas do AWS Elastic Beanstalk * para uma lista completa.

O Elastic Beanstalk fornece [opções de configuração](command-options.md) que podem ser usadas para personalizar o software que é executado nas instâncias do EC2 no ambiente Elastic Beanstalk. É possível [configurar as variáveis de ambiente](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console) necessárias à aplicação, habilitar a alternância de logs para o Amazon S3 e mapear pastas da origem da aplicação que contenham arquivos estáticos para caminhos atendidos pelo servidor de proxy.

As opções de configuração estão disponíveis no console do Elastic Beanstalk para [modificar a configuração de um ambiente em execução](environment-configuration-methods-after.md). Para evitar a perda da configuração do ambiente quando você terminá-la, você pode usar [configurações salvas](environment-configuration-savedconfig.md) para salvar as configurações e depois aplicá-las a outro ambiente.

Para salvar as configurações no código-fonte, você pode incluir [arquivos de configuração](ebextensions.md). As definições em arquivos de configuração são aplicadas sempre que você cria um ambiente ou implementa a aplicação. Você também pode usar arquivos de configuração para instalar pacotes, executar scripts e realizar outras operações de personalização da instância em implantações.

É possível [incluir um arquivo `Package.json`](nodejs-platform-dependencies.md#nodejs-platform-packagejson) no pacote de fontes para instalar pacotes durante a implantação, fornecer um comando iniciar e especificar a versão do Node.js que você deseja que a aplicação use. Você pode incluir um [arquivo `npm-shrinkwrap.json`](nodejs-platform-shrinkwrap.md) para bloquear versões de dependência.

A plataforma Node.js inclui um servidor proxy para servir ativos estáticos, encaminhar tráfego para a aplicação e compactar respostas. Você pode [estender ou substituir a configuração de proxy padrão](nodejs-platform-proxy.md) para cenários avançados.

Existem várias opções para iniciar seu aplicativo. Você pode adicionar um [Procfile](nodejs-configuration-procfile.md) ao pacote de fontes para especificar o comando que inicia a aplicação. Quando você não fornece um `Procfile`, mas fornece um arquivo `package.json`, o Elastic Beanstalk executa `npm start`. Se você não fornecer nenhum dos dois, o Elastic Beanstalk procurará o arquivo `app.js` ou `server.js`, nessa ordem, e o executará.

As configurações aplicadas no console do Elastic Beanstalk substituem as mesmas configurações em arquivos de configuração, caso elas existam. Isso permite que você tenha configurações padrão em arquivos de configuração e as substitua por configurações específicas de ambiente no console. Para obter mais informações sobre precedência e outros métodos de alteração das configurações, consulte [Opções de configuração](command-options.md).

Para obter detalhes sobre as várias maneiras de estender uma plataforma do Elastic Beanstalk baseada em Linux, consulte [Estender as plataformas Linux do Elastic Beanstalk](platforms-linux-extend.md).

## Configurar o ambiente Node.js
<a name="nodejs-platform-console"></a>

Você pode usar as configurações da plataforma Node.js para aprimorar ainda mais o comportamento das instâncias do Amazon EC2. É possível editar a configuração da instância do Amazon EC2 do ambiente do Elastic Beanstalk usando o console do Elastic Beanstalk.

Você pode usar o console do Elastic Beanstalk para habilitar a alternância de logs para o Amazon S3 e configurar variáveis que sua aplicação pode ler no ambiente.

**Para configurar o ambiente Node.js no console do Elastic Beanstalk**

1. Abra o console do [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk e, **na** lista Regiões, selecione sua. Região da AWS

1. No painel de navegação, selecione **Ambientes** e selecione o nome do ambiente na lista.

1. No painel de navegação, escolha **Configuration (Configuração)**.

1. Na categoria de configuração **Updates, monitoring, and logging (Atualizações, monitoramento e logs)**, escolha **Edit (Editar)**.

### Opções de contêiner
<a name="nodejs-platform-console-settings"></a>

É possível definir estas opções específicas da plataforma:
+ **Proxy server (Servidor de proxy)**: o servidor de proxy a ser usado nas instâncias de ambiente. Por padrão, o NGINX é usado.

### Opções de log
<a name="nodejs-platform-console-logging"></a>

A seção **Log Options (Opções de log)** tem duas configurações:
+ **Instance profile (Perfil da instância)**: especifica o perfil da instância que tem permissão para acessar o bucket do Amazon S3 associado à sua aplicação.
+ **Enable log file rotation to Amazon S3** (Habilitar a rotação de arquivos de log para o Amazon S3): especifica se os arquivos de log das instâncias do Amazon EC2 da aplicação serão copiados para o bucket do Amazon S3 associado a ela.

### Arquivos estáticos
<a name="nodejs-platform-console-staticfiles"></a>

Para melhorar a performance, você pode usar a seção **Static files** (Arquivos estáticos) para configurar o servidor proxy para servir arquivos estáticos (por exemplo, HTML ou imagens) de um conjunto de diretórios dentro da aplicação Web. Defina, para cada diretório, o caminho virtual para mapeamento de diretórios. Quando o servidor de proxy recebe uma solicitação para um arquivo no caminho especificado, ele atende o arquivo diretamente em vez de rotear solicitação para seu aplicativo.

Para ver detalhes sobre como configurar arquivos estáticos usando arquivos de configuração ou o console do Elastic Beanstalk, consulte [Fornecer arquivos estáticos](environment-cfg-staticfiles.md).

### Propriedades de ambiente
<a name="nodejs-platform-console-envprops"></a>

Use a seção **Propriedades do Ambiente** para especificar definições de configuração de ambientes nas instâncias do Amazon EC2 que estão executando sua aplicação. Essas definições são passadas para o aplicativo como pares de chave-valor.

Dentro do Node.js ambiente em que é executado AWS Elastic Beanstalk, você pode acessar as variáveis de ambiente executando`process.env.ENV_VARIABLE`.

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

A plataforma Node.js define a variável de ambiente PORT como a porta para a qual o servidor proxy direciona o tráfego. Para obter mais informações, consulte [Configurar o servidor de proxy](nodejs-platform-proxy.md).

Consulte [Variáveis de ambiente e outras configurações de software](environments-cfg-softwaresettings.md) para obter mais informações.

### Configurar um ambiente Node.js do Amazon Linux AMI (anterior ao Amazon Linux 2)
<a name="nodejs-platform-console.alami"></a>

As categorias a seguir de configuração de software do console só são compatíveis com um ambiente Node.js do Elastic Beanstalk que use uma versão da plataforma Amazon Linux AMI (anterior ao Amazon Linux 2).

**Observações**  
As informações neste tópico se aplicam somente às ramificações da plataforma baseadas no Amazon Linux AMI (AL1). AL2023/as ramificações da AL2 plataforma são incompatíveis com as versões anteriores da plataforma Amazon Linux AMI (AL1) e *exigem configurações diferentes*.
 [Em 18 de julho de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **o Elastic Beanstalk definiu o status de todas as ramificações da plataforma baseadas no Amazon Linux AMI AL1 () como descontinuadas.** Para obter mais informações sobre como migrar para uma ramificação da plataforma Amazon Linux 2023 atual e totalmente compatível, consulte [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

#### Opções de contêiner — Amazon Linux AMI (AL1)
<a name="nodejs-platform-console-settings"></a>

Na página de configuração, especifique o seguinte:
+ **Proxy server** (Servidor proxy): especifica o servidor Web a ser usado para conexões do proxy com o Node.js. Por padrão, o NGINX é usado. Se você selecionar **none** (nenhum), os mapeamentos de arquivos não terão efeito e a compactação GZIP será desabilitada.
+ **Node.js version** (Versão do ): especifica a versão do Node.js. Para obter uma lista das versões compatíveis do Node.js, consulte [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), no guia *Plataformas AWS Elastic Beanstalk *.
+ **GZIP compression** (Compactação ): especifica se a compactação GZIP está habilitada. Por padrão, a compactação GZIP está habilitada.
+ **Node command** (Comando de nó): permite inserir o comando usado para iniciar a aplicação Node.js. Uma string vazia (o padrão) significa que o Elastic Beanstalk usa `app.js`, em seguida `server.js` e depois `npm start`.

## Namespace de configuração do Node.js
<a name="nodejs-namespaces"></a>

Você pode usar um [arquivo de configuração](ebextensions.md) para definir opções de configuração e executar outras tarefas de configuração de instância durante implantações. Opções de configuração podem ser [específicas da plataforma](command-options-specific.md) ou aplicáveis a [todas as plataformas](command-options-general.md) no serviço Elastic Beanstalk como um todo. As opções de configuração são organizadas em *namespaces*.

É possível escolher o proxy a ser usado nas instâncias do seu ambiente usando o namespace `aws:elasticbeanstalk:environment:proxy`. O exemplo a seguir configura o ambiente para usar o servidor proxy Apache HTTPD.

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

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

É possível configurar o proxy para servir arquivos estáticos usando o namespace `aws:elasticbeanstalk:environment:proxy:staticfiles`. Para obter mais informações e um exemplo, consulte [Fornecer arquivos estáticos](environment-cfg-staticfiles.md).

O Elastic Beanstalk oferece muitas opções de configuração para personalizar o ambiente. Além de arquivos de configuração, você também pode definir opções de configuração usando o console, configurações salvas, a EB CLI ou a AWS CLI. Consulte [Opções de configuração](command-options.md) para obter mais informações.

## A plataforma Node.js do Amazon Linux AMI (anterior ao Amazon Linux 2)
<a name="nodejs.alami"></a>

Se o ambiente Node.js do Elastic Beanstalk usar uma versão da plataforma Amazon Linux AMI (anterior ao Amazon Linux 2), considere as configurações e recomendações específicas nesta seção.

**Observações**  
As informações neste tópico se aplicam somente às ramificações da plataforma baseadas no Amazon Linux AMI (AL1). AL2023/as ramificações da AL2 plataforma são incompatíveis com as versões anteriores da plataforma Amazon Linux AMI (AL1) e *exigem configurações diferentes*.
 [Em 18 de julho de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **o Elastic Beanstalk definiu o status de todas as ramificações da plataforma baseadas no Amazon Linux AMI AL1 () como descontinuadas.** Para obter mais informações sobre como migrar para uma ramificação da plataforma Amazon Linux 2023 atual e totalmente compatível, consulte [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

### Node.jsopções de configuração específicas da plataforma — Amazon Linux AMI () AL1
<a name="nodejs.alami.options"></a>

O Elastic Beanstalk é compatível com algumas opções de configurações específicas da plataforma para versões da plataforma Node.js do Amazon Linux AMI. Você pode escolher o servidor proxy para ser executado na frente da aplicação, uma versão específica do Node.js para ser executada e o comando usado para executar a aplicação.

Como servidor proxy, você pode usar um servidor proxy NGINX ou Apache. Você pode definir o valor `none` para a opção `ProxyServer`. Nesse caso, o Elastic Beanstalk executa a aplicação como autônoma, não por atrás de algum servidor de proxy. Se o ambiente executar uma aplicação autônoma, atualize o código para escutar a porta para a qual o NGINX direciona o tráfego.

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

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

### Node.jsversões de idioma — Amazon Linux AMI (AL1)
<a name="nodejs.alami.versions"></a>

Em termos de versão de linguagem compatível, a plataforma Node.js do Amazon Linux AMI é diferente de outras plataformas gerenciadas pelo Elastic Beanstalk. Isso porque cada versão da plataforma Node.js só é compatível com algumas versões da linguagem Node.js. Para obter uma lista das versões compatíveis do Node.js, consulte [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), no guia *Plataformas AWS Elastic Beanstalk *.

Você pode usar uma opção de configuração específica da plataforma para definir a versão da linguagem. Para instruções, consulte [Configurar o ambiente Node.js](#nodejs-platform-console). Ou então, use o console do Elastic Beanstalk para atualizar a versão do Node.js que o ambiente usa, como parte da atualização da versão da plataforma.

**nota**  
Quando o suporte oferecido para a versão do Node.js que você estiver usando for removido da plataforma, será necessário alterar ou remover a configuração da versão antes de fazer a [atualização da plataforma](using-features.platform.upgrade.md). Isso pode ocorrer quando uma vulnerabilidade de segurança é identificada para uma ou mais versões do Node.js.  
Quando isso acontece, a tentativa de atualizar para uma nova versão da plataforma que não suporta a configuração [NodeVersion](command-options-specific.md#command-options-nodejs)falha. Para evitar a necessidade de criar um novo ambiente, altere a opção de *NodeVersion*configuração para uma versão do Node.js compatível com a versão antiga e a nova da plataforma, ou [remova a configuração da opção](environment-configuration-methods-after.md) e execute a atualização da plataforma.

**Para configurar a versão do Node.js do ambiente no console do Elastic Beanstalk**

1. Abra o console do [Elastic](https://console.aws.amazon.com/elasticbeanstalk) Beanstalk e, **na** lista Regiões, selecione sua. Região da AWS

1. No painel de navegação, selecione **Ambientes** e selecione o nome do ambiente na lista.

1. Na página de visão geral do ambiente, em **Platform (Plataforma)**, escolha **Change (Alterar)**.

1. Na caixa de diálogo **Update platform version** (Atualizar versão da plataforma), selecione uma versão do Node.js.  
![\[Confirmação da versão da plataforma de atualização do Elastic Beanstalk\]](http://docs.aws.amazon.com/pt_br/elasticbeanstalk/latest/dg/images/platform-nodejs-update-node-version.png)

1. Escolha **Salvar**.

### Node.jsnamespaces de configuração — Amazon Linux AMI () AL1
<a name="nodejs.alami.namespaces"></a>

A plataforma Node.js do Amazon Linux AMI define opções adicionais nos namespaces `aws:elasticbeanstalk:container:nodejs:staticfiles` e `aws:elasticbeanstalk:container:nodejs`.

O arquivo de configuração a seguir diz ao Elastic Beanstalk para usar `npm start` para executar a aplicação. Ele também define o tipo de proxy como Apache e permite compactação. Por fim, ele configura o proxy para servir arquivos estáticos de dois diretórios de origem. Uma origem são os arquivos HTML  no caminho `html` na raiz do site a partir do diretório de origem `statichtml`. A outra fonte são arquivos de imagem no `images` caminho sob a raiz do site a partir do diretório de origem `staticimages`.

**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
```

O Elastic Beanstalk oferece muitas opções de configuração para personalizar o ambiente. Além de arquivos de configuração, você também pode definir opções de configuração usando o console, configurações salvas, a EB CLI ou a AWS CLI. Consulte [Opções de configuração](command-options.md) para obter mais informações.

# Configurar comandos de inicialização personalizados com um Procfile no Elastic Beanstalk
<a name="nodejs-configuration-procfile"></a>

Você pode incluir um arquivo denominado `Procfile` na raiz do pacote de fontes para especificar o comando que inicia a aplicação.

**Example Procfile**  

```
web: node index.js
```

Para obter informações sobre o uso de `Procfile`, consulte[Buildfile e Procfile](platforms-linux-extend.build-proc.md).

**nota**  
Esse recurso substitui a opção `NodeCommand` herdada no namespace `aws:elasticbeanstalk:container:nodejs`.

# Configurar dependências da sua aplicação no Elastic Beanstalk
<a name="nodejs-platform-dependencies"></a>

A aplicação pode ter dependências em alguns módulos Node.js, como os que você especifica nas instruções `require()`. Esses módulos são armazenados em um diretório `node_modules`. Quando a aplicação é executada, o Node.js carrega os módulos desse diretório. Para obter mais informações, consulte [Loading from node\$1modules folders](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders) (Carregar das pastas node\$1modules) na documentação do Node.js.

Você pode especificar essas dependências usando um arquivo `package.json`. Se o Elastic Beanstalk detectar esse arquivo e não houver um diretório `node_modules` presente, o Elastic Beanstalk executa `npm install` como usuário de *aplicativo da web*. O comando `npm install` instala as dependências no diretório `node_modules`, que o Elastic Beanstalk cria de antemão. O comando `npm install` acessa os pacotes listados no arquivo `package.json` do registro npm público ou outros locais. Para obter mais informações, consulte o site [npm Docs](https://docs.npmjs.com/about-the-public-npm-registry). 

Se o Elastic Beanstalk detectar o diretório `node_modules`, não executa o `npm install`, mesmo que exista um arquivo `package.json`. O Elastic Beanstalk pressupõe que os pacotes de dependências estejam disponíveis no diretório `node_modules` para o Node.js acessar e carregar.

As seções a seguir fornecem mais informações sobre como estabelecer as dependências do módulo Node.js para a aplicação.

**nota**  
Se você tiver algum problema de implantação quando o Elastic Beanstalk estiver executando o `npm install`, considere a adoção de uma abordagem alternativa. Inclua o diretório `node_modules` com os módulos de dependências no pacote de fontes da aplicação. Dessa forma você contorna os problemas de instalação das dependências do registro npm público enquanto você investiga o problema. Como a origem dos módulos de dependências é um diretório local, fazer isso também pode ajudar a reduzir o tempo de implantação. Para obter mais informações, consulte [Incluir dependências do Node.js em um diretório node\$1modules](#nodejs-platform-nodemodules).

## Especificar as dependências do Node.js com um arquivo package.json
<a name="nodejs-platform-packagejson"></a>

Use um arquivo `package.json` na raiz do código-fonte do projeto para especificar pacotes de dependência e para fornecer um comando para iniciar. Quando existe um arquivo `package.json` presente e não existe um diretório `node_modules` na raiz da origem do projeto, o Elastic Beanstalk executa `npm install` como usuário do *aplicativo da web* para instalar dependências do registro npm público. O Elastic Beanstalk também usa o comando `start` para iniciar a aplicação. Para obter mais informações sobre o arquivo `package.json`, consulte [Specifying dependencies in a `package.json` file](https://docs.npmjs.com/specifying-dependencies-and-devdependencies-in-a-package-json-file) (Especificar dependências em um arquivo ) no site *npm Docs*. 

Use a palavra-chave `scripts` para fornecer um comando para iniciar. Atualmente, a palavra-chave `scripts` é usada em vez da opção herdada `NodeCommand` no namespace `aws:elasticbeanstalk:container:nodejs`.

**Example package.json: Express**  

```
{
    "name": "my-app",
    "version": "0.0.1",
    "private": true,
    "dependencies": {
      "ejs": "latest",
      "aws-sdk": "latest",
      "express": "latest",
      "body-parser": "latest"
    },
    "scripts": {
      "start": "node app.js"
    }
  }
```

**Modo de produção e dependências de desenvolvimento**  
Para especificar suas dependências no arquivo `package.json`, use os atributos *dependências* e *devDependencies*. O atributo *dependências* designa os pacotes exigidos pelo seu aplicativo em produção. O atributo *devDependencies* designa pacotes que são necessários apenas para desenvolvimento e testes locais.

Se você precisar instalar os pacotes *devDependencies*, defina a propriedade de ambiente NPM\$1USE\$1PRODUCTION como`false`. Com esta configuração, não usaremos as opções acima ao executar o npm install. Isso resultará na instalação dos pacotes *devDependencies*.

## Incluir dependências do Node.js em um diretório node\$1modules
<a name="nodejs-platform-nodemodules"></a>

Para implantar pacotes de dependência em instâncias de ambiente juntamente com o código da aplicação, inclua-os em um diretório chamado `node_modules` na raiz da fonte de seu projeto. Para obter mais informações, consulte [Downloading and installing packages locally](https://docs.npmjs.com/downloading-and-installing-packages-locally) (Baixar e instalar pacotes localmente) no site *npm Docs*. 

[Quando você implanta um `node_modules` diretório em uma versão da AL2 Node.js plataforma AL2023/, o Elastic Beanstalk presume que você está fornecendo seus próprios pacotes de dependências e evita instalar dependências especificadas em um arquivo package.json.](#nodejs-platform-packagejson) Node.jsprocura dependências no `node_modules` diretório. Para obter mais informações, consulte [Loading from node\$1modules Folders](https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders) (Carregar das pastas node\$1modules) na documentação do Node.js.

**nota**  
Se você tiver algum problema de implantação enquanto o Elastic Beanstalk estiver executando `npm install`, considere a abordagem descrita neste tópico como uma solução alternativa enquanto investiga o problema.   
 

### Considerações sobre o Node.js no Amazon Linux 2
<a name="nodejs-al2-considerations"></a>

Leia esta seção se você estiver usando uma ramificação da plataforma *Node.js* em execução no *Amazon Linux 2*.

#### Considerações sobre o Node.js no Amazon Linux 2
<a name="nodejs-al2-considerations-detail"></a>

**nota**  
As informações neste tópico se aplicam às ramificações Node.js da plataforma executadas no Amazon Linux 2. O conteúdo aqui descreve características e comportamentos AL2 específicos que diferem de AL2023.

**Variações de comando**  
As opções de comando variam de acordo com a versão do npm incluída na ramificação da plataforma Amazon Linux 2 na qual seu aplicativo é executado.
+ npm v6 — O Elastic Beanstalk instala dependências no modo de produção por padrão. Ele usa o comando `npm install --production`. 
+ npm v7 ou superior — O Elastic Beanstalk omite as *devDependencies*. Ele usa o comando `npm install --omit=dev`.

Ambos os comandos listados acima não instalam os pacotes que são *devDependencies*. 

**Protocolos SSH e HTTPS para dependências do Git**  
A partir do lançamento da plataforma Amazon Linux 2 de 7 de março de 2023, você pode usar os protocolos SSH e HTTPS para recuperar pacotes de um repositório Git. A ramificação da plataforma Node.js 16 suporta os protocolos SSH e HTTPS. Node.js 14 suporta somente o protocolo HTTPS.

**Example package.json —Node.js 16 suporta HTTPS e SSH**  

```
    ...
    "dependencies": {
      "aws-sdk": "https://github.com/aws/aws-sdk-js.git",
      "aws-chime": "git+ssh://git@github.com:aws/amazon-chime-sdk-js.git"
    }
```

**Versões e intervalos de versões**  
Use a palavra-chave `engines` no arquivo `package.json` para especificar a versão do Node.js que você deseja que a aplicação use. Você também pode especificar um intervalo de versões usando a notação npm. Para obter mais informações sobre a sintaxe para intervalos de versões, consulte [Semantic Versioning using npm](https://nodejs.dev/learn/semantic-versioning-using-npm) (Versionamento semântico usando o npm) no site Node.js. A palavra-chave `engines` no arquivo `package.json` do Node.js substitui a opção herdada `NodeVersion` no namespace `aws:elasticbeanstalk:container:nodejs`.

**Importante**  
O recurso para especificar intervalos de versões não está disponível para ramificações da plataforma Node.js em execução AL2023. Só oferecemos suporte a uma versão do Node.js em uma ramificação específica do Node.js em AL2023. Se o arquivo `package.json` especificar um intervalo de versões, ele será ignorado e a versão da ramificação da plataforma do Node.js será usada por padrão.

**Example `package.json`: versão única do Node.js**  

```
{
    ...
    "engines": { "node" : "14.16.0" }
  }
```

**Example `package.json`: intervalo de versões do Node.js**  

```
{
    ...
    "engines": { "node" : ">=10 <11" }
  }
```

Quando um intervalo de versões é indicado, o Elastic Beanstalk instala a versão do Node.js mais recente que a plataforma tem disponível dentro do intervalo. Neste exemplo, o intervalo indica que a versão deve ser maior ou igual à versão 10, mas menor que a versão 11. Como resultado, o Elastic Beanstalk instala a versão mais recente do Node.js, a 10.x.y, disponível na [plataforma compatível](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.nodejs).

Lembre-se de que você só pode especificar uma versão do Node.js que corresponda à ramificação da plataforma. Por exemplo, se você estiver usando a ramificação da plataforma Node.js 16, só poderá especificar uma versão 16.x.y do Node.js. Você pode usar as opções de intervalo de versões suportadas pelo npm para permitir mais flexibilidade. Para saber quais são as versões válidas do Node.js para cada ramificação da plataforma, consulte [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) no guia *Plataformas do AWS Elastic Beanstalk *.

**nota**  
Quando o suporte oferecido para a versão do Node.js que você estiver usando for removido da plataforma, será necessário alterar ou remover a configuração da versão do Node.js antes de fazer a [atualização da plataforma](using-features.platform.upgrade.md). Isso pode ocorrer quando uma vulnerabilidade de segurança é identificada para uma ou mais versões do Node.js.  
Nesse caso, ocorre uma falha na tentativa de atualizar para uma nova versão da plataforma não compatível com a versão do Node.js configurada. Para evitar a necessidade de criar um novo ambiente, altere a configuração da versão Node.js`package.json` para uma versão Node.js suportada pela versão antiga da plataforma e a nova. Você tem a opção de especificar um intervalo de versão Node.js que inclua uma versão suportada, conforme descrito anteriormente neste tópico. Você também tem a opção de remover a configuração e, em seguida, implantar o novo pacote de fonte.

# Bloquear dependências com npm shrinkwrap no Elastic Beanstalk
<a name="nodejs-platform-shrinkwrap"></a>

A plataforma Node.js executa o `npm install` como usuário do *aplicativo da web* sempre que você faz uma implantação. Quando há novas versões das dependências disponíveis, elas são instaladas quando você implanta a aplicação, o que pode causar demora na implantação.

Você pode evitar a atualização de dependências criando um arquivo `npm-shrinkwrap.json` que bloqueia as dependências do aplicativo para a versão atual.

```
$ npm install
$ npm shrinkwrap
wrote npm-shrinkwrap.json
```

Inclua esse arquivo no seu pacote de origem para garantir que as dependências sejam instaladas somente uma vez.

# Configurar o servidor de proxy
<a name="nodejs-platform-proxy"></a>

O Elastic Beanstalk usa o NGINX ou o Apache HTTPD como proxy reverso para mapear a aplicação para o balanceador de carga do Elastic Load Balancing na porta 80. O padrão é NGINX. O Elastic Beanstalk oferece uma configuração de proxy padrão que pode ser estendida ou modificada completamente por sua própria configuração.

Por padrão, o Elastic Beanstalk configura o proxy para encaminhar solicitações à sua aplicação na porta 5000. É possível modificar a porta padrão definindo a `PORT` [propriedade de ambiente](create_deploy_nodejs.container.md#nodejs-platform-console) para a porta de escuta da sua aplicação principal.

**nota**  
A porta na qual a aplicação escuta não afeta a porta à qual o servidor NGINXescuta para receber solicitações do balanceador de carga.

**Configurar o servidor proxy na sua versão da plataforma**  
Todas as AL2 plataformas AL2023/suportam um recurso de configuração de proxy uniforme. Para obter mais informações sobre como configurar o servidor proxy nas versões da sua plataforma executando AL2023/AL2, consulte[Configuração de proxy reverso](platforms-linux-extend.proxy.md). 

## Configurar o proxy da AMI do Amazon Linux (anterior ao Amazon Linux 2)
<a name="nodejs-platform-proxy.alami"></a>

Se o ambiente Node.js do Elastic Beanstalk usar uma versão da plataforma Amazon Linux AMI (anterior ao Amazon Linux 2), leia as informações desta seção.

**Observações**  
As informações neste tópico se aplicam somente às ramificações da plataforma baseadas no Amazon Linux AMI (AL1). AL2023/as ramificações da AL2 plataforma são incompatíveis com as versões anteriores da plataforma Amazon Linux AMI (AL1) e *exigem configurações diferentes*.
 [Em 18 de julho de 2022,](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-07-18-linux-al1-retire.html) **o Elastic Beanstalk definiu o status de todas as ramificações da plataforma baseadas no Amazon Linux AMI AL1 () como descontinuadas.** Para obter mais informações sobre como migrar para uma ramificação da plataforma Amazon Linux 2023 atual e totalmente compatível, consulte [Migrar a aplicação Linux do Elastic Beanstalk para o Amazon Linux 2023 ou Amazon Linux 2](using-features.migration-al.md).

### Estendendo e substituindo a configuração padrão do proxy — Amazon Linux AMI () AL1
<a name="nodejs-platform-proxy.alami.extending"></a>

A plataforma Node.js usa um proxy reverso para retransmitir solicitações da porta 80 na instância para a aplicação que está escutando na porta 8081. O Elastic Beanstalk oferece uma configuração de proxy padrão que pode ser estendida ou modificada completamente por sua própria configuração.

Para estender a configuração padrão, adicione arquivos `.conf` a `/etc/nginx/conf.d` com um arquivo de configuração. Para um exemplo específico, consulte [Encerrar o HTTPS em instâncias do EC2 que executam Node.js](https-singleinstance-nodejs.md).

A plataforma Node.js define a variável de ambiente PORT como a porta para a qual o servidor proxy direciona o tráfego. Leia essa variável no seu código para configurar a porta da sua aplicação.

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

    var server = app.listen(port, function () {
        console.log('Server running at http://127.0.0.1:' + port + '/');
    });
```

A configuração padrão do NGINX encaminha o tráfego para um servidor upstream denominado `nodejs` em `127.0.0.1:8081`. É possível remover a configuração padrão e fornecer a sua própria em um [arquivo de configuração](ebextensions.md).

**Example .ebextensions/proxy.config**  
O exemplo a seguir remove a configuração padrão e adiciona uma configuração personalizada que encaminha o tráfego para a porta 5000, em vez de 8081.  

```
files:
  /etc/nginx/conf.d/proxy.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
      upstream nodejs {
        server 127.0.0.1:5000;
        keepalive 256;
      }

      server {
        listen 8080;

        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        access_log  /var/log/nginx/access.log  main;

        location / {
            proxy_pass  http://nodejs;
            proxy_set_header   Connection "";
            proxy_http_version 1.1;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        gzip on;
        gzip_comp_level 4;
        gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        location /static {
            alias /var/app/current/static;
        }

      }

  /opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh:
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash -xe
      rm -f /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
      service nginx stop 
      service nginx start

container_commands:
  removeconfig:
    command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
```
A configuração de exemplo (`/etc/nginx/conf.d/proxy.conf`), usa a configuração padrão em `/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf` como base para incluir o bloco de servidor padrão com configurações de compactação e log, bem como um mapeamento de arquivo estático.  
O comando `removeconfig` remove a configuração padrão do contêiner para garantir que o servidor proxy use a configuração personalizada. O Elastic Beanstalk recria a configuração padrão quando cada configuração é implantada. Para explicar isso, no exemplo a seguir, um post-configuration-deployment hook (`/opt/elasticbeanstalk/hooks/configdeploy/post/99_kill_default_nginx.sh`) é adicionado. Isso remove a configuração padrão e reinicia o servidor de proxy.

**nota**  
A configuração padrão pode ser alterada em versões futuras da plataforma Node.js. Use a versão mais recente da configuração como base para suas personalizações para garantir a compatibilidade.

Se você substituir a configuração padrão, deverá definir os mapeamento de arquivos estáticos e a compactação GZIP. Isso ocorre porque a plataforma não pode aplicar as [ configurações padrão](create_deploy_nodejs.container.md#nodejs-namespaces).