version: '3.8' services: foxhunt-core: build: context: ../../core dockerfile: Dockerfile args: RUST_VERSION: 1.75.0 container_name: foxhunt-core-dev ports: - "8080:8080" - "9090:9090" # Metrics volumes: - ../../core/src:/app/src:ro - ./config/dev.toml:/app/config/config.toml:ro - ../monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro environment: - RUST_LOG=debug - FOXHUNT_ENV=development - FOXHUNT_CONFIG=/app/config/config.toml networks: - foxhunt-net cpuset: "2-5" # Simulate production CPU affinity mem_limit: 4g ulimits: memlock: soft: -1 hard: -1 restart: unless-stopped foxhunt-tli: build: context: ../../tli dockerfile: Dockerfile args: RUST_VERSION: 1.75.0 container_name: foxhunt-tli-dev ports: - "50051:50051" # gRPC port - "8081:8081" # Health check port volumes: - ../../tli/src:/app/src:ro - ./config/dev.toml:/app/config/config.toml:ro environment: - RUST_LOG=debug - FOXHUNT_CORE_ENDPOINT=http://foxhunt-core:8080 - FOXHUNT_CONFIG=/app/config/config.toml - FOXHUNT_ENV=development depends_on: - foxhunt-core networks: - foxhunt-net cpuset: "0-1" # Critical path isolation mem_limit: 2g restart: unless-stopped foxhunt-ml: build: context: ../../ml dockerfile: Dockerfile args: RUST_VERSION: 1.75.0 CUDA_VERSION: "12.1" container_name: foxhunt-ml-dev ports: - "8082:8082" volumes: - ../../ml/src:/app/src:ro - ./config/dev.toml:/app/config/config.toml:ro - /tmp/.X11-unix:/tmp/.X11-unix:rw environment: - RUST_LOG=debug - FOXHUNT_CORE_ENDPOINT=http://foxhunt-core:8080 - FOXHUNT_CONFIG=/app/config/config.toml - CUDA_VISIBLE_DEVICES=0 - FOXHUNT_ENV=development depends_on: - foxhunt-core networks: - foxhunt-net cpuset: "6-9" # GPU-enabled cores mem_limit: 8g restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] foxhunt-risk: build: context: ../../risk dockerfile: Dockerfile args: RUST_VERSION: 1.75.0 container_name: foxhunt-risk-dev ports: - "8083:8083" volumes: - ../../risk/src:/app/src:ro - ./config/dev.toml:/app/config/config.toml:ro environment: - RUST_LOG=debug - FOXHUNT_CORE_ENDPOINT=http://foxhunt-core:8080 - FOXHUNT_CONFIG=/app/config/config.toml - FOXHUNT_ENV=development depends_on: - foxhunt-core networks: - foxhunt-net cpuset: "10-11" mem_limit: 4g restart: unless-stopped foxhunt-data: build: context: ../../data dockerfile: Dockerfile args: RUST_VERSION: 1.75.0 container_name: foxhunt-data-dev ports: - "8084:8084" volumes: - ../../data/src:/app/src:ro - ./config/dev.toml:/app/config/config.toml:ro - ./secrets/polygon.key:/app/secrets/polygon.key:ro environment: - RUST_LOG=debug - FOXHUNT_CONFIG=/app/config/config.toml - POLYGON_API_KEY_FILE=/app/secrets/polygon.key - FOXHUNT_ENV=development networks: - foxhunt-net cpuset: "12-15" mem_limit: 6g restart: unless-stopped # Monitoring Infrastructure prometheus: image: prom/prometheus:latest container_name: foxhunt-prometheus-dev ports: - "9091:9090" volumes: - ../monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ../monitoring/alerts:/etc/prometheus/alerts:ro command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--storage.tsdb.retention.time=24h' - '--web.enable-lifecycle' networks: - foxhunt-net restart: unless-stopped grafana: image: grafana/grafana:latest container_name: foxhunt-grafana-dev ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - ../monitoring/grafana/datasources:/etc/grafana/provisioning/datasources:ro - ../monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro - grafana-storage:/var/lib/grafana networks: - foxhunt-net restart: unless-stopped # Log aggregation loki: image: grafana/loki:latest container_name: foxhunt-loki-dev ports: - "3100:3100" volumes: - ../monitoring/loki-config.yml:/etc/loki/local-config.yaml:ro command: -config.file=/etc/loki/local-config.yaml networks: - foxhunt-net restart: unless-stopped volumes: grafana-storage: networks: foxhunt-net: driver: bridge ipam: driver: default config: - subnet: 172.20.0.0/16