solutions/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", "../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", "../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: