Deployment
Self-Hosted
Deploy QANATIX on your own infrastructure with Docker Compose.
Self-Hosted Deployment
Run QANATIX on your own infrastructure. Full control, air-gapped support, data never leaves your network.
Prerequisites
- Docker and Docker Compose v2
- 4 GB RAM minimum (8 GB recommended)
- GPU recommended for large datasets (see Embedding Model for hardware guidance)
Docker Compose
See Installation for the full docker-compose.yml.
Production checklist
Before going live:
- Set strong passwords for Postgres and Redis
- Set
API_KEY_SALTto a random 32+ character string - Set
CONNECTOR_ENCRYPTION_KEYfor database connector credential encryption - Set
DEPLOYMENT_MODE=self_hosted - Set up backup for Postgres volumes
- Put a reverse proxy (nginx/Caddy) in front for TLS
- Set
CORS_ORIGINSto your domain(s)
Scaling
| Component | Scaling strategy |
|---|---|
| API | Horizontal — run multiple qanatix-api containers behind a load balancer |
| Worker | Horizontal — run multiple qanatix-worker containers (SAQ distributes jobs) |
| Postgres | Vertical — single primary, add read replicas for search queries |
| Redis | Single instance is sufficient for most workloads |
| Qdrant | Horizontal — Qdrant supports distributed mode |
Embedding
BGE-M3 runs locally — no API keys needed. It produces dense, sparse, and ColBERT vectors simultaneously for maximum search quality. CPU works fine for small-medium datasets; GPU recommended for >100K entities.
| GPU | VRAM | Throughput | Cost |
|---|---|---|---|
| NVIDIA T4 | 16 GB | ~100 embeddings/sec | Budget option |
| NVIDIA L4 | 24 GB | ~300 embeddings/sec | Best value |
| NVIDIA A10G | 24 GB | ~300 embeddings/sec | Cloud standard |
Air-gapped
For classified environments with no internet:
- Pre-download the BGE-M3 model weights on an internet-connected machine
- Pre-pull all Docker images to an internal registry
- No outbound network required after setup
See Air-gapped for detailed setup.
See Configuration for all environment variables.