Plausible Community Edition — privacy-friendly, cookie-free web analytics. Deployed all-in-one with its PostgreSQL and ClickHouse databases in a single host-networked Nomad job; creates and migrates the databases on start.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "plausible"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The Plausible Community Edition image. Pin a tag in production.
image = "ghcr.io/plausible/community-edition:v3.0.1"
# Host port for the Plausible web UI (HTTP_PORT).
port = 8000
# Public URL Plausible is served at (e.g. https://analytics.example.com). Used in links and the tracking snippet. Empty = http://localhost:<port>.
base_url = ""
# Secret used to sign sessions — MUST be at least 64 characters. CHANGE THIS (e.g. `openssl rand -base64 64`) and keep it stable.
secret_key_base = "CHANGE_ME_generate_with_openssl_rand_base64_64_at_least_64_chars_long!!"
# Registration policy: "false" (open — create the first/admin account, then lock down), "true" (no new accounts), or "invite_only".
disable_registration = "false"
# Resources for the Plausible task.
plausible_resources = {
cpu = 500
memory = 512
}
# PostgreSQL image for Plausible's app database.
postgres_image = "postgres:16-alpine"
# Host port PostgreSQL listens on.
db_port = 5432
# Password for the Plausible Postgres user. CHANGE THIS. (DB name and user are both "plausible".)
db_password = "plausible"
# Docker named volume for the Postgres data dir (users, sites, settings). Back it up.
db_data_volume = "plausible_db_data"
# Resources for the PostgreSQL task.
postgres_resources = {
cpu = 500
memory = 512
}
# ClickHouse image for Plausible's event store. Pin to a version Plausible supports.
clickhouse_image = "clickhouse/clickhouse-server:24.12-alpine"
# Host port for ClickHouse's HTTP interface (Plausible connects here on 127.0.0.1).
clickhouse_port = 8123
# Docker named volume for /var/lib/clickhouse (the event data — the bulk of analytics). Back it up.
clickhouse_data_volume = "plausible_ch_data"
# Resources for the ClickHouse task.
clickhouse_resources = {
cpu = 1000
memory = 1024
}
# Placement constraints — pin the job to one node so the local volumes stay put (single all-in-one alloc). On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "plausible" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "ghcr.io/plausible/community-edition:v3.0.1" | The Plausible Community Edition image. Pin a tag in production. |
| port | number | 8000 | Host port for the Plausible web UI (HTTP_PORT). |
| base_url | string | "" | Public URL Plausible is served at (e.g. https://analytics.example.com). Used in links and the tracking snippet. Empty = http://localhost:<port>. |
| secret_key_base set me | string | "CHANGE_ME_generate_with_openssl_rand_base64_64_at_least_64_chars_long!!" | Secret used to sign sessions — MUST be at least 64 characters. CHANGE THIS (e.g. `openssl rand -base64 64`) and keep it stable. |
| disable_registration | string | "false" | Registration policy: "false" (open — create the first/admin account, then lock down), "true" (no new accounts), or "invite_only". |
| plausible_resources | object | {
cpu = 500
memory = 512
} | Resources for the Plausible task. |
| postgres_image | string | "postgres:16-alpine" | PostgreSQL image for Plausible's app database. |
| db_port | number | 5432 | Host port PostgreSQL listens on. |
| db_password key | string | "plausible" | Password for the Plausible Postgres user. CHANGE THIS. (DB name and user are both "plausible".) |
| db_data_volume | string | "plausible_db_data" | Docker named volume for the Postgres data dir (users, sites, settings). Back it up. |
| postgres_resources | object | {
cpu = 500
memory = 512
} | Resources for the PostgreSQL task. |
| clickhouse_image | string | "clickhouse/clickhouse-server:24.12-alpine" | ClickHouse image for Plausible's event store. Pin to a version Plausible supports. |
| clickhouse_port | number | 8123 | Host port for ClickHouse's HTTP interface (Plausible connects here on 127.0.0.1). |
| clickhouse_data_volume | string | "plausible_ch_data" | Docker named volume for /var/lib/clickhouse (the event data — the bulk of analytics). Back it up. |
| clickhouse_resources | object | {
cpu = 1000
memory = 1024
} | Resources for the ClickHouse task. |
| constraints | list | [] | Placement constraints — pin the job to one node so the local volumes stay put (single all-in-one alloc). On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
No variables match.
Plausible Community Edition — privacy-friendly, cookie-free web analytics (a lightweight, GDPR-friendly Google Analytics alternative). All-in-one: Plausible plus its PostgreSQL (app data) and ClickHouse (event store) in a single host-networked Nomad job. It creates and migrates both databases on start.
nomad-pack registry add nomploy github.com/Nomploy/nomad-packs
nomad-pack run plausible --registry nomploy \
--var 'secret_key_base=<64+ char secret>' \
--var 'base_url=https://analytics.example.com'
In nomploy: create a Compose service, type Nomad Pack, pack plausible, set the
variables, then Deploy.
Open http://<node-ip>:8000 and register the first account (that's the admin), then set
disable_registration to lock it down.
| Variable | Default | Notes |
|---|---|---|
image |
ghcr.io/plausible/community-edition:v3.0.1 |
Pin a supported version. |
port |
8000 |
Web UI (HTTP_PORT). |
base_url |
"" |
Public URL; empty → http://localhost:<port>. Set it for real use. |
secret_key_base |
placeholder | Must be ≥ 64 chars — change it (openssl rand -base64 64). |
disable_registration |
false |
false / true / invite_only. |
db_password |
plausible |
Postgres password. Change this. |
db_data_volume / clickhouse_data_volume |
plausible_* |
Back both up. |
db_port / clickhouse_port |
5432 / 8123 |
Bundled DB host ports. |
constraints |
[] |
Pin to a node so the volumes stay put. |
Per-task resources: plausible_resources, postgres_resources, clickhouse_resources.
count is fixed to 1 (local Postgres + ClickHouse volumes). Pin with
constraints. The bundled Postgres/ClickHouse bind host ports (5432 / 8123 / 9000) — keep
them off nodes already running the postgres/clickhouse packs, or change db_port.secret_key_base and DB password; front with a reverse proxy for
TLS and set base_url to the HTTPS URL.umami pack: Plausible is heavier (adds ClickHouse) but scales to larger event
volumes; umami is a lighter Postgres-only option.