version: '3.8' services: # NATS JetStream for message bus nats: image: nats:2.10-alpine container_name: sentiment-nats command: [-js, -m, "8222"] ports: - "4222:4222" # Client - "8222:8222" # Monitoring volumes: - nats-data:/data restart: unless-stopped # ClickHouse for analytical storage clickhouse: image: clickhouse/clickhouse-server:24.3-alpine container_name: sentiment-clickhouse environment: - CLICKHOUSE_DB=dolphin - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 - CLICKHOUSE_USER=default - CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD} ports: - "8123:8123" # HTTP - "9000:9000" # Native volumes: - clickhouse-data:/var/lib/clickhouse - ./clickhouse-config:/etc/clickhouse-server/config.d ulimits: nofile: soft: 262144 hard: 262144 restart: unless-stopped # Hazelcast for hot cache hazelcast: image: hazelcast/hazelcast:5.3-slim container_name: sentiment-hazelcast environment: - HZ_CLUSTERNAME=dolphin - HZ_NETWORK_PUBLICADDRESS=localhost:5701 ports: - "5701:5701" volumes: - hazelcast-data:/data restart: unless-stopped # Prefect for workflow orchestration prefect: image: prefecthq/prefect:3-python3.12 container_name: sentiment-prefect command: prefect server start --host 0.0.0.0 ports: - "4200:4200" environment: - PREFECT_API_URL=http://localhost:4200/api - PREFECT_UI_URL=http://localhost:4200 volumes: - prefect-data:/root/.prefect restart: unless-stopped # Prefect worker for flow execution prefect-worker: image: prefecthq/prefect:3-python3.12 container_name: sentiment-prefect-worker command: prefect worker start --pool sentiment-engine environment: - PREFECT_API_URL=http://prefect:4200/api depends_on: - prefect restart: unless-stopped volumes: nats-data: clickhouse-data: hazelcast-data: prefect-data: latticedb-data: networks: default: name: sentiment-network