Plausible Analytics
| Description / name | Input element |
|---|---|
| Container Registry | |
| Container Configuration Root Path | |
| Timezone | |
| User ID | |
| Group ID | |
| Plausible Analytics /config Path |
Privacy-first web analytics: one lightweight script, no cookies, a dashboard anyone can read. Runs with PostgreSQL and ClickHouse.
| Registry | ghcr.io/daemonless/plausible |
| Daemonless | daemonless/plausible |
| Source | plausible/analytics |
| Website | plausible.io |
Version Tags
| Tag | Description | Best For |
|---|---|---|
latest |
Built from the latest upstream source release, on FreeBSD's Erlang. | Most users — recommended. |
Parts
| Service | Image | Role | |
|---|---|---|---|
| plausible | ghcr.io/daemonless/plausible:latest |
The analytics server: dashboard, tracking script, API | docs |
| postgres | ghcr.io/daemonless/postgres:latest |
Sites, users and settings | docs |
| clickhouse | ghcr.io/daemonless/clickhouse:pkg-latest |
The events: every pageview lands here | docs |
Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions, including the security model for host vs. container privileges.
Deployment
1. Save as .env and fill in what is empty:
2. Save as compose.yaml:
Then run podman-compose up -d.
Save the files above, then run appjail-director up.
Interactive Configuration
Parameters
Environment Variables
| Variable | Default | Description |
|---|---|---|
PUID |
1000 |
User ID for the application process |
PGID |
1000 |
Group ID for the application process |
TZ |
UTC |
Timezone for the container |
BASE_URL |
http://localhost:8000 |
Full public URL of this instance, e.g. https://plausible.example.com. The tracking script and every link use it |
SECRET_KEY_BASE |
<SECRET_KEY_BASE> |
Optional. 64+ random bytes, base64 (openssl rand -base64 48). Generated into /config/secrets.env on first start if unset |
TOTP_VAULT_KEY |
<TOTP_VAULT_KEY> |
Optional. 32 random bytes, base64 (openssl rand -base64 32), encrypts 2FA secrets. Generated alongside SECRET_KEY_BASE if unset |
POSTGRES_PASSWORD |
plausible |
Password for the bundled PostgreSQL (letters and digits only). Set it once, before the first start |
CLICKHOUSE_PASSWORD |
plausible |
Password for the bundled ClickHouse (letters and digits only). Set it once, before the first start |
DISABLE_REGISTRATION |
invite_only |
invite_only (default): after the first account, new users join by invitation. true closes sign-up entirely, false opens it to anyone |
DATABASE_URL |
`` | A PostgreSQL of your own instead of the bundled one, e.g. postgres://plausible:secret@db.example.com:5432/plausible_db. Unset, Plausible uses the stack's postgres with POSTGRES_PASSWORD |
CLICKHOUSE_DATABASE_URL |
`` | A ClickHouse of your own instead of the bundled one, e.g. http://default:secret@ch.example.com:8123/plausible_events_db. Unset, Plausible uses the stack's clickhouse with CLICKHOUSE_PASSWORD |
MAILER_EMAIL |
`` | From address for the emails Plausible sends (verification, reports) |
SMTP_HOST_ADDR |
`` | SMTP server for outgoing email; with SMTP_HOST_PORT, SMTP_USER_NAME, SMTP_USER_PWD and SMTP_HOST_SSL_ENABLED |
MAXMIND_LICENSE_KEY |
<MAXMIND_LICENSE_KEY> |
Optional. A MaxMind key for the GeoLite2 city database; without it the bundled DB-IP country database is used |
Volumes
| Path | Description |
|---|---|
/config |
Secrets, the geolocation database and caches |
Requirements
Plausible needs PostgreSQL and ClickHouse. Both are part of the
compose file; Plausible creates its databases and runs migrations at every
start. Pick POSTGRES_PASSWORD and CLICKHOUSE_PASSWORD before the first
start: the databases are initialised with them.
Secrets
SECRET_KEY_BASE and TOTP_VAULT_KEY are generated into
/config/secrets.env on first start, so there is nothing to prepare. Keep
/config on persistent storage: a new SECRET_KEY_BASE signs everyone out
and a new TOTP_VAULT_KEY locks out every 2FA user. To supply your own,
set them in the environment; the environment always wins.
First run
Open BASE_URL: an instance without users goes straight to registration,
and the first account becomes the owner. After that, sign-up is by
invitation only (DISABLE_REGISTRATION=invite_only, the default).
BASE_URL must be the address browsers use: the tracking snippet points
at it.
Without an SMTP server Plausible cannot send verification mail; account
verification is off unless ENABLE_EMAIL_VERIFICATION=true. See the
configuration wiki
for every setting.
License
Plausible is licensed under the AGPL-3.0.
Implementation Details
- Architectures: amd64
- User:
bsd(UID/GID set via PUID/PGID). Defaults to1000:1000. - Base: Built on
ghcr.io/daemonless/base(FreeBSD 15.1).
Need help? Join our Discord community.