65 lines
2.3 KiB
Markdown
65 lines
2.3 KiB
Markdown
# Etapa 09 — Docker Compose e deploy
|
|
|
|
## Objetivo
|
|
Consolidar os três serviços (postgres, backend, frontend) em um único `docker-compose.yml` capaz de subir o ambiente completo com um comando.
|
|
|
|
## Tarefas
|
|
|
|
1. Criar `Dockerfile` do backend (multi-stage build: build com Maven, runtime com JRE 21 slim), incluindo a instalação das dependências do Playwright (Chromium) na imagem final
|
|
2. Criar `Dockerfile` do frontend (multi-stage: build com Node, servir estático via Nginx)
|
|
3. Consolidar o `docker-compose.yml` final:
|
|
|
|
```yaml
|
|
services:
|
|
postgres:
|
|
image: postgres:16
|
|
environment:
|
|
POSTGRES_DB: leadscraper
|
|
POSTGRES_USER: ${DB_USER}
|
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U ${DB_USER}"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
backend:
|
|
build: ./backend
|
|
environment:
|
|
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/leadscraper
|
|
SPRING_DATASOURCE_USERNAME: ${DB_USER}
|
|
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
|
|
JWT_SECRET: ${JWT_SECRET}
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
ports:
|
|
- "8082:8082"
|
|
|
|
frontend:
|
|
build: ./frontend
|
|
environment:
|
|
VITE_API_URL: ${API_URL}
|
|
depends_on:
|
|
- backend
|
|
ports:
|
|
- "8081:80"
|
|
|
|
volumes:
|
|
postgres_data:
|
|
```
|
|
|
|
4. Criar `.env.example` na raiz com todas as variáveis referenciadas (`DB_USER`, `DB_PASSWORD`, `JWT_SECRET`, `API_URL`)
|
|
5. Validar que `docker compose up --build` sobe os três serviços do zero, aplica as migrations automaticamente (Flyway roda no startup do backend) e o frontend consegue falar com o backend
|
|
6. Documentar no `LEIA-ME.md` o comando de subida completa e como configurar o `.env` para produção (trocar senhas padrão, ajustar `VITE_API_URL` para o domínio real)
|
|
|
|
## Critérios de aceite
|
|
|
|
- [ ] `docker compose up --build` sobe o ambiente completo em uma máquina limpa
|
|
- [ ] Migrations aplicam automaticamente sem passo manual
|
|
- [ ] Frontend acessível na porta configurada e conseguindo autenticar/consultar dados via backend
|
|
- [ ] Variáveis sensíveis (senha do banco, JWT secret) vêm de `.env`, nunca hardcoded nos Dockerfiles ou no compose
|
|
- [ ] `LEIA-ME.md` atualizado com instruções de subida
|