customercore / docker-compose.yml
Saibalaji Namburi
feat(k8s): deploy api to kind multinode cluster and verify with adversarial red-teaming simulator
5553f71
Raw
History Blame Contribute Delete
5.3 kB
version: "3.8"
# ============================================================
# CustomerCore Local Infrastructure Stack
# Start: docker compose up -d
# Stop: docker compose down
# Logs: docker compose logs -f <service>
# ============================================================
networks:
customercore:
driver: bridge
volumes:
redpanda_data:
minio_data:
chroma_data:
redis_data:
services:
# ----------------------------------------------------------
# REDPANDA β€” Kafka-compatible streaming broker
# Replaces Kafka with no JVM, no ZooKeeper, single binary
# Broker listens on: localhost:9092 (internal: 29092)
# ----------------------------------------------------------
redpanda:
image: docker.redpanda.com/redpandadata/redpanda:latest
container_name: customercore_redpanda
command:
- redpanda
- start
- --kafka-addr internal://0.0.0.0:29092,external://0.0.0.0:9092
- --advertise-kafka-addr internal://redpanda:29092,external://localhost:9092
- --pandaproxy-addr internal://0.0.0.0:28082,external://0.0.0.0:8082
- --advertise-pandaproxy-addr internal://redpanda:28082,external://localhost:8082
- --schema-registry-addr internal://0.0.0.0:28081,external://0.0.0.0:8081
- --rpc-addr redpanda:33145
- --advertise-rpc-addr redpanda:33145
- --mode dev-container
- --smp 1
- --default-log-level=warn
volumes:
- redpanda_data:/var/lib/redpanda/data
networks:
- customercore
ports:
- "9092:9092" # Kafka API β€” Python producers connect here
- "8081:8081" # Schema Registry
- "8082:8082" # HTTP Proxy (Pandaproxy)
healthcheck:
test: ["CMD-SHELL", "rpk cluster health | grep -E 'Healthy|true' || exit 1"]
interval: 15s
timeout: 10s
retries: 5
# ----------------------------------------------------------
# REDPANDA CONSOLE β€” Visual web dashboard for Redpanda
# Browse topics, inspect messages, debug producers
# Dashboard: http://localhost:8080
# ----------------------------------------------------------
console:
image: docker.redpanda.com/redpandadata/console:latest
container_name: customercore_console
environment:
CONFIG_FILEPATH: /tmp/redpanda-console-config.yaml
entrypoint: /bin/sh
command: >
-c 'printf "kafka:\n brokers: [\"redpanda:29092\"]\n" > /tmp/redpanda-console-config.yaml && /app/console'
networks:
- customercore
ports:
- "8080:8080" # Web dashboard
depends_on:
- redpanda
# ----------------------------------------------------------
# MINIO β€” S3-compatible local object storage
# Stores Apache Iceberg Parquet data files
# Console: http://localhost:9001 (admin/password: minioadmin)
# API: http://localhost:9000
# ----------------------------------------------------------
minio:
image: minio/minio:latest
container_name: customercore_minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
volumes:
- minio_data:/data
networks:
- customercore
ports:
- "9000:9000" # S3 API
- "9001:9001" # MinIO web console
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 30s
timeout: 20s
retries: 3
# ----------------------------------------------------------
# CHROMADB β€” Vector database for RAG retrieval
# Stores BGE-M3 embeddings of support tickets and KB articles
# API: http://localhost:8000
# ----------------------------------------------------------
chromadb:
image: chromadb/chroma:latest
container_name: customercore_chromadb
volumes:
- chroma_data:/chroma/chroma
networks:
- customercore
ports:
- "8000:8000" # ChromaDB HTTP API
environment:
- IS_PERSISTENT=TRUE
- ALLOW_RESET=TRUE
# ----------------------------------------------------------
# REDIS β€” In-memory cache and rate limiter
# L1 exact-match semantic cache + per-tenant rate limiting
# ----------------------------------------------------------
redis:
image: redis:alpine
container_name: customercore_redis
command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
networks:
- customercore
ports:
- "6379:6379" # Redis default port
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
# ----------------------------------------------------------
# OPENTELEMETRY COLLECTOR β€” Central telemetry pipeline
# Scrapes Prometheus metrics from FastAPI /metrics endpoint
# Forwards to Grafana Cloud (metrics, logs, traces)
# ----------------------------------------------------------
otel-collector:
image: otel/opentelemetry-collector-contrib:latest
container_name: customercore_otel
volumes:
- ./infra/otel-collector.yaml:/etc/otelcol-contrib/config.yaml
networks:
- customercore
ports:
- "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver
- "8888:8888" # OTel internal metrics
depends_on:
- redpanda