version: "3.9" services: # ── FastAPI backend ──────────────────────────────────────────────────────── backend: build: ./backend volumes: - ./data:/app/data # SQLite-база и модель ports: - "8000:8000" # API-документация: http://localhost:8000/docs environment: - DB_PATH=/app/data/edr.db restart: unless-stopped healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/stats')"] interval: 10s timeout: 5s retries: 10 start_period: 5s # ── Python мониторинг-агент ──────────────────────────────────────────────── agent: build: ./agent volumes: - ./data:/app/data # общий том с моделью и БД environment: - BACKEND_URL=http://backend:8000 - COLLECT_INTERVAL=5 - MODEL_PATH=/app/data/model.pkl - DATASET_PATH=/app/data/UNSW_NB15_training-set.csv depends_on: backend: condition: service_healthy pid: host # видит процессы хоста privileged: true # psutil net_connections требует root restart: unless-stopped # ── React-дашборд (nginx) ────────────────────────────────────────────────── frontend: build: ./frontend # multi-stage: node build → nginx ports: - "3000:3000" # Dashboard: http://localhost:3000 depends_on: - backend restart: unless-stopped volumes: {}