Voltar ao blog Desenvolvimento Web

Deploy Node.js com PM2 + Nginx + Let's Encrypt (tutorial)

Passo a passo completo: do servidor vazio à aplicação Node.js rodando com PM2, Nginx reverse proxy, SSL Let's Encrypt e auto-start.

15 de abril de 2026 3 min de leitura CodexShop 697 palavras
Deploy Node.js com PM2 + Nginx + Let's Encrypt (tutorial)

Passo a passo completo: do servidor vazio à aplicação Node.js rodando com PM2, Nginx reverse proxy, SSL Let's Encrypt e auto-start.

Antes de começar: pré-requisitos

Você precisa de: (1) VPS com Ubuntu 22.04 LTS (Digital Ocean, Contabo, Hetzner); (2) acesso SSH com usuário root ou sudo; (3) um domínio apontando para o IP da VPS (registro A); (4) aplicação Node.js rodando em porta específica (3000, 3001, etc); (5) conta GitHub/GitLab com o código. Tempo estimado do tutorial: 45 minutos do servidor vazio ao site no ar com HTTPS.

Passo 1: Preparar o servidor

SSH no servidor como root. Atualize o sistema: apt update && apt upgrade -y. Instale ferramentas básicas: apt install curl git ufw -y. Configure timezone: timedatectl set-timezone America/Sao_Paulo. Crie um usuário sudo para não usar root direto (boa prática): adduser deploy && usermod -aG sudo deploy. A partir daqui, continue como o usuário deploy.

Passo 2: Firewall UFW

Libere só as portas essenciais: ufw allow 22 (SSH), ufw allow 80 (HTTP), ufw allow 443 (HTTPS), ufw enable. Verifique: ufw status. Qualquer outra porta fica bloqueada. Isso é a primeira camada de segurança — ataque de força bruta em portas abertas aleatoriamente é a causa nº 1 de invasão de VPS.

Passo 3: Instalar Node.js (versão certa)

Não use apt install nodejs — versão muito antiga. Use NodeSource para Node 20 LTS: curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs. Verifique: node -v && npm -v. Deve mostrar v20.x e npm 10.x ou similar.

Passo 4: Clonar o repositório e instalar dependências

Crie diretório para apps: sudo mkdir -p /opt/apps && sudo chown deploy:deploy /opt/apps && cd /opt/apps. Clone: git clone git@github.com:voce/seu-projeto.git. Entre: cd seu-projeto. Instale: npm ci --production. Crie arquivo .env com variáveis sensíveis (NUNCA commitar): nano .env.

Passo 5: PM2 para gerenciar o processo

PM2 mantém a aplicação rodando mesmo se crashar, reinicia no boot do servidor e centraliza logs. Instale global: sudo npm install -g pm2. Inicie sua app: pm2 start server.js --name meu-app. Configure auto-start: pm2 startup (copie e cole o comando que ele retornar). Salve: pm2 save. Verifique: pm2 list e pm2 logs meu-app.

Passo 6: Nginx como reverse proxy

Node.js não deve expor porta 80/443 diretamente — isso é trabalho do Nginx. Instale: sudo apt install nginx -y. Crie config: sudo nano /etc/nginx/sites-available/meu-app. Conteúdo: server { listen 80; server_name meudominio.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; } }. Ative: sudo ln -s /etc/nginx/sites-available/meu-app /etc/nginx/sites-enabled/. Teste: sudo nginx -t. Recarregue: sudo systemctl reload nginx.

Passo 7: SSL Let's Encrypt com certbot

HTTPS é obrigatório em 2026. Let's Encrypt é gratuito e automático. Instale certbot: sudo apt install certbot python3-certbot-nginx -y. Rode: sudo certbot --nginx -d meudominio.com -d www.meudominio.com. Responda as perguntas (email, aceitar termos, redirect HTTP→HTTPS). O certbot edita o Nginx automaticamente, baixa o certificado e configura renovação automática a cada 60 dias.

Passo 8: Testes finais e monitoramento

Acesse https://meudominio.com — deve abrir sua aplicação com cadeado. Teste: curl -I https://meudominio.com (deve retornar 200 OK). Configure alertas básicos: pm2 install pm2-logrotate (rotação de logs) + setup de email de alertas de downtime via uptimerobot.com (gratuito). Parabéns, você tem um deploy profissional.

Soluções CodexShop relacionadas

Se você quer acelerar e ter um especialista fazendo por você, a CodexShop tem soluções completas:

VPS Gerenciada Completa — Setup + 30 dias

VPS gerenciada com Nginx, PM2, SSL, firewall, backups e 30 dias de suporte. Pronta para rodar qualquer stack.

A partir de R$ 1497,00

Ver produto →
Deploy CI/CD Completo — GitHub Actions

Pipeline CI/CD com GitHub Actions: staging, prod, rollback, testes, lint, build e deploy automático.

A partir de R$ 1297,00

Ver produto →

Conclusão

Aplicar o que foi explicado aqui vai te colocar à frente de 90% dos concorrentes. O conhecimento está disponível — a execução é o que separa quem vende de quem não vende. Se quiser acelerar, fale com a gente: entre em contato sobre VPS Gerenciada Completa — Setup + 30 dias.

Perguntas Frequentes

E se minha app não é Node.js?
O conceito é o mesmo: app roda em porta interna (3000, 4000) e Nginx faz proxy. Funciona com Python (Gunicorn), Go (compilado), PHP (FPM), Ruby (Puma).
PM2 consome muito recurso?
Muito pouco. ~30-50MB de RAM. O ganho de ter restart automático, logs e monitoramento compensa 100x.
Vale pagar para ter isso gerenciado?
Para um projeto pessoal, vale aprender. Para produto sério em produção, vale pagar alguém que faça por você — emergência às 2h da manhã com você dormindo não é brincadeira.

Artigos relacionados