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
:::caution Production
JWT_SECRETmust be replaced with a long random string- Change the default MySQL / MinIO passwords
- Set
CORS_ORIGINSto your real domain :::
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: pings MySQL / Redis / MinIO / Milvus, returns 503 if any is down
curl http://localhost:8080/ready
Use /ready for Docker / K8s readiness checks so traffic is only routed when all dependencies are up.