Skip to main content

Compose profiles

Each map-service group is gated by a Docker Compose profile so you only spin up — and download data for — what you need.

Profile reference​

ProfileServicesAffects
(default — no flag)caddy, appThe map page and API surface. Search / routing / POIs return graceful upstream: unavailable until their profile is started.
geocodingphoton, placeholder, libpostal/api/v1/search returns real candidates; /api/v1/whats-here resolves a label.
routingvalhalla/api/v1/route returns walking / cycling / driving routes + elevation.
poisoverpass/api/v1/whats-here and /api/v1/pois return real POIs.
motismotisMOTIS, the default public-transport engine (needs GTFS feeds).
transitotpOpenTripPlanner, the selectable alternative transit engine.
data-setupwhosonfirstOne-shot Who's-on-First download for Placeholder.
allstandard map services + otpEverything except data-setup and MOTIS. The app enforces the saved transit-engine selection.

Activation​

# Bare stack
docker compose up -d

# Add one profile
docker compose --profile geocoding up -d

# Add multiple
docker compose --profile geocoding --profile routing up -d

# Start the default transit engine explicitly
docker compose --profile motis up -d

# Everything except data-setup
COMPOSE_PROFILES=all docker compose up -d

You can also flip profiles on/off interactively from the admin panel — open the Atlas UI at http://localhost:8484, click the Settings tab, toggle services, and hit Save & apply. Select MOTIS or OpenTripPlanner in Services → Public transport → Transit engine rather than starting both manually; Atlas stops the previous engine before enabling the next one.

Graceful degradation​

Dawarich Atlas is designed so the map page is always live, regardless of which data services are running. Atlas returns structured upstream metadata so clients can detect what's available:

Profile state/api/v1/search/api/v1/route/api/v1/whats-here
Bare stackmeta.upstream: "unavailable", empty data502 UPSTREAM_ERROR502 UPSTREAM_ERROR
geocoding onlyReal results502 UPSTREAM_ERRORLabel only, no POIs
geocoding + routingReal resultsReal routeLabel only, no POIs
allReal resultsReal routeLabel + POIs

The error code lets you wire a clean fallback UI: "Routing service is warming up — try again in a minute" beats a generic 500.

Tearing down + reclaiming disk​

# Stop a profile but keep its data
docker compose --profile pois down

# Drop a service's data (irreversible — rebuilds on next start)
docker compose down overpass
rm -rf data/overpass/*

Per-service disk: du -sh data/* for a quick overview.

What runs where​

PortHost-exposedService
8484yesCaddy (fronts Atlas + serves PMTiles)
3000 (internal)noDawarich Atlas (Phoenix)
2322 (internal)noPhoton
3000 (internal)noPlaceholder
4400 (internal)nolibpostal
8002 (internal)noValhalla
80 (internal)noOverpass
8080 (internal)noMOTIS or OpenTripPlanner (the selected engine)

For debugging, add a compose.override.yml that publishes the backend ports you need locally.