Skip to main content

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_SECRET must be replaced with a long random string
  • Change the default MySQL / MinIO passwords
  • Set CORS_ORIGINS to your real domain :::

Configuration priority

SourcePurpose
server/config.yamlBackend defaults (DB, Redis, MinIO, Milvus, MinerU, JWT)
.envEnvironment overrides for Docker deployment
Web UI → SettingsPer-tenant LLM / Embedding / Rerank providers
Web UI → KB SettingsPer-KB rerank override
Web UI → Agent CanvasPer-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.