# docker-compose.yml - DocTR REST API
# Usage:
#   CPU:  docker compose up ocr-cpu
#   GPU:  docker compose up ocr-gpu
#
# Port: 8003

services:
  # CPU-only service
  ocr-cpu:
    image: seryus.ddns.net/unir/doctr-cpu:latest
    container_name: doctr-cpu
    ports:
      - "8003:8000"
    volumes:
      - ../dataset:/app/dataset:ro
      - ../debugset:/app/debugset:rw
      - doctr-cache:/root/.cache/doctr
    environment:
      - PYTHONUNBUFFERED=1
      - DOCTR_DET_ARCH=db_resnet50
      - DOCTR_RECO_ARCH=crnn_vgg16_bn
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 180s

  # GPU service (requires NVIDIA Container Toolkit)
  ocr-gpu:
    image: seryus.ddns.net/unir/doctr-gpu:latest
    container_name: doctr-gpu
    ports:
      - "8003:8000"
    volumes:
      - ../dataset:/app/dataset:ro
      - ../debugset:/app/debugset:rw
      - doctr-cache:/root/.cache/doctr
    environment:
      - PYTHONUNBUFFERED=1
      - CUDA_VISIBLE_DEVICES=0
      - DOCTR_DET_ARCH=db_resnet50
      - DOCTR_RECO_ARCH=crnn_vgg16_bn
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 180s

volumes:
  doctr-cache:
    name: doctr-model-cache
