File size: 2,592 Bytes
1a3db60 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | # ============================================================================
# KRONECTOR β Docker Compose
# ============================================================================
# Services:
# api β FastAPI prediction server (port 8000)
# mlflow β MLflow tracking server (port 5000)
# nginx β Reverse proxy (ports 80/443)
#
# Usage:
# docker compose up -d # Start all services
# docker compose logs -f api # Follow API logs
# docker compose down # Stop everything
# ============================================================================
services:
# --------------------------------------------------------------------------
# FastAPI β Core prediction API
# --------------------------------------------------------------------------
api:
build:
context: .
target: production
container_name: kronector-api
ports:
- "8000:8000"
env_file:
- .env
volumes:
- model_data:/app/mlruns
- app_data:/app/data_output
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
restart: unless-stopped
networks:
- kronector-net
# --------------------------------------------------------------------------
# MLflow β Experiment tracking & model registry
# --------------------------------------------------------------------------
mlflow:
build:
context: .
target: production
container_name: kronector-mlflow
command: >
mlflow server
--host 0.0.0.0
--port 5000
--backend-store-uri sqlite:///app/mlflow.db
--default-artifact-root /app/mlruns
ports:
- "5000:5000"
volumes:
- model_data:/app/mlruns
- mlflow_db:/app/mlflow_data
restart: unless-stopped
networks:
- kronector-net
# --------------------------------------------------------------------------
# Nginx β Reverse proxy (optional, for custom domain / HTTPS)
# --------------------------------------------------------------------------
nginx:
image: nginx:alpine
container_name: kronector-proxy
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
api:
condition: service_healthy
restart: unless-stopped
networks:
- kronector-net
volumes:
model_data:
driver: local
app_data:
driver: local
mlflow_db:
driver: local
networks:
kronector-net:
driver: bridge
|