Meta descrição: Faça deploy de Node.js na VPS com PM2 e Nginx, configure proxy reverso, SSL e rotação de logs com segurança e desempenho.

Colocar uma aplicação Node.js em produção na VPS com PM2 e Nginx não precisa ser complicado. Com um roteiro claro, você garante processo rodando de forma estável, HTTPS ativo, proxy reverso e logs sob controle.
A pilha sugerida é: Node.js executa sua aplicação; PM2 mantém os processos, faz restart automático e cluster; Nginx fica na frente como proxy reverso cuidando de HTTP/HTTPS, compressão e cabeçalhos. Essa combinação resolve estabilidade, segurança e operação do dia a dia, incluindo monitoramento básico e rotação de logs.
Preparando o ambiente na VPS para Node.js
Antes do deploy, deixe a VPS previsível e segura.
1) Atualize o sistema e instale utilitários
Comandos:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git ufw
2) Crie um usuário não-root
Comandos:
sudo adduser deploy
sudo usermod -aG sudo deploy
3) Configure o firewall (UFW)
Exponha apenas portas necessárias: 22 (SSH), 80 (HTTP), 443 (HTTPS).
Comandos:
sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status
4) Instale Node.js (NodeSource) e npm
Exemplo com Node 20.
Comandos:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash –
sudo apt install -y nodejs
node -v
npm -v
5) Estruture diretórios do projeto
Comandos:
sudo mkdir -p /var/www/minha-app
sudo chown -R deploy:deploy /var/www/minha-app
6) Instale Nginx
Comandos:
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Checklist: SSH com usuário não-root, portas 80/443 liberadas, Node e npm instalados, pasta do projeto criada.
🤖 Indicação útil: Formação Agentes de IA (n8n)
Se você quer automatizar tarefas de operação (deploy, alertas, integrações) e criar agentes de IA que rodam no piloto automático, conheça a Formação Agentes de IA (n8n) da Hora de Codar. Conteúdo mão na massa, projetos práticos e foco em VPS, domínios e segurança.
Veja a grade e os projetos: https://app.horadecodar.com.br/lp/formacao-agentes-de-ia-n8n?utm_source=blog
Realizando o deploy do projeto Node.js com PM2
O PM2 padroniza execução, mantém processos e facilita logs e cluster.
1) Instale o PM2 globalmente
Comandos:
sudo npm i -g pm2
pm2 -v
2) Envie o código para a VPS
Use git, rsync ou CI/CD. Exemplo com git:
Comandos:
cd /var/www/minha-app
git clone https://github.com/seu-usuario/seu-repo.git .
Instale dependências e faça build, se houver:
Comandos:
npm ci
npm run build
3) Configure variáveis de ambiente
Use .env (com permissões) ou envs no PM2 (ecosystem.config.js). Exemplo:
NODE_ENV=production
PORT=3000
4) Inicie a aplicação com PM2
Exemplos:
pm2 start dist/server.js –name minha-app
pm2 start dist/server.js –name minha-app -i max
5) Garanta autostart no boot
Comandos:
pm2 save
pm2 startup (execute a linha sugerida pelo PM2)
6) Fluxo de atualização (deploy)
Comandos:
cd /var/www/minha-app
git pull
npm ci
npm run build
pm2 reload minha-app
Com isso, sua app roda em uma porta interna (por exemplo, 3000) pronta para ser exposta via Nginx.
Vídeo recomendado: passo a passo de deploy em VPS (visão prática)
Para visualizar um passo a passo completo de configuração em VPS e comparar com seu ambiente, assista: https://www.youtube.com/watch?v=VCKzXFk_XjM
A lógica mostrada no vídeo (instalação, serviço rodando e acesso externo) é similar ao setup com Node.js + PM2 + Nginx. Use como reforço visual e checklist final.
Configurando o Nginx como proxy reverso para Node.js
O Nginx recebe HTTP/HTTPS e encaminha para sua app em localhost:porta, além de simplificar SSL e cabeçalhos.
1) Benefícios com Nginx na frente
HTTPS com Let’s Encrypt, redirecionamento HTTP para HTTPS, compressão, cache básico, headers de segurança e suporte a WebSocket.
2) Crie o server block
Exemplo: domínio api.seudominio.com apontando para 127.0.0.1:3000.
Caminhos:
Arquivo: /etc/nginx/sites-available/minha-app
Ativação:
sudo ln -s /etc/nginx/sites-available/minha-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
3) Habilite HTTPS com Let’s Encrypt (Certbot)
Comandos:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot –nginx -d api.seudominio.com
Teste a renovação:
sudo certbot renew –dry-run
4) Ajustes úteis
Definir timeouts, limite de upload e headers de segurança conforme necessidade. Comece simples; ajuste conforme o tráfego.
Gerenciamento e rotação de logs com PM2 logrotate
Logs são vitais e podem lotar o disco. O módulo pm2-logrotate resolve a rotação automática.
1) Instale o módulo
Comandos:
pm2 install pm2-logrotate
pm2 module:list
2) Configurações iniciais recomendadas
Comandos:
pm2 set pm2-logrotate:maxsize 10M
pm2 set pm2-logrotate:retain 10
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:dateFormat YYYY-MM-DDHH-mm-ss
pm2 set pm2-logrotate:workerInterval 30
Significado: gira ao atingir 10 MB, mantém 10 arquivos, comprime logs antigos.
3) Evite excesso de logs
Desative debug em produção, use níveis (info/warn/error), não registre dados sensíveis.
4) Centralização (quando crescer)
Considere enviar logs para serviços externos ou usar uma stack de observabilidade quando houver múltiplas instâncias/serviços.
💻 Onde hospedar: VPS da Hostinger para Node.js, PM2 e Nginx
Para este tipo de deploy, uma VPS estável com bom disco e opção de escalar ajuda muito. A VPS da Hostinger é uma opção com bom custo-benefício, garantia de 30 dias e suporte 24/7.
Link com indicação: https://www.hostinger.com.br/horadecodar
Cupom: HORADECODAR
Compare planos e recursos, especialmente se você precisa de mais RAM/CPU ou NVMe para builds e I/O.
Como monitorar logs e performance do Node.js em produção
Depois do deploy, o foco é observar disponibilidade, erros e consumo de recursos.
1) Ver logs com PM2
Comandos úteis:
pm2 logs
pm2 logs minha-app
pm2 logs minha-app –lines 200
pm2 show minha-app
2) Recursos (CPU/RAM) e processos
Comandos:
pm2 monit
top
free -h
df -h
3) Investigando lentidão
Verifique status do Nginx e da aplicação (systemctl status nginx, pm2 status), consumo de CPU/RAM e timeouts. Considere aumentar instâncias com pm2 -i max se a app for stateless e revisar endpoints ou consultas pesadas.
4) Health check simples
Crie um endpoint /health retornando 200 com informações básicas. Exemplo de JSON: { “status”: “ok”, “version”: “1.3.0” } (lembre de não expor segredos).
5) Quando subir o nível
Se os requisitos crescerem, adote APM, tracing distribuído e centralização de logs. Para começar, PM2 + Nginx + logrotate já dão previsibilidade e segurança.
Como realizar o deploy de uma aplicação Node.js na VPS usando PM2 e Nginx?
Para realizar o deploy de uma aplicação Node.js na VPS, primeiro transfira seu código para o servidor (via Git, SCP, ou FTP). Instale o Node.js, PM2 e Nginx na VPS. Utilize o PM2 para iniciar e gerenciar sua aplicação Node.js, garantindo que ela reinicie automaticamente em caso de falhas. Em seguida, configure o Nginx como proxy reverso, direcionando o tráfego HTTPS para sua aplicação Node.js na porta interna (normalmente 3000). Habilite SSL com Let’s Encrypt ou um certificado próprio para segurança.
Por que usar o PM2 e o Nginx juntos no deploy do Node.js em produção?
O PM2 é responsável pelo gerenciamento dos processos do Node.js, realizando restart automático em caso de falha e facilitando o monitoramento. Já o Nginx atua como proxy reverso, melhorando a performance ao servir arquivos estáticos, distribuir requisições e permitir a configuração de SSL (HTTPS), além de proteger a aplicação de acessos diretos externos. Dessa forma, a combinação de ambos resulta em um ambiente mais seguro, estável e escalável.
Como configurar logs eficientes em produção ao fazer deploy Node.js com PM2 e Nginx?
Com PM2, você pode definir logs de saída e erro da aplicação em arquivos específicos usando os comandos –log ou através do ecosystem.config.js. Para logs de requisições HTTP, o Nginx registra por padrão no arquivo access.log e erros em error.log, ambos localizados geralmente em /var/log/nginx/. Recomenda-se configurar o logrotate tanto para os logs do PM2 quanto do Nginx, garantindo o gerenciamento do tamanho e arquivamento dos logs em produção.
Conclusão
Com Node.js rodando em PM2 e Nginx como proxy reverso, você ganha estabilidade, HTTPS, controle de logs e um caminho claro para operar em produção. O fluxo recomendado: preparar a VPS, subir a aplicação com PM2 (e autostart), configurar Nginx com SSL e aplicar rotação de logs. A partir daí, monitore com PM2 e ferramentas do sistema, e evolua para CI/CD e observabilidade conforme a demanda. Se quiser, posso fornecer um modelo de ecosystem.config.js e um exemplo de configuração Nginx com gzip e headers de segurança para o seu caso.

