services: redis: image: redis:7-alpine ports: - "6379:6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 5 postgres: image: postgres:16-alpine environment: POSTGRES_USER: minus20 POSTGRES_PASSWORD: minus20 POSTGRES_DB: minus20 ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U minus20 -d minus20"] interval: 5s timeout: 3s retries: 5 ingest-api: build: services/ingest-api environment: MINUS20_REDIS_URL: redis://redis:6379/0 ports: - "8080:8080" depends_on: redis: condition: service_healthy analyzer-worker: build: services/analyzer-worker environment: MINUS20_REDIS_URL: redis://redis:6379/0 # stub backend by default → runs offline with no API key or model server. # Set to "anthropic" (+ ANTHROPIC_API_KEY) or "ollama" for real analysis. MINUS20_LLM_PROVIDER: stub MINUS20_NOTIFIER: stub MINUS20_STORE: postgres MINUS20_POSTGRES_DSN: postgresql://minus20:minus20@postgres:5432/minus20 depends_on: redis: condition: service_healthy postgres: condition: service_healthy web-ui: build: services/web-ui environment: MINUS20_POSTGRES_DSN: postgresql://minus20:minus20@postgres:5432/minus20 ports: - "8081:8080" depends_on: postgres: condition: service_healthy