Deploy · Developer

Run InsightXtract with Docker Compose

The whole platform on your laptop or a single VM in a few minutes — the fastest way to evaluate, develop against the API, or run a small workload.

Docker Compose brings up every service — the API, the console, the agentic extraction workers, MySQL, and the vector index — on one host. It’s the recommended path for evaluation, local development, demos, and low-volume production on a single VM.

Prerequisites

  • Docker Engine 24+ and the Compose plugin (docker compose version).
  • ~4 CPU / 8 GB RAM free (workers are the hungry part).
  • Access to your container registry (we provide the image references and a pull token), or the source to build locally.
  • An LLM endpoint: an Anthropic or OpenAI API key, or a reachable Bedrock/Vertex/Azure OpenAI/custom endpoint.

Quickstart

  1. Get the deployment bundle. It contains docker-compose.yml and .env.example.
    shell
    # provided during onboarding, or from your private mirror
    git clone https://get.insightxtract.com/deploy/compose.git insightxtract
    cd insightxtract
    cp .env.example .env
  2. Set your secrets in .env (database password, LLM provider + key, an admin email). See the reference below.
  3. Bring it up.
    shell
    docker compose pull
    docker compose up -d
    docker compose logs -f api        # watch it come up & run migrations
  4. Open the console at http://localhost:8080 and sign in with the bootstrap admin from your .env. The API is at http://localhost:8000.

That’s it. Migrations, the default document classes, and reference data seed automatically on first boot. Upload a document and run your first extraction from the console, or hit POST /api/extract with your API key.

The compose file

A single file wires the stack together. The workers are the only service you’ll typically scale.

docker-compose.yml
services:
  web:                          # console (static React via nginx)
    image: insightxtract/console:${IX_VERSION:-latest}
    ports: ["8080:80"]
    environment: { API_URL: "http://localhost:8000/api" }
    depends_on: [api]

  api:                          # FastAPI — auth, projects, REST API
    image: insightxtract/api:${IX_VERSION:-latest}
    ports: ["8000:8000"]
    env_file: .env
    depends_on: [db, vector]

  worker:                       # agentic extraction workers — scale this
    image: insightxtract/api:${IX_VERSION:-latest}
    command: ["ix-worker"]
    env_file: .env
    deploy: { replicas: 2 }
    depends_on: [db, vector]

  db:                           # MySQL 8 — metadata & audit
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: xtract
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    volumes: ["dbdata:/var/lib/mysql"]

  vector:                       # vector index for RAG / semantic lookup
    image: insightxtract/vector:${IX_VERSION:-latest}
    volumes: ["vecdata:/data"]

# object store: uses a local MinIO by default; point OBJECT_STORE_* at
# S3/Blob/GCS/OCI to use managed storage instead (see .env).
  minio:
    image: minio/minio
    command: ["server", "/data"]
    volumes: ["objdata:/data"]

volumes: { dbdata: {}, vecdata: {}, objdata: {} }

Environment (.env)

.env
# --- version ---
IX_VERSION=1.8.0

# --- database ---
DB_PASSWORD=change-me-strong
DATABASE_URL=mysql+pymysql://root:change-me-strong@db:3306/xtract

# --- object store (local MinIO by default) ---
OBJECT_STORE_ENDPOINT=http://minio:9000
OBJECT_STORE_BUCKET=insightxtract
OBJECT_STORE_KEY=minioadmin
OBJECT_STORE_SECRET=minioadmin

# --- model: pick ONE provider ---
LLM_PROVIDER=anthropic        # anthropic | openai | bedrock | vertex | azure_openai | custom
LLM_MODEL=claude-sonnet-5
ANTHROPIC_API_KEY=sk-ant-...

# --- workers ---
WORKER_CONCURRENCY=4

# --- bootstrap admin (first boot only) ---
ADMIN_EMAIL=admin@yourco.com
ADMIN_PASSWORD=change-me

Don’t ship these defaults. The local MinIO and root MySQL password are for evaluation. For anything beyond a demo, point OBJECT_STORE_* and DATABASE_URL at managed services and load secrets from your vault — or move to the cloud Terraform deployment.

Day-2 operations

TaskCommand
Scale workersdocker compose up -d --scale worker=6
Tail logsdocker compose logs -f worker
UpgradeBump IX_VERSIONdocker compose pull && up -d (migrations run automatically)
Back up the DBdocker compose exec db mysqldump -uroot -p xtract > backup.sql
Back up documentsSnapshot the objdata volume, or use managed object storage with lifecycle rules
Health checkcurl localhost:8000/api/health
Stop / resetdocker compose down (add -v to wipe data)

When to graduate to the cloud

Compose is perfect for one host. Move to the cloud deployment when you need any of: high availability across zones, autoscaling under bursty submission volume, managed backups and point-in-time recovery, or SSO and network isolation to satisfy security review. The images are identical — only the orchestration changes.