Analytics, checked 2026-09-07

Umami: Docker configuration reference

Self-hosted web analytics on Next.js with a PostgreSQL, MySQL or ClickHouse backend.

At a glance

Ports

Ports
PortWhat listensSource
3000HTTP listener for the dashboard, the tracker script and the collect API. Point the reverse proxy here.source for port 3000
5432 (db)PostgreSQL, reached over the internal network only. It does not need publishing to the host.source for port 5432

Environment variables

Environment variables
VariableRequiredWhat it doesExampleSource
DATABASE_URLYesConnection string for the database. The upstream docs call this the only required variable.postgresql://umami:umami@db:5432/umamisource for DATABASE_URL
APP_SECRETYesRandom string that secures authentication tokens. Each installation needs its own value.openssl rand -hex 32source for APP_SECRET
TWO_FACTOR_ENCRYPTION_KEYNo64 character hex key required before two-factor authentication will work. Added in the v3.3 line.openssl rand -hex 32source for TWO_FACTOR_ENCRYPTION_KEY
CLIENT_IP_HEADERNoHTTP header to read the visitor IP from when a proxy in front uses a non-standard header. Since v1.24.0.CF-Connecting-IPsource for CLIENT_IP_HEADER
COLLECT_API_ENDPOINTNoMoves the collect endpoint off the default /api/send, which is what ad blockers match on. Since v1.34.0./api/collect-heresource for COLLECT_API_ENDPOINT
DISABLE_TELEMETRYNoTurns off the anonymous usage telemetry the application sends upstream. Since v2.0.0.1source for DISABLE_TELEMETRY
DISABLE_LOGINNoDisables the login page entirely. Since v1.26.0. Only sane behind an identity gate you already trust.1source for DISABLE_LOGIN
CORS_MAX_AGENoSeconds a CORS preflight is cached for. Default is 24 hours. Since v2.0.0.86400source for CORS_MAX_AGE

Volumes that must persist

Volumes
PathWhat is in itSource
/var/lib/postgresql/data (db)The whole dataset. The application container itself is stateless, so this is the only thing to back up.source for /var/lib/postgresql/data

Behind a reverse proxy

What it needs alongside it

Dependencies
DependencyWhySource
PostgreSQL, MySQL or ClickHouseThe upstream compose file pairs the application with postgres:15-alpine. The image tag you pick has to match the engine.source for PostgreSQL, MySQL or ClickHouse

Release timeline

Releases
VersionDateBreakingWhat changedSource
v3.3.12026-08-20NoMaintenance release. Hardens two-factor auth when TWO_FACTOR_ENCRYPTION_KEY is missing or invalid.source for release v3.3.1
v3.3.02026-08-12YesAdds two-factor authentication, which needs the new TWO_FACTOR_ENCRYPTION_KEY variable set before it will work.source for release v3.3.0
v3.2.02026-06-24NoAdds heatmaps, property reporting changes and session replay controls.source for release v3.2.0
v3.1.02026-04-16NoAdds boards, session replay, web vitals performance tracking and a redesigned share page.source for release v3.1.0
v3.0.32025-12-12NoPatch for the Next.js security advisory published 2025-12-11.source for release v3.0.3

If it is not coming up

Read from the upstream documentation, repository and container registry by Keita Emsden on 2026-09-07. Every row links the page it came from. Upstream changes without telling anyone, so check the source link before you rely on a value.

Other app references

All app references