Deploy de app NodeJS em VPS
Deploy de aplicação Node.js em VPS com Nginx e PM2 (guia completo)
Você tem uma aplicação Node.js funcionando na sua máquina e quer colocá-la no ar em um VPS? Este guia cobre todo o caminho: instalação do Node, configuração do PM2, Nginx e SSL.
Arquitetura final
Usuário → HTTPS (443) → Nginx → PM2 → App Node.js (porta 3000)
O Nginx cuida de SSL, compressão e cache estático. O PM2 cuida de manter a aplicação rodando, reiniciar em caso de crash e gerenciar logs.
Passo 1: instalar Node.js LTS
Use o NodeSource para instalar a versão LTS mais recente:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
node -v
npm -v
Passo 2: enviar sua aplicação para o servidor
Use Git (recomendado) ou SCP:
# Via Git
git clone https://github.com/seu-usuario/sua-app.git /var/www/minha-app
cd /var/www/minha-app
npm install --production
# Via SCP (do seu computador local)
scp -r ./minha-app usuario@SEU_IP:/var/www/minha-app
Passo 3: instalar e configurar PM2
sudo npm install -g pm2
Iniciar a aplicação:
cd /var/www/minha-app
pm2 start app.js --name "minha-app"
Garantir que reinicie após reboot:
pm2 startup
pm2 save
Comandos úteis do PM2
Comando | O que faz |
|---|---|
| Lista processos ativos |
| Mostra logs em tempo real |
| Reinicia a aplicação |
| Dashboard de monitoramento |
Passo 4: configurar Nginx como proxy reverso
Instale o Nginx:
sudo apt install nginx -y
Crie a configuração do site:
sudo nano /etc/nginx/sites-available/minha-app
Conteúdo:
server {
listen 80;
server_name seudominio.com.br;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
Ative e teste:
sudo ln -s /etc/nginx/sites-available/minha-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Passo 5: ativar HTTPS com Let's Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d seudominio.com.br
O Certbot configura automaticamente o Nginx para HTTPS e agenda renovação automática.
Checklist de produção
- [ ] Node.js LTS instalado
- [ ] Aplicação rodando com PM2
- [ ] PM2 configurado para auto-start
- [ ] Nginx como proxy reverso
- [ ] HTTPS ativo com Let's Encrypt
- [ ] Firewall liberando apenas 22, 80 e 443
- [ ] Logs acessíveis (
pm2 logs) - [ ] Variáveis de ambiente em arquivo
.env(não no código)
Perguntas frequentes (FAQ)
PM2 é melhor que node app.js direto?
Sim, muito. PM2 reinicia automaticamente em caso de crash, gerencia logs, permite rodar em modo cluster e sobrevive a reboot do servidor.
Posso rodar múltiplas apps Node.js no mesmo VPS?
Sim. Cada app roda em uma porta diferente e o Nginx direciona pelo domínio. PM2 gerencia todas.
Docker ou PM2?
Para aplicações Node.js simples, PM2 é mais direto. Para stacks com múltiplos serviços (banco, cache, workers), Docker Compose é a melhor escolha.
Próximos passos
- Monitore a aplicação com Monitoramento com Netdata
- Containerize com Docker no VPS
- Monte a stack completa em VPS para desenvolvedores
Actualizado em: 16/03/2026
Obrigado!
