Módulo 3 — Sua primeira aplicação no ar
Colocando no ar: deploy de verdade
Lição 2 de 2
🎬
Vídeo desta lição ainda não foi gravado.
O conteúdo em texto abaixo já está completo.
Módulo 3, Lição 2 — Colocando no ar: deploy de verdade
Tempo estimado: 5h · Pré-requisito: Lição 1 · Última lição do Módulo 3
1. "Funciona na minha máquina" — o problema mais antigo da programação
Toda aplicação nasce rodando no computador de quem construiu, numa espécie de bolha protegida. Deploy é o processo de tirar ela dessa bolha e colocá-la rodando de verdade, num servidor acessível pra qualquer pessoa — e é exatamente aí que tudo que você aprendeu nos Módulos 0 e 2 (VPS, SSH, Nginx, TLS) deixa de ser teoria e vira a coisa que sustenta uma aplicação real.
Essa mesma plataforma que você está usando passou (ou vai passar, se você estiver acompanhando ao vivo) por esse processo exato: local → VPS → domínio público com certificado válido.
2. Por que não basta só rodar npm start
Na sua máquina, rodar uma aplicação é simples: um comando, uma janela de terminal aberta, pronto. Numa VPS, isso quebra rápido:
- Se você fechar o terminal (ou a conexão SSH cair), o processo morre junto.
- Se a aplicação travar por algum erro, ninguém reinicia ela sozinha.
- Se a VPS reiniciar (atualização do sistema, por exemplo), nada volta a rodar sozinho.
2.1 PM2 — o "gerente" que nunca dorme
PM2 é um gerenciador de processos: ele roda sua aplicação em segundo plano, reinicia sozinho se ela cair, e guarda os logs organizados. É a peça que transforma "um comando que eu rodei" em "um serviço que fica no ar".
pm2 start npm --name "academia" -- start # inicia e batiza o processo
pm2 save # grava a lista atual
pm2 startup # garante que volta sozinho após reboot da VPS
Com isso, mesmo que você feche o terminal SSH, a aplicação continua rodando — e se travar por algum motivo, o PM2 reinicia automaticamente.
3. Nginx como porteiro (retomando o Módulo 2)
Sua aplicação Next.js, rodando via PM2, escuta numa porta "interna" (por exemplo, 3000) — mas ninguém de fora deveria bater direto nessa porta. O Nginx, que você já viu configurado nas VPS ao longo do curso, entra de novo aqui com o mesmo papel: recebe as requisições que chegam nas portas públicas (80/443) e as encaminha internamente pra porta onde sua aplicação está — um padrão chamado proxy reverso.
server {
server_name academia.seudominio.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
listen 443 ssl;
# certificado gerenciado pelo Certbot, ver seção 4
}
Por que não simplesmente deixar a aplicação escutar direto na porta 443? Porque o Nginx traz de graça um monte de coisa que você não quer reimplementar: TLS, compressão, cabeçalhos de segurança, limite de taxa de requisições (você já configurou tudo isso nas lições anteriores!) — e permite que várias aplicações diferentes dividam a mesma VPS, cada uma no seu próprio domínio/subdomínio, sem conflito de porta.
4. Certbot — o certificado que se renova sozinho
Um site acessado por https:// precisa de um certificado TLS válido (o mesmo assunto que apareceu quando você configurou a VPS pela primeira vez). Tirar esse certificado manualmente, e lembrar de renovar antes de expirar, é chato e arriscado de esquecer.
O Certbot automatiza isso de ponta a ponta: pede um certificado gratuito (via Let's Encrypt), configura o Nginx sozinho, e agenda a renovação automática — você não precisa lembrar de nada depois de rodar uma vez.
certbot --nginx -d academia.seudominio.com
5. O checklist completo — do código ao ar
Juntando tudo (inclusive o que você já sabe dos módulos anteriores), esse é o caminho real que uma aplicação percorre até virar um site de verdade:
- Código pronto localmente, testado (Lição 1 deste módulo).
- Banco de dados na VPS — o mesmo Postgres que você já viu rodar em outras lições, só que com um banco novo e isolado pra essa aplicação.
- Build de produção —
npm run build, que otimiza o código pra rodar rápido (diferente do modo de desenvolvimento, mais lento mas com recarregamento automático). - PM2 mantendo o processo vivo (seção 2).
- Nginx como porteiro, encaminhando o domínio público pra porta interna (seção 3).
- Certbot garantindo HTTPS válido e renovado sozinho (seção 4).
- Firewall (UFW/fail2ban) — o mesmo que você configurou lá atrás, protegendo a porta SSH e liberando só 80/443 pro público.
Nenhum desses passos é novo de verdade — é a mesma caixa de ferramentas dos módulos anteriores, só que agora aplicada a "colocar uma aplicação no ar" em vez de "proteger um servidor".
6. Exercícios práticos
Exercício 1 — Se você tem uma VPS de prática (do Módulo 0), instale o PM2 nela:
npm install -g pm2
Exercício 2 — Rode qualquer script Node simples via PM2 (pm2 start meuarquivo.js), depois feche a conexão SSH e reabra — confirme com pm2 list que o processo continua rodando.
Exercício 3 (reflexão) — Por que faz sentido o Nginx (não a própria aplicação) cuidar do certificado TLS? Pense na resposta considerando o que aconteceria se cada aplicação numa mesma VPS tivesse que gerenciar seu próprio certificado separadamente.
Exercício 4 (gravação) — Se você já tem uma aplicação simples rodando local (mesmo que só um "Hello World"), grave o processo completo: subir na VPS, configurar PM2, apontar o Nginx, rodar o Certbot, e ver funcionando no navegador com o cadeado de HTTPS.
Responda o questionário abaixo pra fechar o Módulo 3.
Teste de fixação
Responda pra fechar a lição — suas respostas ficam registradas na sua conta.
Crie uma conta grátis pra responder o teste e registrar seu progresso.
Criar conta grátis