Deploy e DevOps para iniciantes
O que acontece quando você clica em 'deploy', como apps chegam ao ar, e os conceitos de DevOps que todo dev precisa entender mesmo sem ser especialista.
A maioria dos devs juniores escreve código mas não faz ideia de como ele chega até a produção. "Deploy" é aquilo que acontece depois do PR, ou algo que o sênior cuida. Entender o caminho do código até o app rodando é agora esperado até de devs que não são especialistas em infra.
Saber como funciona essa pipeline demistifica o clássico "funciona no meu local", ajuda a debugar problemas em produção e te torna um muito melhor colaborador com times de infra.
O caminho do código até o usuário
Primeiro, o modelo mental. Quando você faz push de código, não é magica que ele apareça no ar. Segue uma sequência:
- Código local (sua máquina): você escreve, testa localmente
- Repositório (GitHub/GitLab): você faz push e o repositório dispara o CI automaticamente
- CI (Integração Contínua): roda testes, faz build, verifica lint. Se falhar, o código não segue em frente
- Artefato: resultado do build, pode ser uma imagem Docker, um bundle JS, um jar Java
- CD (Deploy Contínuo ou Entrega Contínua): pega o artefato e coloca no servidor ou serviço de cloud
- Produção: onde os usuários finais acessam
A diferença entre CI e CD é importante: CI sempre roda (integrar e verificar), CD pode ser automático (continuous deployment) ou manual com um botão (continuous delivery).
Tipos de ambiente: local, staging, produção
Você precisa entender que existem três ambientes e eles não são iguais:
- Local: sua máquina. Rápido para testar, mas pode ter diferenças do ambiente real: versão do Node diferente, variáveis de ambiente customizadas, banco de dados em SQLite enquanto produção usa PostgreSQL
- Staging (homologação): espelho de produção. Onde você testa antes de liberar para usuários reais. Deve usar as mesmas configurações de produção, o mesmo banco de dados, a mesma infraestrutura: se só funciona local, o bug continua lá
- Produção: o ambiente real onde os usuários estão. Mudanças aqui têm consequências reais
"Funciona no meu local" é um antipadrão clássico. A meta é que o código funcione igual em todos os ambientes. Docker ajuda bastante nisso: se roda em um container no local, roda em um container em produção, rodando tudo igual.
Docker: por que todo dev ouve esse nome
Docker empacota sua aplicação e todas as dependências em um container, um ambiente isolado e reproduzível. O mesmo container roda igual no local, no CI e em produção. Nada de "funciona aqui mas não lá".
Conceitos básicos que você precisa conhecer:
- Imagem: a receita do container, definida no
Dockerfile - Container: a instância rodando de uma imagem
- Registry: onde imagens são armazenadas (Docker Hub, AWS ECR, GitHub Container Registry)
Um exemplo mínimo de Dockerfile para uma app Node.js:
FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
A boa notícia: você não precisa escrever Dockerfiles do zero para começar. Plataformas como Railway e Render detectam a linguagem automaticamente e fazem o build por você.
Plataformas para começar a fazer deploy
Não existe uma resposta única, depende da complexidade do seu projeto. Aqui estão as opções realistas:
Zero config (para front-end e APIs simples):
- Vercel: deploy de Next.js, React, Vue em segundos. Conecta seu GitHub e cada push faz deploy automático
- Netlify: similar ao Vercel, excelente para sites estáticos e Jamstack
- Railway: backend com banco de dados, ótimo para Node.js/Python/Ruby. Detecta o projeto automaticamente
Intermediário (mais controle):
- Render: similar ao Railway, tem free tier generoso e documentação clara
- Fly.io: roda containers Docker, preço transparente, boa documentação para iniciantes
Cloud providers (AWS/GCP/Azure): Curva de aprendizado bem maior, mas é onde os projetos reais vivem. Entender os serviços básicos da AWS (EC2, S3, RDS, Lambda) é habilidade valorizada no mercado. Se quiser aprofundar, o Roadmap Cloud do Zero cobre isso em detalhes.
O mínimo de DevOps que todo dev deveria saber
Você não precisa ser especialista em infra, mas entender esses conceitos faz você um dev muito melhor:
- Variáveis de ambiente: configurações que mudam por ambiente (dev, staging, prod) ficam fora do código. Nunca comite
.envcom secrets reais - Logs: sua primeira fonte de verdade quando algo quebra em produção. Saiba sempre como acessar logs da aplicação no seu ambiente
- Health checks: um endpoint
/healthque retorna 200 se a app está OK. Load balancers e orquestradores usam isso para saber se precisam reiniciar seu container - Rollback: se algo quebra em produção, você precisa saber como voltar para a versão anterior rapidamente. Um bom CI/CD faz isso com um clique
- Monitoramento básico: saber quando sua app está fora do ar antes que o usuário reporte. Serviços como Sentry (erros) e UptimeRobot (uptime) são gratuitos para projetos pequenos
Checklist para você se auto-avaliar:
- [ ] Entendo a diferença entre CI (integrar e verificar) e CD (entregar para produção)?
- [ ] Já fiz deploy de pelo menos um projeto usando Vercel, Railway ou similar?
- [ ] Sei o que são variáveis de ambiente e por que não devo comitar o .env?
- [ ] Consigo acessar os logs da minha aplicação quando algo dá errado?