Self-host with Docker
Docker mode runs two services:
- App (control plane): UI + scheduler/state machine + SQLite + SSE
- Runner (execution plane): isolated execution (starts sandbox containers and streams logs back)
Quick start
Section titled “Quick start”-
Download
docker-compose.release.ymland.env.productionTerminal window curl -fsSL -o docker-compose.release.yml https://raw.githubusercontent.com/obiscr/maia/main/docker-compose.release.ymlcurl -fsSL -o .env.production https://raw.githubusercontent.com/obiscr/maia/main/env.example -
Edit
.env.productionand setRUNNER_TOKEN..env.production RUNNER_TOKEN=your-token -
Start
Terminal window docker compose -f docker-compose.release.yml --env-file .env.production up -d
Set up
Section titled “Set up” Initial setup Open http://localhost:3690 to run the initial setup wizard.
Get updates
Section titled “Get updates”When you use docker-compose.release.yml (pre-built image) to deploy, updates usually involve “pulling new image → rebuilding and restarting”:
docker compose -f docker-compose.release.yml --env-file .env.production pulldocker compose -f docker-compose.release.yml --env-file .env.production up -d --remove-orphansDatabase migration
Section titled “Database migration”In Docker mode, database migrations are handled by a one-time migrator service. When you pull a new image and restart the container:
- The new image contains the latest migration files
- The
migratorwill runprisma migrate deploybefore themaiacontainer starts - Already applied migrations are skipped
The entire process requires no manual intervention - Maia automatically handles database version upgrades.
Verify migration status
Section titled “Verify migration status”If you need to confirm that migrations were successfully applied, you can view the container logs:
docker compose -f docker-compose.release.yml --env-file .env.production ps -adocker compose -f docker-compose.release.yml --env-file .env.production logs migrator --no-log-prefixThe logs will show detailed information about migration execution.