Skip to content

Configuration

The stack is configured with environment variables in .env, next to docker-compose.yml. Start from .env.example. Station settings (crossfade, rotation, time zone, library layout, AcoustID key…) are not here: they are stored in the database and changed from the web interface or the API.

Variable Default Meaning
HERON_VERSION latest Image tag of the five services: latest, edge, or a release such as 0.1.0. See Upgrading
Variable Default Meaning
HERON_DB_PASSWORD change-me MariaDB password of Heron’s user. Use letters, digits, - and _: it is embedded in a URL
HERON_DB_ROOT_PASSWORD change-me-too MariaDB root password
Variable Default Meaning
HERON_MUSIC_DIR ./data/music The music library
HERON_FALLBACK_DIR ./data/fallback Tracks the engine plays when its queue runs dry
HERON_INCOMING_FOLDER ./data/incoming Drop new files here: they move into the buffer zone
HERON_STAGING_FOLDER ./data/staging The buffer zone: new files waiting to be imported. Best on the library’s file system
HERON_LIBRARIAN_USER 1000:1000 uid:gid that heron-librarian and heron-api run as: the owner of the music, incoming and buffer folders
Variable Default Meaning
HERON_SCAN_INTERVAL 3600 Seconds between full library scans
HERON_LIBRARY_WATCH true Scan when files change. Set false on network shares that do not report changes
HERON_NICE 10 Niceness of heron-analyzer and heron-librarian (0 to 19), so they yield the CPU and disk to the engine
Variable Default Meaning
HERON_HTTP_PORT 8000 Host port of the web interface and the API
HERON_ICECAST_PORT 8010 Host port of the optional local Icecast server (--profile icecast)
Variable Default Meaning
RUST_LOG info Log level of the services, for example heron_engine=debug,info
HERON_SENTRY_DSN empty: off Sentry DSN for the services’ errors
HERON_WEB_SENTRY_DSN empty: off Sentry DSN for the web interface. Browsers read it: give it a project of its own
HERON_SENTRY_ENVIRONMENT production Sentry environment
Variable Default Meaning
HERON_STATION_NAME heron The station label of every metric
HERON_METRICS_REMOTE_WRITE_URL empty: off Prometheus remote write endpoint
HERON_METRICS_REMOTE_WRITE_USERNAME Basic auth user (Grafana Cloud: the instance ID). Empty: the password is sent as a bearer token
HERON_METRICS_REMOTE_WRITE_PASSWORD Basic auth password or bearer token
HERON_METRICS_REMOTE_WRITE_INTERVAL 15 Seconds between pushes

See Monitoring.

HTTPS is left to a reverse proxy in front of heron-web (Caddy, nginx, Traefik…). Have the proxy set X-Forwarded-Proto, so session cookies are marked Secure. The proxy must also forward WebSocket connections on /api/v1/live.

The services’ own ports (metrics and health checks) have no authentication: never publish them on the Internet.