Como Configurar NestJS para Produção com PM2 e Preparar um VPS

Posted by

Rodar uma aplicação NestJS em produção exige mais do que apenas desenvolver funcionalidades. É necessário preparar corretamente os arquivos de build, configurar um gerenciador de processos como PM2 e garantir que o ambiente do VPS esteja pronto para executar a aplicação com estabilidade e desempenho.

Preparando os Arquivos de Produção no NestJS

Antes de implantar a aplicação em um servidor, é essencial transpilar o código TypeScript para JavaScript, otimizando-o para execução em produção.

Execute o seguinte comando na raiz do projeto:

npm run build

Esse comando gera os arquivos compilados dentro da pasta dist/, prontos para serem usados no ambiente de produção.

Estrutura Necessária para Produção

Para implantar a aplicação no servidor, envie apenas os seguintes arquivos:

  • Pasta dist/ (código transpilado)
  • Arquivo package.json (com scripts e dependências mínimas)
  • Arquivo .env (caso usado, mas sem dados sensíveis)

Evite incluir pastas desnecessárias como src/, nest-cli.json ou tsconfig.json.

Script de Inicialização no package.json

Certifique-se de ter um script de inicialização apontando para o arquivo principal transpilado:

"scripts": {
  "start": "node dist/main"
}

Essa configuração permite rodar a aplicação após o deploy.

Gerenciando a Aplicação com PM2

PM2 é um gerenciador de processos para Node.js amplamente utilizado em ambientes de produção. Ele mantém a aplicação ativa, reinicia automaticamente em falhas e permite escalabilidade.

Instalando o PM2

Instale o PM2 globalmente usando npm:

npm install -g pm2

Executando a Aplicação com PM2

Após copiar os arquivos para o servidor, execute:

pm2 start dist/main.js --name "meu-app"

O parâmetro --name define um nome identificável para o processo, facilitando sua gestão.

Usando ecosystem.config.js para Rodar Múltiplas Instâncias e Controlar Uso de Memória

Uma forma eficiente de gerenciar múltiplas instâncias e limitar o uso de memória é usar o arquivo ecosystem.config.js. Este arquivo permite definir regras de execução, ambientes e até mesmo configurar políticas de consumo de recursos.

Exemplo de Arquivo ecosystem.config.js

Crie um arquivo chamado ecosystem.config.js na raiz do projeto com o seguinte conteúdo:

module.exports = {
  apps: [
    {
      name: 'meu-app',
      script: './dist/main.js',
      node_args: '--no-warnings',
      instances: 'max',
      exec_mode: 'cluster',
      env: {
        NODE_ENV: 'production',
      },
      max_memory_restart: '512M'
    }
  ]
};

Descrição das Opções Mais Importantes

  • instances: Define quantas instâncias da aplicação serão criadas. Use 'max' para criar uma instância por núcleo de CPU.
  • exec_mode: Define o modo de execução. Use 'cluster' para escalar horizontalmente com múltiplos processos.
  • max_memory_restart: Reinicia automaticamente a instância se ela ultrapassar o limite de memória especificado.

Comandos Úteis com PM2

Inicie a aplicação com o arquivo de configuração:

pm2 start ecosystem.config.js

Liste os processos ativos:

pm2 list

Salve a configuração atual para que seja recarregada após reiniciar o servidor:

pm2 save

Isso garante que as instâncias sejam iniciadas novamente com as mesmas configurações após reinicialização do sistema.

Aproveitando Múltiplos Núcleos com Node.js

Por padrão, o Node.js roda em apenas um núcleo de CPU, pois é single-threaded. Para aproveitar servidores com múltiplos núcleos, você precisa criar múltiplas instâncias da aplicação.

Com o exec_mode: 'cluster' e instances: 'max' no ecosystem.config.js, o PM2 automaticamente cria uma instância por núcleo disponível no servidor.

Isso melhora o desempenho e a capacidade de resposta da aplicação sob carga alta, especialmente em servidores com mais de um núcleo lógico.

Requisitos Mínimos para Rodar NestJS em um VPS

Para garantir o funcionamento correto da aplicação em um VPS, verifique os seguintes requisitos técnicos:

Sistema Operacional Recomendado

Use sistemas Linux leves e estáveis, como:

  • Ubuntu Server (versão LTS)
  • Debian
  • CentOS

Recursos Mínimos Recomendados

RecursoValor Recomendado
CPU1 vCPU
Memória RAM1 GB
Disco10 GB SSD
Node.jsVersão 16.x ou superior
NPMVersão 8.x ou superior

Outras Dependências

Se sua aplicação usa:

  • Banco de dados: PostgreSQL, MySQL ou MongoDB instalado localmente ou via conexão remota
  • Variáveis de ambiente: Configure-as no sistema ou no arquivo .env
  • Proxy reverso: Use Nginx ou Apache para rotear requisições à aplicação Node.js
  • Portas abertas: Garanta que a porta usada (ex: 3000) esteja liberada no firewall

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *