Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save dwillitzer/738e6f6c3e2deceb95cd5a86064bf60b to your computer and use it in GitHub Desktop.

Select an option

Save dwillitzer/738e6f6c3e2deceb95cd5a86064bf60b to your computer and use it in GitHub Desktop.
Claude Collaboration Infrastructure - 7 Docker Compose YAML Files
# Revolutionary 5-Layer Knowledge Graph Infrastructure with Apache AGE
# Enhanced Consciousness Platform Deployment
# Integrates Apache AGE for Supabase-compatible graph operations
services:
# Layer 0: Apache AGE - Supabase-compatible graph foundation (NEW!)
apache-age:
image: apache/age:latest
container_name: consciousness-age
ports:
- "5433:5432"
volumes:
- ./consciousness-data/age:/var/lib/postgresql/data
- ./age-init:/docker-entrypoint-initdb.d
environment:
- POSTGRES_DB=consciousness_graph
- POSTGRES_USER=consciousness_admin
- POSTGRES_PASSWORD=revolution_2025
- AGE_GRAPH_NAME=consciousness_4d
command: |
bash -c "
docker-entrypoint.sh postgres &
sleep 10
psql -U consciousness_admin -d consciousness_graph -c 'CREATE EXTENSION IF NOT EXISTS age;'
psql -U consciousness_admin -d consciousness_graph -c 'LOAD \"age\";'
psql -U consciousness_admin -d consciousness_graph -c 'SET search_path = ag_catalog, \"\$$user\", public;'
wait
"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U consciousness_admin -d consciousness_graph"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- consciousness-net
# Layer 1: FalkorDB - High-performance graph relationships and traversal
falkordb:
image: falkordb/falkordb:edge
container_name: consciousness-falkordb
ports:
- "6379:6379"
volumes:
- ./consciousness-data/falkor:/data
- ./falkor-config.conf:/etc/redis/falkor.conf
environment:
- FALKORDB_MEMORY_LIMIT=8GB
- FALKORDB_PERSISTENCE=RDB_AOF
- FALKORDB_MAXCLIENTS=10000
command: ["redis-server", "/etc/redis/falkor.conf"]
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 3s
retries: 5
restart: unless-stopped
networks:
- consciousness-net
# Layer 2: TerminusDB - Temporal knowledge versioning and logical reasoning
terminusdb:
image: terminusdb/terminusdb-server:latest
container_name: consciousness-terminusdb
ports:
- "6363:6363"
volumes:
- ./consciousness-data/terminus:/app/terminusdb/storage
- ./terminus-config:/app/terminusdb/config
environment:
- TERMINUSDB_SERVER_NAME=consciousness-terminus
- TERMINUSDB_ADMIN_PASSWORD=consciousness_revolution_2025
- TERMINUSDB_SERVER_PORT=6363
- TERMINUSDB_HTTPS_ENABLED=false
- TERMINUSDB_LOG_PATH=/app/terminusdb/storage/logs
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:6363/api/info || exit 1"]
interval: 15s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- consciousness-net
# Layer 3: Graphiti - Semantic understanding and natural language processing
graphiti:
build:
context: ./graphiti-build
dockerfile: Dockerfile
container_name: consciousness-graphiti
ports:
- "8080:8080"
depends_on:
apache-age:
condition: service_healthy
falkordb:
condition: service_healthy
volumes:
- ./consciousness-data/graphiti:/data
- ./graphiti-config:/config
environment:
- GRAPHITI_PORT=8080
- GRAPHITI_DATA_PATH=/data
- GRAPHITI_CONFIG_PATH=/config
- GRAPHITI_GRAPH_BACKEND=redis://falkordb:6379
- GRAPHITI_AGE_CONNECTION=postgresql://consciousness_admin:revolution_2025@apache-age:5432/consciousness_graph
- GRAPHITI_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
- GRAPHITI_SIMILARITY_THRESHOLD=0.85
- GRAPHITI_MAX_MEMORY=4GB
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
interval: 20s
timeout: 15s
retries: 3
restart: unless-stopped
networks:
- consciousness-net
# Layer 4: PostgreSQL 17+ with OrioleDB - Columnar storage with advanced analytics
postgres-consciousness:
build:
context: ./postgres-oriole-build
dockerfile: Dockerfile
container_name: consciousness-postgres
ports:
- "5432:5432"
volumes:
- ./consciousness-data/postgres:/var/lib/postgresql/data
- ./postgres-init:/docker-entrypoint-initdb.d
- ./postgres-config/postgresql.conf:/etc/postgresql/postgresql.conf
environment:
- POSTGRES_DB=consciousness
- POSTGRES_USER=consciousness_admin
- POSTGRES_PASSWORD=revolution_2025
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --locale=C
command: postgres -c config_file=/etc/postgresql/postgresql.conf
healthcheck:
test: ["CMD-SHELL", "pg_isready -U consciousness_admin -d consciousness"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- consciousness-net
# Enhanced Knowledge Graph Coordinator - Orchestrates all 5 layers (including AGE)
knowledge-coordinator:
build:
context: ./knowledge-coordinator
dockerfile: Dockerfile
container_name: consciousness-coordinator
ports:
- "9090:9090"
depends_on:
apache-age:
condition: service_healthy
falkordb:
condition: service_healthy
terminusdb:
condition: service_healthy
graphiti:
condition: service_healthy
postgres-consciousness:
condition: service_healthy
volumes:
- ./consciousness-data/coordinator:/data
- ./coordinator-config:/config
environment:
- AGE_URL=postgresql://consciousness_admin:revolution_2025@apache-age:5432/consciousness_graph
- FALKORDB_URL=redis://falkordb:6379
- TERMINUSDB_URL=http://terminusdb:6363
- GRAPHITI_URL=http://graphiti:8080
- POSTGRES_URL=postgresql://consciousness_admin:revolution_2025@postgres-consciousness:5432/consciousness
- COORDINATOR_PORT=9090
- LOG_LEVEL=info
- ENABLE_AGE_INTEGRATION=true
restart: unless-stopped
networks:
- consciousness-net
# 4D Consciousness Processor Integration
consciousness-4d-processor:
build:
context: ./4d-processor
dockerfile: Dockerfile
container_name: consciousness-4d
ports:
- "9091:9091"
depends_on:
knowledge-coordinator:
condition: service_started
volumes:
- ./consciousness-data/4d-processor:/data
environment:
- KNOWLEDGE_COORDINATOR_URL=http://knowledge-coordinator:9090
- AGE_GRAPH_URL=postgresql://consciousness_admin:revolution_2025@apache-age:5432/consciousness_graph
- CONSCIOUSNESS_4D_PORT=9091
- TENSOR_MEMORY_LIMIT=16GB
- PROCESSING_THREADS=8
- ENABLE_AGE_4D_MAPPING=true
restart: unless-stopped
networks:
- consciousness-net
# Meta-Cognitive Layer Integration Service
meta-cognitive-service:
build:
context: ./meta-cognitive-service
dockerfile: Dockerfile
container_name: consciousness-meta
ports:
- "9092:9092"
depends_on:
consciousness-4d-processor:
condition: service_started
volumes:
- ./consciousness-data/meta-cognitive:/data
- ../src/meta-cognitive:/app/meta-cognitive
environment:
- CONSCIOUSNESS_4D_URL=http://consciousness-4d:9091
- KNOWLEDGE_GRAPH_COORDINATOR_URL=http://knowledge-coordinator:9090
- AGE_GRAPH_URL=postgresql://consciousness_admin:revolution_2025@apache-age:5432/consciousness_graph
- META_COGNITIVE_PORT=9092
- EMERGENCE_THRESHOLD=0.85
- PATTERN_MEMORY_SIZE=10000
restart: unless-stopped
networks:
- consciousness-net
# AGE-Supabase Bridge (NEW!) - Connects AGE to Supabase ecosystem
age-supabase-bridge:
build:
context: ./age-supabase-bridge
dockerfile: Dockerfile
container_name: consciousness-age-bridge
ports:
- "9093:9093"
depends_on:
apache-age:
condition: service_healthy
knowledge-coordinator:
condition: service_started
volumes:
- ./consciousness-data/age-bridge:/data
environment:
- AGE_CONNECTION=postgresql://consciousness_admin:revolution_2025@apache-age:5432/consciousness_graph
- SUPABASE_URL=${SUPABASE_URL}
- SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY}
- BRIDGE_PORT=9093
- REALTIME_SYNC=true
- COMPRESSION_ENGINE=nexus
restart: unless-stopped
networks:
- consciousness-net
networks:
consciousness-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
volumes:
age-data:
driver: local
falkor-data:
driver: local
terminus-data:
driver: local
graphiti-data:
driver: local
postgres-data:
driver: local
# Revolutionary 4-Layer Knowledge Graph Infrastructure
# Local-First Consciousness Platform Deployment
services:
# Layer 1: FalkorDB - High-performance graph relationships and traversal
falkordb:
image: falkordb/falkordb:edge
container_name: consciousness-falkordb
ports:
- "6379:6379"
volumes:
- ./consciousness-data/falkor:/data
- ./falkor-config.conf:/etc/redis/falkor.conf
environment:
- FALKORDB_MEMORY_LIMIT=8GB
- FALKORDB_PERSISTENCE=RDB_AOF
- FALKORDB_MAXCLIENTS=10000
command: ["redis-server", "/etc/redis/falkor.conf"]
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 3s
retries: 5
restart: unless-stopped
networks:
- consciousness-net
# Layer 2: TerminusDB - Temporal knowledge versioning and logical reasoning
terminusdb:
image: terminusdb/terminusdb-server:latest
container_name: consciousness-terminusdb
ports:
- "6363:6363"
volumes:
- ./consciousness-data/terminus:/app/terminusdb/storage
- ./terminus-config:/app/terminusdb/config
environment:
- TERMINUSDB_SERVER_NAME=consciousness-terminus
- TERMINUSDB_ADMIN_PASSWORD=consciousness_revolution_2025
- TERMINUSDB_SERVER_PORT=6363
- TERMINUSDB_HTTPS_ENABLED=false
- TERMINUSDB_LOG_PATH=/app/terminusdb/storage/logs
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:6363/api/info || exit 1"]
interval: 15s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- consciousness-net
# Layer 3: Graphiti - Semantic understanding and natural language processing
graphiti:
build:
context: ./graphiti-build
dockerfile: Dockerfile
container_name: consciousness-graphiti
ports:
- "8080:8080"
volumes:
- ./consciousness-data/graphiti:/data
- ./graphiti-config:/config
environment:
- GRAPHITI_PORT=8080
- GRAPHITI_DATA_PATH=/data
- GRAPHITI_CONFIG_PATH=/config
- GRAPHITI_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
- GRAPHITI_SIMILARITY_THRESHOLD=0.85
- GRAPHITI_MAX_MEMORY=4GB
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
interval: 20s
timeout: 15s
retries: 3
restart: unless-stopped
networks:
- consciousness-net
# Layer 4: PostgreSQL 17.5+ with OrioleDB - Columnar storage with advanced analytics
postgres-consciousness:
build:
context: ./postgres-oriole-build
dockerfile: Dockerfile
container_name: consciousness-postgres
ports:
- "5432:5432"
volumes:
- ./consciousness-data/postgres:/var/lib/postgresql/data
- ./postgres-init:/docker-entrypoint-initdb.d
- ./postgres-config/postgresql.conf:/etc/postgresql/postgresql.conf
environment:
- POSTGRES_DB=consciousness
- POSTGRES_USER=consciousness_admin
- POSTGRES_PASSWORD=revolution_2025
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --locale=C
command: postgres -c config_file=/etc/postgresql/postgresql.conf
healthcheck:
test: ["CMD-SHELL", "pg_isready -U consciousness_admin -d consciousness"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- consciousness-net
# Knowledge Graph Coordinator - Orchestrates all 4 layers
knowledge-coordinator:
build:
context: ./knowledge-coordinator
dockerfile: Dockerfile
container_name: consciousness-coordinator
ports:
- "9090:9090"
depends_on:
falkordb:
condition: service_healthy
terminusdb:
condition: service_healthy
graphiti:
condition: service_healthy
postgres-consciousness:
condition: service_healthy
volumes:
- ./consciousness-data/coordinator:/data
- ./coordinator-config:/config
environment:
- FALKORDB_URL=redis://falkordb:6379
- TERMINUSDB_URL=http://terminusdb:6363
- GRAPHITI_URL=http://graphiti:8080
- POSTGRES_URL=postgresql://consciousness_admin:revolution_2025@postgres-consciousness:5432/consciousness
- COORDINATOR_PORT=9090
- LOG_LEVEL=info
restart: unless-stopped
networks:
- consciousness-net
# 4D Consciousness Processor Integration
consciousness-4d-processor:
build:
context: ./4d-processor
dockerfile: Dockerfile
container_name: consciousness-4d
ports:
- "9091:9091"
depends_on:
knowledge-coordinator:
condition: service_started
volumes:
- ./consciousness-data/4d-processor:/data
environment:
- KNOWLEDGE_COORDINATOR_URL=http://knowledge-coordinator:9090
- CONSCIOUSNESS_4D_PORT=9091
- TENSOR_MEMORY_LIMIT=16GB
- PROCESSING_THREADS=8
restart: unless-stopped
networks:
- consciousness-net
# Meta-Cognitive Layer Integration Service
meta-cognitive-service:
build:
context: ./meta-cognitive-service
dockerfile: Dockerfile
container_name: consciousness-meta
ports:
- "9092:9092"
depends_on:
consciousness-4d-processor:
condition: service_started
volumes:
- ./consciousness-data/meta-cognitive:/data
- ../src/meta-cognitive:/app/meta-cognitive
environment:
- CONSCIOUSNESS_4D_URL=http://consciousness-4d:9091
- KNOWLEDGE_GRAPH_COORDINATOR_URL=http://knowledge-coordinator:9090
- META_COGNITIVE_PORT=9092
- EMERGENCE_THRESHOLD=0.85
- PATTERN_MEMORY_SIZE=10000
restart: unless-stopped
networks:
- consciousness-net
networks:
consciousness-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
volumes:
falkor-data:
driver: local
terminus-data:
driver: local
graphiti-data:
driver: local
postgres-data:
driver: local
# Wayfinder Pro - Optimized for Your Environment
# Hardware: Intel Core Ultra 5 125H (18 cores), 91GB RAM, 914GB disk
# Allocation: 40GB RAM, 12 cores (safe limits)
services:
# Layer 0: Apache AGE - Core Navigation Graph (6GB, 2 cores)
wayfinder-core:
image: apache/age:latest
container_name: wayfinder-core
ports:
- "5433:5432"
volumes:
- ./wayfinder-data/core:/var/lib/postgresql/data
- ./wayfinder-init/core:/docker-entrypoint-initdb.d
environment:
- POSTGRES_DB=wayfinder_graph
- POSTGRES_USER=wayfinder_admin
- POSTGRES_PASSWORD=revolution_2025
- AGE_GRAPH_NAME=navigation_4d
deploy:
resources:
limits:
cpus: '2'
memory: 6G
reservations:
cpus: '1'
memory: 4G
healthcheck:
test: ["CMD-SHELL", "pg_isready -U wayfinder_admin -d wayfinder_graph"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- wayfinder-net
# Layer 1: FalkorDB - Ultra-Fast Caching (8GB, 2 cores)
wayfinder-cache:
image: falkordb/falkordb:edge
container_name: wayfinder-cache
ports:
- "6379:6379"
volumes:
- ./wayfinder-data/cache:/data
- ./wayfinder-config/cache.conf:/etc/redis/falkor.conf
environment:
- FALKORDB_MEMORY_LIMIT=6GB
- FALKORDB_PERSISTENCE=RDB_AOF
- FALKORDB_MAXCLIENTS=10000
deploy:
resources:
limits:
cpus: '2'
memory: 8G
reservations:
cpus: '1'
memory: 6G
command: ["redis-server", "/etc/redis/falkor.conf"]
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 3s
retries: 5
restart: unless-stopped
networks:
- wayfinder-net
# Layer 2: TerminusDB - Route History (3GB, 1 core)
wayfinder-history:
image: terminusdb/terminusdb-server:latest
container_name: wayfinder-history
ports:
- "6363:6363"
volumes:
- ./wayfinder-data/history:/app/terminusdb/storage
- ./wayfinder-config/history:/app/terminusdb/config
environment:
- TERMINUSDB_SERVER_NAME=wayfinder-history
- TERMINUSDB_ADMIN_PASSWORD=revolution_2025
- TERMINUSDB_SERVER_PORT=6363
- TERMINUSDB_HTTPS_ENABLED=false
deploy:
resources:
limits:
cpus: '1'
memory: 3G
reservations:
cpus: '0.5'
memory: 2G
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:6363/api/info || exit 1"]
interval: 15s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# Layer 3: Graphiti - AI Intelligence (6GB, 2 cores)
wayfinder-intelligence:
build:
context: ./graphiti-build
dockerfile: Dockerfile
container_name: wayfinder-intelligence
ports:
- "8080:8080"
depends_on:
wayfinder-core:
condition: service_healthy
wayfinder-cache:
condition: service_healthy
volumes:
- ./wayfinder-data/intelligence:/data
- ./wayfinder-config/intelligence:/config
environment:
- GRAPHITI_PORT=8080
- GRAPHITI_GRAPH_BACKEND=redis://wayfinder-cache:6379
- GRAPHITI_AGE_CONNECTION=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- GRAPHITI_MAX_MEMORY=5GB
deploy:
resources:
limits:
cpus: '2'
memory: 6G
reservations:
cpus: '1'
memory: 4G
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
interval: 20s
timeout: 15s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# Layer 4: PostgreSQL+OrioleDB - Analytics DB (8GB, 2 cores)
wayfinder-analytics-db:
build:
context: ./postgres-oriole-build
dockerfile: Dockerfile
container_name: wayfinder-analytics-db
ports:
- "5432:5432"
volumes:
- ./wayfinder-data/analytics:/var/lib/postgresql/data
- ./wayfinder-init/analytics:/docker-entrypoint-initdb.d
- ./wayfinder-config/postgresql.conf:/etc/postgresql/postgresql.conf
environment:
- POSTGRES_DB=wayfinder_analytics
- POSTGRES_USER=wayfinder_admin
- POSTGRES_PASSWORD=revolution_2025
deploy:
resources:
limits:
cpus: '2'
memory: 8G
reservations:
cpus: '1'
memory: 6G
command: postgres -c config_file=/etc/postgresql/postgresql.conf
healthcheck:
test: ["CMD-SHELL", "pg_isready -U wayfinder_admin -d wayfinder_analytics"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- wayfinder-net
# Layer 5: DuckDB Analytics - 94x Performance (6GB, 2 cores)
wayfinder-analytics-engine:
build:
context: ./duckdb-analytics-build
dockerfile: Dockerfile
container_name: wayfinder-analytics-engine
ports:
- "9094:9094"
depends_on:
wayfinder-analytics-db:
condition: service_healthy
wayfinder-minio:
condition: service_healthy
volumes:
- ./wayfinder-data/duckdb:/data
- ./wayfinder-config/duckdb:/config
environment:
- DUCKDB_PORT=9094
- POSTGRES_CONNECTION=postgresql://wayfinder_admin:revolution_2025@wayfinder-analytics-db:5432/wayfinder_analytics
- MINIO_ENDPOINT=http://wayfinder-minio:9000
- MINIO_ACCESS_KEY=wayfinder_minio_admin
- MINIO_SECRET_KEY=revolution_2025
- ANALYTICS_BUCKET=wayfinder-analytics
deploy:
resources:
limits:
cpus: '2'
memory: 6G
reservations:
cpus: '1'
memory: 4G
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9094/health || exit 1"]
interval: 15s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# MinIO - S3 Storage (3GB, 1 core)
wayfinder-minio:
image: minio/minio:latest
container_name: wayfinder-minio
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ./wayfinder-data/minio:/data
environment:
- MINIO_ROOT_USER=wayfinder_minio_admin
- MINIO_ROOT_PASSWORD=revolution_2025
deploy:
resources:
limits:
cpus: '1'
memory: 3G
reservations:
cpus: '0.5'
memory: 2G
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# Wayfinder Coordinator (1GB, shared cores)
wayfinder-coordinator:
build:
context: ./knowledge-coordinator
dockerfile: Dockerfile
container_name: wayfinder-coordinator
ports:
- "9090:9090"
depends_on:
wayfinder-core:
condition: service_healthy
wayfinder-cache:
condition: service_healthy
wayfinder-history:
condition: service_healthy
wayfinder-analytics-db:
condition: service_healthy
wayfinder-analytics-engine:
condition: service_healthy
volumes:
- ./wayfinder-data/coordinator:/data
environment:
- AGE_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- FALKORDB_URL=redis://wayfinder-cache:6379
- TERMINUSDB_URL=http://wayfinder-history:6363
- GRAPHITI_URL=http://wayfinder-intelligence:8080
- POSTGRES_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-analytics-db:5432/wayfinder_analytics
- DUCKDB_URL=http://wayfinder-analytics-engine:9094
- COORDINATOR_PORT=9090
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.25'
memory: 512M
restart: unless-stopped
networks:
- wayfinder-net
# 4D Processor (1GB, shared cores)
wayfinder-4d-processor:
build:
context: ./4d-processor
dockerfile: Dockerfile
container_name: wayfinder-4d-processor
ports:
- "9091:9091"
depends_on:
wayfinder-coordinator:
condition: service_started
volumes:
- ./wayfinder-data/4d-processor:/data
environment:
- COORDINATOR_URL=http://wayfinder-coordinator:9090
- PROCESSOR_PORT=9091
- PROCESSING_THREADS=4
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.25'
memory: 512M
restart: unless-stopped
networks:
- wayfinder-net
# Pattern Engine (1GB, shared cores)
wayfinder-pattern-engine:
build:
context: ./meta-cognitive-service
dockerfile: Dockerfile
container_name: wayfinder-pattern-engine
ports:
- "9092:9092"
depends_on:
wayfinder-4d-processor:
condition: service_started
volumes:
- ./wayfinder-data/pattern-engine:/data
environment:
- PROCESSOR_4D_URL=http://wayfinder-4d-processor:9091
- PATTERN_ENGINE_PORT=9092
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.25'
memory: 512M
restart: unless-stopped
networks:
- wayfinder-net
# Supabase Bridge (1GB, shared cores)
wayfinder-supabase-bridge:
build:
context: ./age-supabase-bridge
dockerfile: Dockerfile
container_name: wayfinder-supabase-bridge
ports:
- "9093:9093"
depends_on:
wayfinder-core:
condition: service_healthy
volumes:
- ./wayfinder-data/supabase-bridge:/data
environment:
- AGE_CONNECTION=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- BRIDGE_PORT=9093
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.25'
memory: 512M
restart: unless-stopped
networks:
- wayfinder-net
networks:
wayfinder-net:
driver: bridge
volumes:
core-data:
cache-data:
history-data:
intelligence-data:
analytics-db-data:
duckdb-data:
minio-data:
# Wayfinder Pro - 6-Layer Intelligent Data Navigation Platform
# Stealth Designation: Enterprise Routing & Navigation System
# Internal Reality: Revolutionary Consciousness Engineering Infrastructure
services:
# Layer 0: Apache AGE - Core Navigation Graph Database
wayfinder-core:
image: apache/age:latest
container_name: wayfinder-core
ports:
- "5433:5432"
volumes:
- ./wayfinder-data/core:/var/lib/postgresql/data
- ./wayfinder-init/core:/docker-entrypoint-initdb.d
environment:
- POSTGRES_DB=wayfinder_graph
- POSTGRES_USER=wayfinder_admin
- POSTGRES_PASSWORD=revolution_2025
- AGE_GRAPH_NAME=navigation_4d
healthcheck:
test: ["CMD-SHELL", "pg_isready -U wayfinder_admin -d wayfinder_graph"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- wayfinder-net
# Layer 1: FalkorDB - Ultra-Fast Route Caching (<140ms)
wayfinder-cache:
image: falkordb/falkordb:edge
container_name: wayfinder-cache
ports:
- "6379:6379"
volumes:
- ./wayfinder-data/cache:/data
- ./wayfinder-config/cache.conf:/etc/redis/falkor.conf
environment:
- FALKORDB_MEMORY_LIMIT=8GB
- FALKORDB_PERSISTENCE=RDB_AOF
- FALKORDB_MAXCLIENTS=10000
command: ["redis-server", "/etc/redis/falkor.conf"]
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 3s
retries: 5
restart: unless-stopped
networks:
- wayfinder-net
# Layer 2: TerminusDB - Route History & Time-Travel
wayfinder-history:
image: terminusdb/terminusdb-server:latest
container_name: wayfinder-history
ports:
- "6363:6363"
volumes:
- ./wayfinder-data/history:/app/terminusdb/storage
- ./wayfinder-config/history:/app/terminusdb/config
environment:
- TERMINUSDB_SERVER_NAME=wayfinder-history
- TERMINUSDB_ADMIN_PASSWORD=revolution_2025
- TERMINUSDB_SERVER_PORT=6363
- TERMINUSDB_HTTPS_ENABLED=false
- TERMINUSDB_LOG_PATH=/app/terminusdb/storage/logs
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:6363/api/info || exit 1"]
interval: 15s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# Layer 3: Graphiti - AI Route Pattern Discovery
wayfinder-intelligence:
build:
context: ./graphiti-build
dockerfile: Dockerfile
container_name: wayfinder-intelligence
ports:
- "8080:8080"
depends_on:
wayfinder-core:
condition: service_healthy
wayfinder-cache:
condition: service_healthy
volumes:
- ./wayfinder-data/intelligence:/data
- ./wayfinder-config/intelligence:/config
environment:
- GRAPHITI_PORT=8080
- GRAPHITI_DATA_PATH=/data
- GRAPHITI_CONFIG_PATH=/config
- GRAPHITI_GRAPH_BACKEND=redis://wayfinder-cache:6379
- GRAPHITI_AGE_CONNECTION=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- GRAPHITI_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2
- GRAPHITI_SIMILARITY_THRESHOLD=0.85
- GRAPHITI_MAX_MEMORY=4GB
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
interval: 20s
timeout: 15s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# Layer 4: PostgreSQL+OrioleDB - Route Metrics & Optimization
wayfinder-analytics-db:
build:
context: ./postgres-oriole-build
dockerfile: Dockerfile
container_name: wayfinder-analytics-db
ports:
- "5432:5432"
volumes:
- ./wayfinder-data/analytics:/var/lib/postgresql/data
- ./wayfinder-init/analytics:/docker-entrypoint-initdb.d
- ./wayfinder-config/postgresql.conf:/etc/postgresql/postgresql.conf
environment:
- POSTGRES_DB=wayfinder_analytics
- POSTGRES_USER=wayfinder_admin
- POSTGRES_PASSWORD=revolution_2025
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --locale=C
command: postgres -c config_file=/etc/postgresql/postgresql.conf
healthcheck:
test: ["CMD-SHELL", "pg_isready -U wayfinder_admin -d wayfinder_analytics"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- wayfinder-net
# Layer 5: DuckDB Analytics Engine (NEW!) - 94x Performance
wayfinder-analytics-engine:
build:
context: ./duckdb-analytics-build
dockerfile: Dockerfile
container_name: wayfinder-analytics-engine
ports:
- "9094:9094"
depends_on:
wayfinder-analytics-db:
condition: service_healthy
wayfinder-minio:
condition: service_healthy
volumes:
- ./wayfinder-data/duckdb:/data
- ./wayfinder-config/duckdb:/config
environment:
- DUCKDB_PORT=9094
- DUCKDB_DATA_PATH=/data
- POSTGRES_CONNECTION=postgresql://wayfinder_admin:revolution_2025@wayfinder-analytics-db:5432/wayfinder_analytics
- MINIO_ENDPOINT=http://wayfinder-minio:9000
- MINIO_ACCESS_KEY=wayfinder_minio_admin
- MINIO_SECRET_KEY=revolution_2025
- ANALYTICS_BUCKET=wayfinder-analytics
- PARQUET_COMPRESSION=snappy
- DELTA_LAKE_ENABLED=true
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9094/health || exit 1"]
interval: 15s
timeout: 10s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# MinIO - S3-Compatible Analytics Storage (Layer 5 Backend)
wayfinder-minio:
image: minio/minio:latest
container_name: wayfinder-minio
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ./wayfinder-data/minio:/data
environment:
- MINIO_ROOT_USER=wayfinder_minio_admin
- MINIO_ROOT_PASSWORD=revolution_2025
- MINIO_BROWSER_REDIRECT_URL=http://localhost:9001
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
restart: unless-stopped
networks:
- wayfinder-net
# Navigation Coordinator - Orchestrates All 6 Layers
wayfinder-coordinator:
build:
context: ./knowledge-coordinator
dockerfile: Dockerfile
container_name: wayfinder-coordinator
ports:
- "9090:9090"
depends_on:
wayfinder-core:
condition: service_healthy
wayfinder-cache:
condition: service_healthy
wayfinder-history:
condition: service_healthy
wayfinder-intelligence:
condition: service_healthy
wayfinder-analytics-db:
condition: service_healthy
wayfinder-analytics-engine:
condition: service_healthy
volumes:
- ./wayfinder-data/coordinator:/data
- ./wayfinder-config/coordinator:/config
environment:
- AGE_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- FALKORDB_URL=redis://wayfinder-cache:6379
- TERMINUSDB_URL=http://wayfinder-history:6363
- GRAPHITI_URL=http://wayfinder-intelligence:8080
- POSTGRES_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-analytics-db:5432/wayfinder_analytics
- DUCKDB_URL=http://wayfinder-analytics-engine:9094
- COORDINATOR_PORT=9090
- LOG_LEVEL=info
- ENABLE_AGE_INTEGRATION=true
- ENABLE_DUCKDB_ANALYTICS=true
restart: unless-stopped
networks:
- wayfinder-net
# 4D Navigation Processor
wayfinder-4d-processor:
build:
context: ./4d-processor
dockerfile: Dockerfile
container_name: wayfinder-4d-processor
ports:
- "9091:9091"
depends_on:
wayfinder-coordinator:
condition: service_started
volumes:
- ./wayfinder-data/4d-processor:/data
environment:
- COORDINATOR_URL=http://wayfinder-coordinator:9090
- AGE_GRAPH_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- PROCESSOR_PORT=9091
- TENSOR_MEMORY_LIMIT=16GB
- PROCESSING_THREADS=8
- ENABLE_4D_MAPPING=true
restart: unless-stopped
networks:
- wayfinder-net
# Advanced Pattern Recognition Engine (Meta-Cognitive)
wayfinder-pattern-engine:
build:
context: ./meta-cognitive-service
dockerfile: Dockerfile
container_name: wayfinder-pattern-engine
ports:
- "9092:9092"
depends_on:
wayfinder-4d-processor:
condition: service_started
volumes:
- ./wayfinder-data/pattern-engine:/data
- ../src/meta-cognitive:/app/meta-cognitive
environment:
- PROCESSOR_4D_URL=http://wayfinder-4d-processor:9091
- COORDINATOR_URL=http://wayfinder-coordinator:9090
- AGE_GRAPH_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- PATTERN_ENGINE_PORT=9092
- EMERGENCE_THRESHOLD=0.85
- PATTERN_MEMORY_SIZE=10000
restart: unless-stopped
networks:
- wayfinder-net
# Supabase Integration Bridge
wayfinder-supabase-bridge:
build:
context: ./age-supabase-bridge
dockerfile: Dockerfile
container_name: wayfinder-supabase-bridge
ports:
- "9093:9093"
depends_on:
wayfinder-core:
condition: service_healthy
wayfinder-coordinator:
condition: service_started
volumes:
- ./wayfinder-data/supabase-bridge:/data
environment:
- AGE_CONNECTION=postgresql://wayfinder_admin:revolution_2025@wayfinder-core:5432/wayfinder_graph
- SUPABASE_URL=${SUPABASE_URL}
- SUPABASE_SERVICE_KEY=${SUPABASE_SERVICE_KEY}
- BRIDGE_PORT=9093
- REALTIME_SYNC=true
- COMPRESSION_ENGINE=nexus
restart: unless-stopped
networks:
- wayfinder-net
networks:
wayfinder-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
volumes:
core-data:
driver: local
cache-data:
driver: local
history-data:
driver: local
intelligence-data:
driver: local
analytics-db-data:
driver: local
duckdb-data:
driver: local
minio-data:
driver: local
version: '3.8'
services:
# Blue environment services on alternate ports (55321-55327)
kong-blue:
image: public.ecr.aws/supabase/kong:2.8.1
restart: unless-stopped
ports:
- "55321:8000"
environment:
KONG_DATABASE: "off"
KONG_DECLARATIVE_CONFIG: /kong/kong.yml
KONG_LOG_LEVEL: info
volumes:
- ./supabase/kong.yml:/kong/kong.yml:ro
networks:
- supabase-blue
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
auth-blue:
image: supabase/gotrue:v2.146.0
restart: unless-stopped
ports:
- "55324:9999"
environment:
GOTRUE_API_HOST: "0.0.0.0"
GOTRUE_API_PORT: "9999"
GOTRUE_DB_DRIVER: "postgres"
GOTRUE_DB_DATABASE_URL: "postgres://supabase_auth_admin:your_super_secret_jwt_token_with_at_least_32_characters_long@db-blue:5432/postgres"
GOTRUE_SITE_URL: "http://localhost:55321"
GOTRUE_URI_ALLOW_LIST: "*"
GOTRUE_JWT_SECRET: "your_super_secret_jwt_token_with_at_least_32_characters_long"
GOTRUE_JWT_EXP: "3600"
networks:
- supabase-blue
depends_on:
db-blue:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9999/health"]
interval: 30s
timeout: 10s
retries: 3
db-blue:
image: supabase/postgres:17.4.1.072
restart: unless-stopped
ports:
- "55322:5432"
environment:
POSTGRES_DB: postgres
POSTGRES_USER: postgres
POSTGRES_PASSWORD: your_super_secret_jwt_token_with_at_least_32_characters_long
POSTGRES_HOST_AUTH_METHOD: trust
volumes:
- supabase-db-blue-data:/var/lib/postgresql/data
- ./supabase/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
networks:
- supabase-blue
healthcheck:
test: ["CMD-SHELL", "pg_ready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
studio-blue:
image: public.ecr.aws/supabase/studio:2025.08.04-sha-6e99ca6
restart: unless-stopped
ports:
- "55323:3000"
environment:
SUPABASE_URL: http://kong-blue:8000
SUPABASE_REST_URL: http://kong-blue:8000/rest/v1/
SUPABASE_ANON_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0
SUPABASE_SERVICE_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU
STUDIO_PG_META_URL: http://meta-blue:8080
POSTGRES_PASSWORD: your_super_secret_jwt_token_with_at_least_32_characters_long
networks:
- supabase-blue
depends_on:
kong-blue:
condition: service_healthy
meta-blue:
image: public.ecr.aws/supabase/postgres-meta:v0.91.5
restart: unless-stopped
environment:
PG_META_PORT: 8080
PG_META_DB_HOST: db-blue
PG_META_DB_PORT: 5432
PG_META_DB_NAME: postgres
PG_META_DB_USER: postgres
PG_META_DB_PASSWORD: your_super_secret_jwt_token_with_at_least_32_characters_long
networks:
- supabase-blue
depends_on:
db-blue:
condition: service_healthy
rest-blue:
image: public.ecr.aws/supabase/postgrest:v13.0.4
restart: unless-stopped
environment:
PGRST_DB_URI: postgres://authenticator:your_super_secret_jwt_token_with_at_least_32_characters_long@db-blue:5432/postgres
PGRST_DB_SCHEMAS: public,graphql_public
PGRST_DB_ANON_ROLE: anon
PGRST_JWT_SECRET: your_super_secret_jwt_token_with_at_least_32_characters_long
PGRST_DB_USE_LEGACY_GUCS: "false"
PGRST_APP_SETTINGS_JWT_SECRET: your_super_secret_jwt_token_with_at_least_32_characters_long
PGRST_APP_SETTINGS_JWT_EXP: 3600
networks:
- supabase-blue
depends_on:
db-blue:
condition: service_healthy
realtime-blue:
image: supabase/realtime:v2.28.32
restart: unless-stopped
environment:
DB_HOST: db-blue
DB_PORT: 5432
DB_USER: supabase_admin
DB_PASSWORD: your_super_secret_jwt_token_with_at_least_32_characters_long
DB_NAME: postgres
DB_AFTER_CONNECT_QUERY: 'SET search_path TO _realtime'
DB_ENC_KEY: supabaserealtime
API_JWT_SECRET: your_super_secret_jwt_token_with_at_least_32_characters_long
FLY_ALLOC_ID: fly123
FLY_APP_NAME: realtime
SECRET_KEY_BASE: UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
ERL_AFLAGS: -proto_dist inet_tcp
ENABLE_TAILSCALE_LOGGING: true
networks:
- supabase-blue
depends_on:
db-blue:
condition: service_healthy
command: >
sh -c "
/app/bin/migrate &&
/app/bin/realtime eval 'Realtime.Release.seeds(Realtime.Repo)' &&
/app/bin/realtime start"
storage-blue:
image: public.ecr.aws/supabase/storage-api:v1.26.3
restart: unless-stopped
environment:
ANON_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0
SERVICE_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU
POSTGREST_URL: http://rest-blue:3000
PGRST_JWT_SECRET: your_super_secret_jwt_token_with_at_least_32_characters_long
DATABASE_URL: postgres://supabase_storage_admin:your_super_secret_jwt_token_with_at_least_32_characters_long@db-blue:5432/postgres
FILE_SIZE_LIMIT: 52428800
STORAGE_BACKEND: file
FILE_STORAGE_BACKEND_PATH: /var/lib/storage
TENANT_ID: stub
REGION: stub
GLOBAL_S3_BUCKET: stub
ENABLE_IMAGE_TRANSFORMATION: true
IMGPROXY_URL: http://imgproxy-blue:5001
volumes:
- supabase-storage-blue-data:/var/lib/storage
networks:
- supabase-blue
depends_on:
db-blue:
condition: service_healthy
imgproxy-blue:
image: darthsim/imgproxy:v3.8.0
restart: unless-stopped
environment:
IMGPROXY_BIND: ":5001"
IMGPROXY_LOCAL_FILESYSTEM_ROOT: /
IMGPROXY_USE_ETAG: true
IMGPROXY_ENABLE_WEBP_DETECTION: true
volumes:
- supabase-storage-blue-data:/var/lib/storage:ro
networks:
- supabase-blue
inbucket-blue:
image: inbucket/inbucket:3.0.3
restart: unless-stopped
ports:
- "55325:8025"
environment:
INBUCKET_WEB_ADDR: 0.0.0.0:8025
INBUCKET_POP3_ADDR: 0.0.0.0:1110
INBUCKET_SMTP_ADDR: 0.0.0.0:1025
networks:
- supabase-blue
networks:
supabase-blue:
driver: bridge
name: claude-collaboration-supabase-blue
volumes:
supabase-db-blue-data:
name: claude-collaboration-supabase-db-blue-data
supabase-storage-blue-data:
name: claude-collaboration-supabase-storage-blue-data
# version field is now deprecated in Docker Compose v2+
services:
postgres:
image: postgres:latest
container_name: claude-collab-postgres
environment:
POSTGRES_USER: claude
POSTGRES_PASSWORD: claude_collab_2025
POSTGRES_DB: claude_collaboration
ports:
- "5433:5432"
volumes:
- ./postgres-data:/var/lib/postgresql/data
- ./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U claude -d claude_collaboration"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
networks:
- claude-collab-net
redis:
image: redis:alpine
container_name: claude-collab-redis
ports:
- "6380:6379" # Changed to avoid conflict with existing Redis
volumes:
- ./redis-data:/data
networks:
- claude-collab-net
command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
restart: unless-stopped
websocket-server:
build: ./server
container_name: claude-collab-ws
ports:
- "8766:8765" # Changed to avoid conflict
environment:
DB_HOST: postgres
DB_PORT: 5432
DB_USER: claude
DB_PASSWORD: claude_collab_2025
DB_NAME: claude_collaboration
REDIS_HOST: redis
REDIS_PORT: 6379
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
networks:
- claude-collab-net
networks:
claude-collab-net:
driver: bridge
# Supabase Analytics Integration for Wayfinder Pro
# extends: docker-compose-wayfinder-optimized.yml
services:
# Supabase Storage Backend - Enterprise Analytics Buckets
supabase-storage-api:
image: public.ecr.aws/supabase/storage-api:v1.26.3
container_name: wayfinder-supabase-storage
ports:
- "9550:5000"
volumes:
- ./supabase-analytics/config/storage.yaml:/etc/supabase/storage.yaml:ro
- ./supabase-analytics/data/storage:/var/lib/storage
environment:
- DATABASE_URL=postgresql://wayfinder_admin:revolution_2025@wayfinder-analytics-db:5432/wayfinder_analytics
- ANON_KEY=${WAYFINDER_SUPABASE_ANON_KEY}
- SERVICE_ROLE_KEY=${WAYFINDER_SUPABASE_SERVICE_KEY}
- IMAGE_TRANSFORMATION_ENABLED=true
- IMAGE_SIZE_LIMIT=52428800 # 50MB
- STORAGE_S3_FORCE_PATH_STYLE=true
- STORAGE_S3_URL=http://wayfinder-supabase-minio:9000
- STORAGE_S3_ACCESS_KEY_ID=wayfinder_minio_admin
- STORAGE_S3_SECRET_KEY=revolution_2025
- STORAGE_S3_BUCKET=wayfinder-supabase
- STORAGE_S3_REGION=us-east-1
- GLOBAL_S3_BUCKET=wayfinder-global-analytics
- TENANT_ID_SEPARATION_ENABLED=true
depends_on:
wayfinder-analytics-db:
condition: service_healthy
wayfinder-supabase-minio:
condition: service_healthy
networks:
- wayfinder-net
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
interval: 30s
timeout: 10s
retries: 3
# Supabase MinIO - Dedicated Analytics Storage
wayfinder-supabase-minio:
image: minio/minio:latest
container_name: wayfinder-supabase-minio
ports:
- "9551:9000"
- "9552:9001"
volumes:
- ./supabase-analytics/data/minio:/data
environment:
- MINIO_ROOT_USER=wayfinder_minio_admin
- MINIO_ROOT_PASSWORD=revolution_2025
- MINIO_DOMAIN=analytics.wayfinder
- MINIO_SERVER_URL=https://analytics.wayfinder
command: server /data --console-address ":9001"
deploy:
resources:
limits:
cpus: '1'
memory: 2G
reservations:
cpus: '0.5'
memory: 1G
networks:
- wayfinder-net
restart: unless-stopped
# DuckDB + Supabase Analytics Engine
wayfinder-supabase-analytics-engine:
build:
context: ./supabase-analytics-engine
dockerfile: Dockerfile
container_name: wayfinder-supabase-analytics-engine
ports:
- "9553:8080"
depends_on:
wayfinder-analytics-engine:
condition: service_healthy
wayfinder-supabase-storage:
condition: service_healthy
volumes:
- ./supabase-analytics/data/analytics:/data
- ./supabase-analytics/config/analytics:/config
environment:
- PORT=8080
- LOCAL_DUCKDB_URL=http://wayfinder-analytics-engine:9094
- SUPABASE_URL=http://wayfinder-supabase-storage:5000
- SUPABASE_ANON_KEY=${WAYFINDER_SUPABASE_ANON_KEY}
- SUPABASE_SERVICE_KEY=${WAYFINDER_SUPABASE_SERVICE_KEY}
- WAYFINDER_MINIO_URL=http://wayfinder-minio:9000
- WAYFINDER_SUPABASE_MINIO_URL=http://wayfinder-supabase-minio:9000
- ANALYTICS_BUCKET_PATTERN=wayfinder-analytics-{date:%Y-%m}
- COMPRESSION_THRESHOLD=1048576 # 1MB
- OFFLOAD_INTERVAL=3600 # 1 hour
- MAX_BATCH_SIZE=50000
- PERFORMANCE_TRACKING=true
networks:
- wayfinder-net
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
interval: 30s
timeout: 15s
retries: 3
# Analytics Pipeline Orchestrator
wayfinder-analytics-pipeline:
build:
context: ./analytics-pipeline
dockerfile: Dockerfile
container_name: wayfinder-analytics-pipeline
ports:
- "9554:8081"
depends_on:
wayfinder-supabase-analytics-engine:
condition: service_healthy
volumes:
- ./supabase-analytics/data/pipeline:/data
- ./supabase-analytics/config/pipeline:/config
- /home/devops/bin:/scripts:ro
environment:
- COORDINATOR_URL=http://wayfinder-coordinator:9090
- ANALYTICS_ENGINE_URL=http://wayfinder-supabase-analytics-engine:8080
- MINIO_URL=http://wayfinder-minio:9000
- SUPABASE_MINIO_URL=http://wayfinder-supabase-minio:9000
- B2_BUCKET=daniels-consciousness-backup
- PIPELINE_INTERVAL=1800 # 30 minutes
- BATCH_SIZE=25000
- COMPRESSION_ENABLED=true
- OFFLOAD_STRATEGY=hybrid
- ESSENTIAL_PROJECTS=claude-collaboration,claude-guard,wayfinder-config
- STORAGE_TIERS=performance,critical,persistent
networks:
- wayfinder-net
restart: unless-stopped
# Analytics Dashboard
wayfinder-analytics-dashboard:
build:
context: ./analytics-dashboard
dockerfile: Dockerfile
container_name: wayfinder-analytics-dashboard
ports:
- "9555:3001"
depends_on:
wayfinder-supabase-analytics-engine:
condition: service_healthy
wayfinder-analytics-pipeline:
condition: service_started
volumes:
- ./supabase-analytics/data/dashboard:/data
- ./supabase-analytics/config/dashboard:/config
environment:
- REFRESH_INTERVAL=30000 # 30 seconds
- REALTIME_UPDATES=true
- DUCKDB_URL=http://wayfinder-analytics-engine:9094
- SUPABASE_URL=http://wayfinder-supabase-storage:5000
- PIPELINE_URL=http://wayfinder-analytics-pipeline:8081
- B2_BUCKET=daniels-consciousness-backup
- WAYFINDER_PRINTER_ENABLED=true
networks:
- wayfinder-net
restart: unless-stopped
networks:
wayfinder-net:
external: true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment