trustgraph/ts/deploy/docker-compose.yml

579 lines
15 KiB
YAML
Raw Normal View History

2026-04-05 22:44:45 -05:00
# TrustGraph TypeScript — Full Stack
# Usage: docker compose up -d
# Observability UI: http://localhost:3030 (Grafana)
2026-04-05 22:44:45 -05:00
networks:
trustgraph:
driver: bridge
volumes:
nats-data:
falkordb-data:
qdrant-data:
ollama-models:
prometheus-data:
loki-data:
tempo-data:
grafana-data:
librarian-data:
2026-04-05 22:44:45 -05:00
services:
# ---------------------------------------------------------------------------
# Infrastructure
# ---------------------------------------------------------------------------
nats:
image: nats:2.10-alpine
command: ["--jetstream", "--http_port", "8222", "--store_dir", "/data"]
ports:
- "4222:4222" # Client connections
- "8222:8222" # Monitoring / metrics
volumes:
- nats-data:/data
networks:
- trustgraph
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8222/healthz"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
restart: unless-stopped
falkordb:
image: falkordb/falkordb:latest
ports:
- "6380:6379"
2026-05-11 19:44:40 -05:00
- "${FALKORDB_BROWSER_PORT:-6381}:3000"
environment:
- ENCRYPTION_KEY=${FALKORDB_BROWSER_ENCRYPTION_KEY:-0000000000000000000000000000000000000000000000000000000000000000}
- NEXTAUTH_SECRET=${FALKORDB_BROWSER_NEXTAUTH_SECRET:-trustgraph-falkordb-browser-local-demo}
2026-04-05 22:44:45 -05:00
volumes:
2026-05-11 19:44:40 -05:00
- falkordb-data:/var/lib/falkordb/data
2026-04-05 22:44:45 -05:00
networks:
- trustgraph
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
restart: unless-stopped
qdrant:
image: qdrant/qdrant:latest
ports:
- "6333:6333" # REST API
- "6334:6334" # gRPC
volumes:
- qdrant-data:/qdrant/storage
networks:
- trustgraph
healthcheck:
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/6333'"]
2026-04-05 22:44:45 -05:00
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
restart: unless-stopped
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama-models:/root/.ollama
networks:
- trustgraph
restart: unless-stopped
# ---------------------------------------------------------------------------
# Observability
# ---------------------------------------------------------------------------
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prometheus-data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=7d"
- "--web.enable-remote-write-receiver"
- "--enable-feature=exemplar-storage"
networks:
- trustgraph
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:9090/-/healthy"]
interval: 10s
timeout: 5s
retries: 3
start_period: 10s
restart: unless-stopped
loki:
image: grafana/loki:3.0.0
user: "0"
2026-04-05 22:44:45 -05:00
ports:
- "3100:3100"
volumes:
- ./loki/loki-config.yml:/etc/loki/local-config.yaml:ro
- loki-data:/tmp/loki
command: ["-config.file=/etc/loki/local-config.yaml"]
networks:
- trustgraph
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:3100/ready"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
restart: unless-stopped
tempo:
image: grafana/tempo:2.6.1
user: "0"
2026-04-05 22:44:45 -05:00
ports:
- "3200:3200" # Tempo API
volumes:
- ./tempo/tempo-config.yml:/etc/tempo/config.yml:ro
- tempo-data:/var/tempo
2026-04-05 22:44:45 -05:00
command: ["-config.file=/etc/tempo/config.yml"]
networks:
- trustgraph
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:3200/ready"]
interval: 10s
timeout: 5s
retries: 5
start_period: 15s
restart: unless-stopped
otel-collector:
image: otel/opentelemetry-collector-contrib:latest
ports:
- "4327:4317" # OTLP gRPC (apps send traces/metrics here)
- "4328:4318" # OTLP HTTP
2026-04-05 22:44:45 -05:00
- "8889:8889" # Prometheus exporter (scraped by Prometheus)
volumes:
- ./otel-collector/config.yml:/etc/otelcol-contrib/config.yaml:ro
depends_on:
tempo:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
grafana:
image: grafana/grafana:latest
ports:
- "3030:3000"
2026-04-05 22:44:45 -05:00
volumes:
- ./grafana/provisioning/datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml:ro
- ./grafana/provisioning/dashboards.yml:/etc/grafana/provisioning/dashboards/dashboards.yml:ro
- ./grafana/dashboards:/var/lib/grafana/dashboards:ro
- grafana-data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GF_SECURITY_ADMIN_PASSWORD:-admin}
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Editor
2026-04-05 22:44:45 -05:00
- GF_AUTH_DISABLE_LOGIN_FORM=false
- GF_USERS_DEFAULT_THEME=dark
- GF_EXPLORE_ENABLED=true
- GF_USERS_VIEWERS_CAN_EDIT=true
2026-04-05 22:44:45 -05:00
- GF_FEATURE_TOGGLES_ENABLE=traceqlEditor tempoSearch tempoServiceGraph
depends_on:
prometheus:
condition: service_healthy
loki:
condition: service_healthy
tempo:
condition: service_healthy
networks:
- trustgraph
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/api/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 15s
restart: unless-stopped
# ---------------------------------------------------------------------------
# TrustGraph Application Services
2026-04-05 22:44:45 -05:00
# ---------------------------------------------------------------------------
gateway:
image: trustgraph-ts:local
build:
context: ../
dockerfile: Containerfile
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/gateway.mjs"]
ports:
- "${GATEWAY_PORT:-8088}:8088"
environment:
- NATS_URL=nats://nats:4222
- GATEWAY_PORT=8088
- GATEWAY_SECRET=${GATEWAY_SECRET:-}
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
config-service:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/config.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
text-completion:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/text-completion-openai.mjs"]
environment:
- NATS_URL=nats://nats:4222
- OPENAI_TOKEN=${OPENAI_TOKEN:-}
- OPENAI_BASE_URL=${OPENAI_BASE_URL:-}
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
prompt:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/prompt.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
embeddings:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/embeddings.mjs"]
environment:
- NATS_URL=nats://nats:4222
- OLLAMA_URL=http://ollama:11434
depends_on:
nats:
condition: service_healthy
ollama:
condition: service_started
networks:
- trustgraph
restart: unless-stopped
workbench:
build:
context: ../
dockerfile: packages/workbench/Containerfile
ports:
- "${WORKBENCH_PORT:-3001}:80"
depends_on:
- gateway
networks:
- trustgraph
restart: unless-stopped
agent:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/agent.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
mcp-tool:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/mcp-tool.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
librarian:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/librarian.mjs"]
environment:
- NATS_URL=nats://nats:4222
volumes:
- librarian-data:/app/data
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
flow-manager:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/flow-manager.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
knowledge-cores:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/cores.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
# ---------------------------------------------------------------------------
# Document Processing Pipeline
# ---------------------------------------------------------------------------
pdf-decoder:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/pdf-decoder.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
chunker:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/chunker.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
extractor:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/extractor.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
triples-store:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/triples-store.mjs"]
environment:
- NATS_URL=nats://nats:4222
- FALKORDB_URL=redis://falkordb:6379
depends_on:
nats:
condition: service_healthy
falkordb:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
graph-embeddings-store:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/graph-embeddings-store.mjs"]
environment:
- NATS_URL=nats://nats:4222
- QDRANT_URL=http://qdrant:6333
depends_on:
nats:
condition: service_healthy
qdrant:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
# ---------------------------------------------------------------------------
# Query Services
# ---------------------------------------------------------------------------
triples-query:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/triples-query.mjs"]
environment:
- NATS_URL=nats://nats:4222
- FALKORDB_URL=redis://falkordb:6379
depends_on:
nats:
condition: service_healthy
falkordb:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
graph-embeddings-query:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/graph-embeddings-query.mjs"]
environment:
- NATS_URL=nats://nats:4222
- QDRANT_URL=http://qdrant:6333
depends_on:
nats:
condition: service_healthy
qdrant:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
doc-embeddings-query:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/doc-embeddings-query.mjs"]
environment:
- NATS_URL=nats://nats:4222
- QDRANT_URL=http://qdrant:6333
depends_on:
nats:
condition: service_healthy
qdrant:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
# ---------------------------------------------------------------------------
# Retrieval Services
# ---------------------------------------------------------------------------
graph-rag:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/graph-rag.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
document-rag:
image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
command: ["bun", "entrypoints/document-rag.mjs"]
environment:
- NATS_URL=nats://nats:4222
depends_on:
nats:
condition: service_healthy
networks:
- trustgraph
restart: unless-stopped
# ---------------------------------------------------------------------------
# Alternative LLM Providers (uncomment one to use instead of text-completion)
# ---------------------------------------------------------------------------
# text-completion-ollama:
# image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
# command: ["bun", "entrypoints/text-completion-ollama.mjs"]
# environment:
# - NATS_URL=nats://nats:4222
# - OLLAMA_URL=http://ollama:11434
# - OLLAMA_MODEL=${OLLAMA_MODEL:-gemma3:4b}
# depends_on:
# nats:
# condition: service_healthy
# ollama:
# condition: service_started
# networks:
# - trustgraph
# restart: unless-stopped
# text-completion-claude:
# image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
# command: ["bun", "entrypoints/text-completion-claude.mjs"]
# environment:
# - NATS_URL=nats://nats:4222
# - CLAUDE_KEY=${CLAUDE_KEY:-}
# depends_on:
# nats:
# condition: service_healthy
# networks:
# - trustgraph
# restart: unless-stopped
# text-completion-azure-openai:
# image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
# command: ["bun", "entrypoints/text-completion-azure-openai.mjs"]
# environment:
# - NATS_URL=nats://nats:4222
# - AZURE_TOKEN=${AZURE_TOKEN:-}
# - AZURE_ENDPOINT=${AZURE_ENDPOINT:-}
# - AZURE_MODEL=${AZURE_MODEL:-gpt-4o}
# - AZURE_API_VERSION=${AZURE_API_VERSION:-2024-02-15-preview}
# depends_on:
# nats:
# condition: service_healthy
# networks:
# - trustgraph
# restart: unless-stopped
# text-completion-openai-compatible:
# image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
# command: ["bun", "entrypoints/text-completion-openai-compatible.mjs"]
# environment:
# - NATS_URL=nats://nats:4222
# - OPENAI_COMPAT_URL=${OPENAI_COMPAT_URL:-http://localhost:1234/v1}
# - OPENAI_COMPAT_MODEL=${OPENAI_COMPAT_MODEL:-default}
# - OPENAI_COMPAT_KEY=${OPENAI_COMPAT_KEY:-}
# depends_on:
# nats:
# condition: service_healthy
# networks:
# - trustgraph
# restart: unless-stopped
# text-completion-mistral:
# image: trustgraph-ts:local
2026-05-12 08:06:58 -05:00
# command: ["bun", "entrypoints/text-completion-mistral.mjs"]
# environment:
# - NATS_URL=nats://nats:4222
# - MISTRAL_TOKEN=${MISTRAL_TOKEN:-}
# - MISTRAL_MODEL=${MISTRAL_MODEL:-ministral-8b-latest}
# depends_on:
# nats:
# condition: service_healthy
# networks:
# - trustgraph
# restart: unless-stopped