Docker Compose Self-Hosting
Start, inspect, and validate the current Planisfy Docker Compose stack.
Docker Compose Self-Hosting
Run these commands from the repository root.
Start the stack
cp .env.example .env
scripts/self-host-setup.sh
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile with-minio up -d
pnpm db:migrateThe with-minio profile starts local S3-compatible storage and initializes the artifact bucket. It is the recommended self-host storage path because it matches production object-storage behavior and supports direct root-agent artifact uploads.
Default ports
| Service | URL |
|---|---|
| Marketing | http://localhost:3000 |
| Console | http://localhost:3001 |
| Docs | http://localhost:3002 |
| Admin | http://localhost:3003 |
| API | http://localhost:4000 |
| Martin | http://localhost:3005 |
| Valhalla | http://localhost:3007 |
| Pelias | http://localhost:3100 |
| Elevation | http://localhost:4011 |
| Static renderer | http://localhost:4300 |
Inspect the stack
docker compose --env-file .env -f infra/docker/docker-compose.yml ps
docker compose --env-file .env -f infra/docker/docker-compose.yml logs -f api
curl http://localhost:4000/health
curl http://localhost:4000/health/detailed
curl http://localhost:4000/setup/preflightIn production, detailed health and root preflight diagnostics require internal authorization. Console-mounted preflight remains available to authenticated Console sessions.
Create the first account
After migrations complete, open:
http://localhost:3001/sign-upCreate the first Console account, then verify you can open Styles, Tilesets, API Keys, Usage, and Operations.
Optional profiles
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile with-minio up -d
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile with-proxy up -d traefik
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile with-supervisor up -d self-host-supervisor admin
TILE_DELIVERY_MODE=worker docker compose --env-file .env -f infra/docker/docker-compose.yml --profile with-tile-worker up -d api tile-workerSmoke checks
Use the repository scripts after the stack is running:
pnpm smoke:self-host-default-map
pnpm e2e:product-loop
pnpm smoke:self-host-backup-restoreFor a new environment, start with health and preflight, then the default map smoke, then the full product loop.