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
Recurso | Valor Recomendado |
---|---|
CPU | 1 vCPU |
Memória RAM | 1 GB |
Disco | 10 GB SSD |
Node.js | Versão 16.x ou superior |
NPM | Versã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