Desenvolvimento (Docker Compose)
O Docker Compose é o ambiente de desenvolvimento. Em produção, o deploy é em k3s via Argo CD (ver Kubernetes & GitOps).
Layout do monorepo de aplicação
busca-busca/
backend/ (Java) -> Dockerfile multi-stage (Maven build -> JRE)
collector/ (Python) -> Dockerfile (slim)
frontend/ (Angular) -> Dockerfile multi-stage (node build -> nginx)
infra/
db/init/ # scripts SQL de bootstrap (extensão PostGIS)
nginx/ # config do proxy (se separado)
docker-compose.yml
.env.example # NUNCA versionar .env realServiços do docker-compose.yml
db— imagempostgis/postgis:16-3.4, volume nomeado,healthcheckcompg_isready.rabbitmq— imagemrabbitmq:3-management,healthcheckcomrabbitmq-diagnostics ping; UI de gestão em:15672(mensageria — ver ADR-0005).redis— imagemredis:7, cache de buscas usado pela API.backend— Java;depends_on: db, rabbitmq, redis (service_healthy); expõe/api; Flyway no start.collector— Python;depends_on: backend; roda o pipeline (agendado).frontend— Nginx servindo o Angular + proxy/api→backend.- (opcional)
pgadmin/adminer, stack de observabilidade (grafana/otel-lgtm).
Boas práticas de container
- Multi-stage builds (imagem final pequena, sem ferramentas de build).
- Rodar como usuário não-root; imagens slim/alpine quando possível.
.dockerignorepor serviço (não copiarnode_modules,target,.venv).healthcheckem cada serviço edepends_on: condition: service_healthy.- Config 100% por env (
.env+env_file); segredos fora do git. - Volumes nomeados para Postgres e storage de fotos.
- Rede interna dedicada; só o Nginx e a API expostos.
- Versões fixas (pinned) das imagens base; logs em stdout.
Comandos
bash
cp .env.example .env # ajuste as variáveis
docker compose up -d # sobe tudo
docker compose logs -f backend
docker compose down # derruba (add -v para apagar volumes)