# ───────────────────────────────────────────────────────────────────────────── # IPL MLOps Pipeline — docker-compose # # Services: # api FastAPI prediction service :8000 # monitor Drift detection (runs every 5 min) # dashboard Streamlit monitoring dashboard :8501 # # Shared volume: ./data/ (predictions.db, drift_status.json, drift_history.json) # Artefacts: ./api/artefacts/ (model.pkl, encoders, feature list) # # Quick start: # 1. cd training && python train.py # generates api/artefacts/ # 2. docker-compose up --build # 3. Open http://localhost:8501 # dashboard # Open http://localhost:8000/docs # API swagger # ───────────────────────────────────────────────────────────────────────────── services: api: build: ./api ports: - "8000:8000" volumes: - ./api/artefacts:/app/artefacts:ro - ./data:/app/data environment: - PYTHONUNBUFFERED=1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 restart: unless-stopped monitor: build: ./monitoring volumes: - ./api/artefacts:/app/artefacts:ro - ./data:/app/data environment: - DRIFT_INTERVAL_SECONDS=300 - PYTHONUNBUFFERED=1 depends_on: - api restart: unless-stopped dashboard: build: ./dashboard ports: - "8501:8501" volumes: - ./data:/app/data environment: - DATA_DIR=/app/data - API_URL=http://api:8000 - PYTHONUNBUFFERED=1 depends_on: - api restart: unless-stopped