rwttrter / docker-compose.yml
plexdx's picture
Upload 26 files
64d289f verified
version: "3.9"
# =============================================================================
# Omnichannel Fact & Hallucination Intelligence System
# HuggingFace Spaces compatible β€” single `docker compose up` deployment
# Services: FastAPI (7860), Qdrant (6333), Memgraph (7687), Redpanda (9092), Redis Stack (6379)
# =============================================================================
networks:
fact-net:
driver: bridge
volumes:
qdrant_storage:
memgraph_data:
redpanda_data:
redis_data:
services:
# ---------------------------------------------------------------------------
# QDRANT β€” Vector DB for claim embeddings (self-hosted, sub-ms HNSW search)
# ---------------------------------------------------------------------------
qdrant:
image: qdrant/qdrant:v1.9.2
container_name: fact-qdrant
restart: unless-stopped
networks: [fact-net]
ports:
- "6333:6333"
- "6334:6334" # gRPC
volumes:
- qdrant_storage:/qdrant/storage
environment:
QDRANT__SERVICE__GRPC_PORT: 6334
QDRANT__TELEMETRY_DISABLED: "true"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6333/readyz"]
interval: 10s
timeout: 5s
retries: 5
# ---------------------------------------------------------------------------
# MEMGRAPH β€” In-memory graph DB for trust-score traversal (Cypher compatible)
# 10-100x faster than Neo4j for real-time traversal since everything is in RAM
# ---------------------------------------------------------------------------
memgraph:
image: memgraph/memgraph-platform:2.16.0
container_name: fact-memgraph
restart: unless-stopped
networks: [fact-net]
ports:
- "7687:7687" # Bolt
- "3000:3000" # Memgraph Lab UI
volumes:
- memgraph_data:/var/lib/memgraph
environment:
MEMGRAPH_USER: memgraph
MEMGRAPH_PASSWORD: memgraph123
healthcheck:
test: ["CMD", "mg_client", "--host", "localhost", "--port", "7687", "--use-ssl=false", "-q", "RETURN 1;"]
interval: 15s
timeout: 10s
retries: 5
# ---------------------------------------------------------------------------
# REDPANDA β€” Kafka-compatible message queue (no JVM, no ZooKeeper, 10x lower
# latency). Handles the omnichannel ingestion firehose from all producers.
# ---------------------------------------------------------------------------
redpanda:
image: redpandadata/redpanda:v24.1.7
container_name: fact-redpanda
restart: unless-stopped
networks: [fact-net]
ports:
- "9092:9092" # Kafka API
- "9644:9644" # Admin API
- "8081:8081" # Schema registry
volumes:
- redpanda_data:/var/lib/redpanda/data
command:
- redpanda
- start
- --smp=1
- --memory=512M
- --overprovisioned
- --kafka-addr=PLAINTEXT://0.0.0.0:9092
- --advertise-kafka-addr=PLAINTEXT://redpanda:9092
- --pandaproxy-addr=0.0.0.0:8082
- --advertise-pandaproxy-addr=redpanda:8082
- --schema-registry-addr=0.0.0.0:8081
- --rpc-addr=redpanda:33145
- --advertise-rpc-addr=redpanda:33145
healthcheck:
test: ["CMD", "rpk", "cluster", "health"]
interval: 15s
timeout: 10s
retries: 5
# ---------------------------------------------------------------------------
# REDIS STACK β€” Redis + RedisJSON + RedisSearch for structured claim caching
# TTL: 6h for Green/Red verdicts, 15min for Yellow, no cache for Purple
# ---------------------------------------------------------------------------
redis-stack:
image: redis/redis-stack:7.4.0-v0
container_name: fact-redis
restart: unless-stopped
networks: [fact-net]
ports:
- "6379:6379" # Redis
- "8001:8001" # RedisInsight UI
volumes:
- redis_data:/data
environment:
REDIS_ARGS: "--maxmemory 256mb --maxmemory-policy allkeys-lru"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# ---------------------------------------------------------------------------
# BACKEND β€” FastAPI intelligence engine (HF Spaces listens on 7860)
# Waits for all upstream services to be healthy before starting
# ---------------------------------------------------------------------------
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: fact-backend
restart: unless-stopped
networks: [fact-net]
ports:
- "7860:7860" # HuggingFace Spaces default port
depends_on:
qdrant:
condition: service_healthy
memgraph:
condition: service_healthy
redpanda:
condition: service_healthy
redis-stack:
condition: service_healthy
environment:
# LLM providers β€” set in HF Space secrets
GROQ_API_KEY: ${GROQ_API_KEY:-}
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
X_BEARER_TOKEN: ${X_BEARER_TOKEN:-}
# Infrastructure endpoints (internal Docker network)
QDRANT_HOST: qdrant
QDRANT_PORT: 6333
MEMGRAPH_HOST: memgraph
MEMGRAPH_PORT: 7687
MEMGRAPH_PASSWORD: memgraph123
REDPANDA_BROKERS: redpanda:9092
REDIS_URL: redis://redis-stack:6379
# App config
PORT: 7860
LOG_LEVEL: INFO
DEMO_MODE: ${DEMO_MODE:-false} # true = use mock data, skip external APIs
volumes:
- ./backend:/app
command: ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860", "--reload"]