services: postgres: image: pgvector/pgvector:pg17 ports: - '${PG_HOST_PORT:-5433}:5432' environment: POSTGRES_USER: mosaic POSTGRES_PASSWORD: mosaic POSTGRES_DB: mosaic volumes: - pg_data:/var/lib/postgresql/data healthcheck: test: ['CMD-SHELL', 'pg_isready -U mosaic'] interval: 5s timeout: 3s retries: 5 valkey: image: valkey/valkey:8-alpine ports: - '${VALKEY_HOST_PORT:-6380}:6379' volumes: - valkey_data:/data healthcheck: test: ['CMD', 'valkey-cli', 'ping'] interval: 5s timeout: 3s retries: 5 otel-collector: image: otel/opentelemetry-collector-contrib:0.100.0 ports: - '4317:4317' # OTLP gRPC - '4318:4318' # OTLP HTTP volumes: - ./infra/otel-collector.yml:/etc/otelcol-contrib/config.yaml:ro depends_on: jaeger: condition: service_started jaeger: image: jaegertracing/jaeger:2.6.0 ports: - '16686:16686' # Jaeger UI - '4319:4317' # Jaeger OTLP gRPC (internal, collector forwards here) environment: COLLECTOR_OTLP_ENABLED: 'true' volumes: pg_data: valkey_data: