# 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