- contact@insightxtract.com
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.
docker compose version).docker-compose.yml and .env.example.
# provided during onboarding, or from your private mirror git clone https://get.insightxtract.com/deploy/compose.git insightxtract cd insightxtract cp .env.example .env
.env (database password, LLM provider + key, an admin email). See the reference below.docker compose pull
docker compose up -d
docker compose logs -f api # watch it come up & run migrationshttp://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.
A single file wires the stack together. The workers are the only service you’ll typically scale.
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: {} }
# --- 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.
| Task | Command |
|---|---|
| Scale workers | docker compose up -d --scale worker=6 |
| Tail logs | docker compose logs -f worker |
| Upgrade | Bump IX_VERSION → docker compose pull && up -d (migrations run automatically) |
| Back up the DB | docker compose exec db mysqldump -uroot -p xtract > backup.sql |
| Back up documents | Snapshot the objdata volume, or use managed object storage with lifecycle rules |
| Health check | curl localhost:8000/api/health |
| Stop / reset | docker compose down (add -v to wipe data) |
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.