AI-markdown/docker-compose.yml

125 lines
3.6 KiB
YAML

# ============================================================
# AI Markdown Demo — MarkItDown vs Docling
# ============================================================
# Naming convention: <layer>-<service>
#
# ui :8484 — Comparison UI (nginx)
# api-markitdown:8282 — MarkItDown API (Microsoft)
# api-docling :8383 — Docling API (IBM)
# db-markitdown :5432 — PostgreSQL for markitdown
# db-docling :— — PostgreSQL for docling (internal only)
# db-admin :5050 — Adminer
# ============================================================
x-healthcheck-defaults: &healthcheck-defaults
interval: 10s
timeout: 5s
retries: 5
x-service-defaults: &service-defaults
restart: unless-stopped
networks:
- app-network
# ==========================
# Services
# ==========================
services:
# --- UI layer ---------------------------------------------------
ui:
image: caddy:alpine
<<: *service-defaults
ports:
- "8484:80"
volumes:
- ./frontend/Caddyfile:/etc/caddy/Caddyfile:ro
- ./frontend:/srv:ro
# --- API layer --------------------------------------------------
api-markitdown:
build:
context: ./markitdown-service
<<: *service-defaults
ports:
- "8282:8000"
env_file: .env
environment:
DATABASE_URL: postgresql://${POSTGRES_USER:-admin}:${POSTGRES_PASSWORD:-admin}@db-markitdown:5432/${POSTGRES_DB:-markitdown}
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-}
OLLAMA_MODEL: ${OLLAMA_MODEL:-llava}
depends_on:
db-markitdown:
condition: service_healthy
api-docling:
build:
context: ./docling-service
<<: *service-defaults
ports:
- "8383:8000"
env_file: .env
environment:
DATABASE_URL: postgresql://${POSTGRES_USER:-admin}:${POSTGRES_PASSWORD:-admin}@db-docling:5432/docling
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL:-}
OLLAMA_MODEL: ${OLLAMA_MODEL:-llava}
depends_on:
db-docling:
condition: service_healthy
# --- Database layer ---------------------------------------------
db-markitdown:
image: postgres:16-alpine
<<: *service-defaults
env_file: .env
environment:
POSTGRES_DB: ${POSTGRES_DB:-markitdown}
POSTGRES_USER: ${POSTGRES_USER:-admin}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin}
volumes:
- db_markitdown_data:/var/lib/postgresql/data
- ./db/init_markitdown.sql:/docker-entrypoint-initdb.d/init_markitdown.sql:ro
ports:
- "5432:5432"
healthcheck:
<<: *healthcheck-defaults
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-admin} -d ${POSTGRES_DB:-markitdown}"]
db-docling:
image: postgres:16-alpine
<<: *service-defaults
env_file: .env
environment:
POSTGRES_DB: docling
POSTGRES_USER: ${POSTGRES_USER:-admin}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin}
volumes:
- db_docling_data:/var/lib/postgresql/data
- ./db/init_docling.sql:/docker-entrypoint-initdb.d/init_markitdown.sql:ro
healthcheck:
<<: *healthcheck-defaults
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-admin} -d docling"]
# --- Admin layer ------------------------------------------------
db-admin:
image: adminer:4.8.1
<<: *service-defaults
ports:
- "5050:8080"
environment:
ADMINER_DEFAULT_SERVER: db-markitdown
depends_on:
db-markitdown:
condition: service_healthy
# ==========================
# Infrastructure
# ==========================
networks:
app-network:
driver: bridge
volumes:
db_markitdown_data:
db_docling_data: