version: '3.9' services: # ── PostgreSQL ────────────────────────────────────────────────────────────── postgres: image: postgres:16-alpine environment: POSTGRES_DB: x402_marketplace POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5 # ── Jaeger (OpenTelemetry traces) ──────────────────────────────────────────── jaeger: image: jaegertracing/all-in-one:1.60 ports: - "16686:16686" # Jaeger UI - "4317:4317" # OTLP gRPC - "4318:4318" # OTLP HTTP environment: COLLECTOR_OTLP_ENABLED: "true" # ── Facilitator Service ────────────────────────────────────────────────────── facilitator: build: context: . target: facilitator env_file: .env environment: FACILITATOR_HOST: 0.0.0.0 FACILITATOR_PORT: 8080 # For testnet, delegate to hosted facilitator UPSTREAM_FACILITATOR: https://x402.org/facilitator OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4317 OTEL_SERVICE_NAME: x402-facilitator ports: - "8080:8080" depends_on: - jaeger # ── Agent Node ──────────────────────────────────────────────────────────────── agent-node: build: context: . target: agent-node env_file: .env environment: AGENT_HOST: 0.0.0.0 AGENT_PORT: 3000 DATABASE_URL: postgresql://postgres:postgres@postgres:5432/x402_marketplace FACILITATOR_URL: http://facilitator:8080 OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4317 OTEL_SERVICE_NAME: x402-agent-node ports: - "3000:3000" depends_on: postgres: condition: service_healthy facilitator: condition: service_started volumes: postgres_data: