🚀 Desafio 1: Do Dev ao Deploy - Containerize Tudo!¶
🎯 Seu Desafio¶
Bem-vindo ao Desafio 1! Aqui você vai colocar a mão na massa e transformar uma aplicação completa em um ambiente totalmente containerizado, automatizado e pronto para produção.
Você recebeu uma aplicação Django + Next.js que funciona... mas só localmente. Seu desafio? Fazer ela rodar em containers, criar pipelines de CI/CD e preparar tudo para um deploy profissional! 💪
🎮 Regras do Jogo¶
Como Jogar
- Cada fase do desafio deve ser concluída em um commit separado
- Sua aplicação deve funcionar no final de cada etapa
- Use os tutoriais como guias, mas sinta-se livre para explorar!
- Trabalhe no seu próprio ritmo, mas complete todas as fases
Prepare seu Ambiente
Antes de começar, faça um fork do repositório original e crie seu próprio repositório privado. Assim você pode experimentar à vontade sem medo de errar!
🎮 Fases do Desafio¶
🐳 Fase 1: Containerize o Ambiente de DEV¶
Objetivo: Transformar sua aplicação em containers que rodam perfeitamente no seu ambiente de desenvolvimento!
Sua aplicação tem duas partes: um backend em Django e um frontend em Next.js. Atualmente ela usa SQLite, mas você vai precisar do Postgres.
Missão: - Crie um Dockerfile para o backend (Django) - Crie um Dockerfile para o frontend (Next.js) - Configure tudo em modo desenvolvimento com: - ✅ Debug habilitado - ✅ Hot reload ativado (suas mudanças no código aparecem instantaneamente!) - ✅ Variáveis de ambiente para DEV
Checkpoint
Ao final desta fase, você deve conseguir rodar cada container individualmente e ver suas mudanças de código refletidas imediatamente!
🎼 Fase 2: Orquestre Tudo com Docker Compose (DEV)¶
Objetivo: Fazer todos os serviços conversarem entre si!
Missão: - Crie um arquivo docker-compose.yml que combine: - 🎨 Container do Frontend - 🔧 Container do Backend
- 🗄️ Container do Postgres - Configure as redes para que tudo se comunique
Checkpoint
Vitória! Com um simples docker compose up, toda sua aplicação deve subir funcionando perfeitamente! 🎉
⚙️ Fase 3: Pipeline de CI - Automatize a Qualidade¶
Objetivo: Criar um pipeline que verifica automaticamente se seu código está em ordem!
Missão: Configure o Gitlab CI com as seguintes etapas:
Garanta que sua aplicação compila sem erros
Crie testes unitários simples para:
- Frontend (pelo menos 1 teste)
- Backend (pelo menos 1 teste)
Configure linters para manter seu código limpo e padronizado
Desafio Extra
Mostre que seu pipeline funciona! Faça commits que:
- ❌ Quebram o build (e veja o pipeline falhar)
- ❌ Falham nos testes
- ❌ Não passam no lint
- ✅ Passam em tudo!
🏭 Fase 4: Containers de PRODUÇÃO - Otimize!¶
Objetivo: Criar containers otimizados e seguros para produção!
Missão: - Crie novos Dockerfiles baseados em Alpine Linux (super leve!) - Configure tudo em modo produção: - ❌ Debug desabilitado - ✅ Código otimizado e minificado - ✅ Build dos arquivos estáticos do frontend - ✅ Tudo autocontido nos containers
Pro Tip
Containers de produção devem ser leves, rápidos e seguros. Pense em tamanho e segurança!
🚀 Fase 5: Stack Completo de PRODUÇÃO¶
Objetivo: Monte a stack completa pronta para o mundo real!
Missão: Crie o docker-compose-prod.yml com:
- 🎨 Frontend servido pelo Nginx
- 🔧 Backend em produção
- 🗄️ Postgres com credenciais de produção (não use as mesmas de DEV!)
- 🔒 SSL configurado (HTTPS na porta 443)
- 🔄 Redirecionamento de HTTP (80) para HTTPS (443)
Checkpoint Final de Produção
Sua aplicação deve:
- ✅ Subir com
docker compose -f docker-compose-prod.yml up - ✅ Ser acessível APENAS via HTTPS
- ✅ Não expor portas desnecessárias
- ✅ Estar segura e otimizada!
🎯 Fase 6: Deploy Contínuo - Automatize Tudo!¶
Objetivo: O grand finale! Deploy automático após passar no CI!
Missão: - Configure o CD para publicar automaticamente suas imagens no Container Registry do Gitlab - O deploy só deve acontecer se TODAS as etapas de CI passarem - Publique as imagens de produção do frontend e backend
🏆 Desafio Completo!
Parabéns! Você criou um pipeline completo de DevOps, do desenvolvimento ao deploy automatizado! 🎊
📊 Checklist do Desafio¶
Acompanhe seu progresso:
| Fase | Descrição | Status |
|---|---|---|
| 🐳 Fase 1 | Containerização da Aplicação (DEV) | ⬜ |
| 🎼 Fase 2 | Docker Compose - Stack Completa (DEV) | ⬜ |
| ⚙️ Fase 3 | Integração Contínua (CI) | ⬜ |
| ↳ 3.1 | Build automatizado | ⬜ |
| ↳ 3.2 | Testes unitários | ⬜ |
| ↳ 3.3 | Lint do código | ⬜ |
| 🏭 Fase 4 | Containers Otimizados (PROD) | ⬜ |
| 🚀 Fase 5 | Stack Completa com SSL (PROD) | ⬜ |
| 🎯 Fase 6 | Deploy Contínuo (CD) | ⬜ |
Dica de Ouro
Não tenha pressa! É melhor completar cada fase com qualidade do que correr e ficar preso depois. Cada fase constrói sobre a anterior! 🏗️
📦 Sobre o Projeto Base¶
Você vai trabalhar com uma aplicação fullstack moderna: Django + Next.js
🗂️ Estrutura do Projeto¶
O projeto está organizado como um monorepo (tudo em um só lugar!):
.
├── api # Backend Django
│ ├── config
│ ├── core_apps
│ ├── manage.py
│ ├── pytest.ini
│ └── requirements.txt
│ └── ...
├── README.md
└── web # Frontend NextJS
├── components.json
├── next.config.mjs
├── package.json
├── package-lock.json
├── public
├── src
├── tsconfig.json
└── ...
🏃 Quer Testar Localmente Primeiro?¶
Antes de containerizar, você pode rodar a aplicação localmente para entender como ela funciona!
🔧 Pré-requisitos¶
Ferramentas Necessárias
- Python 3.11+
- Node.js 20+ e npm
- Git
📥 Clone o Projeto¶
🔧 Configurando o Backend (Django)¶
# Entre no diretório do backend
cd api
# Criar e ativar um ambiente virtual (Linux/MacOS)
python -m venv venv
source venv/bin/activate
# No Windows:
???
# Instale as dependências
pip install -r requirements.txt
# Execute as migrações
python manage.py migrate
# Inicie o servidor de desenvolvimento
python manage.py runserver
Backend Rodando!
Acesse: http://localhost:8000 ✅
🎨 Configurando o Frontend (Next.js)¶
# Entre no diretório do frontend
cd web
# Instale as dependências
npm install
# Crie um arquivo .env.local baseado no exemplo
cp .env.example .env.local
# Inicie o servidor de desenvolvimento
npm run dev
Frontend Rodando!
Acesse: http://localhost:3000 🎉
🎓 Dicas para o Sucesso¶
Estratégias Vencedoras
📖 Leia a Documentação: Docker e Gitlab CI têm ótimas docs - use-as!
🔍 Debug Incrementalmente: Teste cada pequena mudança antes de avançar
💾 Commit Frequentemente: Pequenos commits funcionais são seus amigos
🤝 Colabore: Stuck? Pergunte! DevOps é sobre colaboração
🧪 Teste Localmente: Sempre teste localmente antes de fazer push
Armadilhas Comuns
- ⚠️ Não usar as mesmas credenciais de DEV em PROD
- ⚠️ Esquecer de expor as portas corretas nos containers
- ⚠️ Não configurar as variáveis de ambiente adequadamente
- ⚠️ Ignorar os logs quando algo falha
🏆 Critérios de Sucesso¶
Você completou o desafio quando:
✅ Todos os containers funcionam perfeitamente
✅ O pipeline de CI/CD está verde
✅ A aplicação roda em modo produção com SSL
✅ Você consegue fazer deploy automatizado
✅ O código está documentado e organizado
Boa sorte, e que a força do Docker esteja com você! 🐳✨