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