# 🐳 CBD Universal Database - Production Docker Compose

version: '3.8'

services:
  # CBD Core Database Service
  cbd-core:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: cbd-universal-database
    restart: unless-stopped
    ports:
      - "4180:4180"
    environment:
      - NODE_ENV=production
      - CBD_LOG_LEVEL=info
      - CBD_CLUSTER_MODE=true
      - CBD_SECURITY_LEVEL=enterprise
    volumes:
      - cbd_data:/app/data
      - cbd_logs:/app/logs
    networks:
      - cbd_network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:4180/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  # CBD Collaboration Service
  cbd-collaboration:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: cbd-collaboration-service
    restart: unless-stopped
    ports:
      - "4600:4600"
    environment:
      - NODE_ENV=production
      - SERVICE_TYPE=collaboration
    volumes:
      - cbd_collaboration_data:/app/data
    networks:
      - cbd_network
    depends_on:
      - cbd-core
    command: ["node", "cbd-collaboration-service.cjs"]

  # CBD AI Analytics Engine
  cbd-analytics:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: cbd-ai-analytics
    restart: unless-stopped
    ports:
      - "4700:4700"
    environment:
      - NODE_ENV=production
      - SERVICE_TYPE=analytics
    volumes:
      - cbd_analytics_data:/app/data
      - cbd_models:/app/models
    networks:
      - cbd_network
    depends_on:
      - cbd-core
    command: ["node", "cbd-ai-analytics-engine.cjs"]

  # CBD GraphQL Gateway
  cbd-graphql:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: cbd-graphql-gateway
    restart: unless-stopped
    ports:
      - "4800:4800"
    environment:
      - NODE_ENV=production
      - SERVICE_TYPE=graphql
    networks:
      - cbd_network
    depends_on:
      - cbd-core
    command: ["node", "cbd-graphql-gateway.cjs"]

  # Nginx Load Balancer
  cbd-nginx:
    image: nginx:alpine
    container_name: cbd-load-balancer
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    networks:
      - cbd_network
    depends_on:
      - cbd-core
      - cbd-collaboration
      - cbd-analytics
      - cbd-graphql

  # Redis for Caching and Session Management
  cbd-redis:
    image: redis:7-alpine
    container_name: cbd-redis
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - cbd_redis_data:/data
    networks:
      - cbd_network
    command: redis-server --appendonly yes --maxmemory 1gb --maxmemory-policy allkeys-lru

  # PostgreSQL for Metadata Storage
  cbd-postgres:
    image: postgres:15-alpine
    container_name: cbd-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_DB=cbd_metadata
      - POSTGRES_USER=cbd_admin
      - POSTGRES_PASSWORD=${CBD_POSTGRES_PASSWORD:-cbd_secure_pass_2025}
    volumes:
      - cbd_postgres_data:/var/lib/postgresql/data
      - ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    networks:
      - cbd_network
    ports:
      - "5432:5432"

  # Monitoring - Prometheus
  prometheus:
    image: prom/prometheus:latest
    container_name: cbd-prometheus
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - prometheus_data:/prometheus
    networks:
      - cbd_network
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'

  # Monitoring - Grafana
  grafana:
    image: grafana/grafana:latest
    container_name: cbd-grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${CBD_GRAFANA_PASSWORD:-cbd_admin_2025}
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/dashboards:/etc/grafana/provisioning/dashboards:ro
      - ./grafana/datasources:/etc/grafana/provisioning/datasources:ro
    networks:
      - cbd_network
    depends_on:
      - prometheus

# Networks
networks:
  cbd_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

# Volumes
volumes:
  cbd_data:
    driver: local
  cbd_logs:
    driver: local
  cbd_collaboration_data:
    driver: local
  cbd_analytics_data:
    driver: local
  cbd_models:
    driver: local
  cbd_redis_data:
    driver: local
  cbd_postgres_data:
    driver: local
  prometheus_data:
    driver: local
  grafana_data:
    driver: local
