examples/open-source/docker-compose.yml

docker-compose.yml: full YAML source from the open-source folder of Spatial9 Agent Skills. Free, MIT licensed code for immersive audio with the Spatial9 MCP...

Raw file · View on GitHub · Download every file as a zip

# Spatial9 open source pipeline: everything runs locally with `docker compose up -d`.
# Only the Spatial9 calls leave your machine (MCP and A2A over HTTPS).
#
# Before starting: copy env.example to .env and fill in the values.
# Licences change; check each project before shipping to production.

services:
  minio:                                    # S3-compatible object storage (AGPL-3.0)
    image: minio/minio:latest
    command: server /data --console-address ":9001"
    ports: ["9000:9000", "9001:9001"]
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
      # Every new object in a bucket with an event rule is published to Kafka.
      MINIO_NOTIFY_KAFKA_ENABLE_PRIMARY: "on"
      MINIO_NOTIFY_KAFKA_BROKERS_PRIMARY: kafka:9092
      MINIO_NOTIFY_KAFKA_TOPIC_PRIMARY: audio.uploaded
    volumes: [minio:/data]
    depends_on: [kafka]

  kafka:                                    # event log (Apache-2.0), single node in KRaft mode
    image: apache/kafka:3.8.0
    ports: ["9092:9092"]
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"

  postgres:                                 # tracks, jobs and audit trail (PostgreSQL licence)
    image: postgres:16
    environment:
      POSTGRES_DB: spatial9
      POSTGRES_USER: spatial9
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pg:/var/lib/postgresql/data
      - ./schema.sql:/docker-entrypoint-initdb.d/01_schema.sql:ro
    ports: ["5432:5432"]

  valkey:                                   # pub/sub for real-time updates (BSD-3-Clause)
    image: valkey/valkey:8

  worker:                                   # consumes audio.uploaded, checks audio, starts Spatial9 tasks
    image: python:3.12-slim
    working_dir: /app
    command: sh -c "apt-get update -qq && apt-get install -y -qq ffmpeg >/dev/null && pip install -q -r requirements.txt && python worker.py"
    env_file: .env
    environment:
      PYTHONPATH: /app:/shared
    volumes: [".:/app", "../enterprise/shared:/shared:ro"]
    depends_on: [kafka, postgres, minio]

  webhook:                                  # receives A2A push notifications and streams them to browsers
    image: python:3.12-slim
    working_dir: /app
    command: sh -c "pip install -q -r requirements.txt && uvicorn webhook:app --host 0.0.0.0 --port 8080"
    env_file: .env
    environment:
      PYTHONPATH: /app:/shared
    volumes: [".:/app", "../enterprise/shared:/shared:ro"]
    ports: ["8080:8080"]
    depends_on: [postgres, valkey]

  prometheus:                               # metrics (Apache-2.0)
    image: prom/prometheus:latest
    volumes: ["./prometheus.yml:/etc/prometheus/prometheus.yml:ro"]
    ports: ["9090:9090"]

  grafana:                                  # dashboards (AGPL-3.0)
    image: grafana/grafana-oss:latest
    ports: ["3000:3000"]
    depends_on: [prometheus, postgres]

volumes:
  minio:
  pg: