Docker Compose Deployment
ollmo ships a complete docker-compose orchestration — one command brings up the full stack.
One-command startup
cp .env.example .env
# Edit .env — at minimum change JWT_SECRET
make up-full
up-full builds and starts: infrastructure (MySQL / Redis / MinIO / Milvus) + API server + Asynq worker + Web.
Environment variables
Key settings in .env:
SERVER_PORT=8080
CORS_ORIGINS=http://localhost:3001,http://localhost:3000
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_USER=ollmo
MYSQL_PASSWORD=ollmo_dev_pwd
MYSQL_DATABASE=ollmo
REDIS_HOST=redis
REDIS_PORT=6379
MINIO_ENDPOINT=minio:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET=ollmo
MILVUS_HOST=milvus
MILVUS_PORT=19530
# Must change in production
JWT_SECRET=change_me_to_a_long_random_string_in_production
JWT_EXPIRE_HOURS=168
# Master key for encrypting stored credentials (LLM provider API keys).
# Independent from JWT_SECRET so rotating JWT_SECRET never breaks decryption.
# Generate with: openssl rand -hex 32
# ENCRYPTION_KEY=
:::caution Production
JWT_SECRETmust be replaced with a long random string- Change the default MySQL / MinIO passwords
- Set
CORS_ORIGINSto your real domain - Put an Nginx or Caddy reverse proxy in front of Web / API and configure HTTPS :::
Production checklist
| Item | Notes |
|---|---|
| HTTPS | Terminate TLS at the reverse proxy; can be waived in internal-network environments |
| Backups | Back up MySQL and MinIO data on a schedule |
| Resources | Milvus has a high memory footprint — 8G+ RAM recommended; MinerU GPU parsing additionally needs a GPU |
| Monitoring | Wire the /health and /ready probes into your existing monitoring |
| Upgrades | Back up data before upgrading; run ollmo migrate (or make migrate) before restarting services |
Configuration priority
| Source | Purpose |
|---|---|
server/config.yaml | Backend defaults (DB, Redis, MinIO, Milvus, MinerU, JWT) |
.env | Environment overrides for Docker deployment |
| Web UI → Settings | Per-tenant LLM / Embedding / Rerank providers |
| Web UI → KB Settings | Per-KB Rerank override |
| Web UI → Agent Canvas | Per-KB Agent configuration |
Model selection priority: KB-level config → tenant default → config.yaml fallback.
Health checks
# Liveness probe: returns as long as the process is serving
curl http://localhost:8080/health
# Readiness probe: checks MySQL / Redis / MinIO / Milvus one by one, returns 503 if any is down
curl http://localhost:8080/ready
For Docker / K8s readiness checks, use /ready so traffic is only routed once all dependencies are ready.