Nomploy Nomad Packs

← All packs

matomo v0.1.0

Analytics

Matomo — a powerful, privacy-focused web analytics platform and a self-hosted alternative to Google Analytics: full data ownership, heatmaps, funnels, and reports. Deployed as an all-in-one host-networked Nomad job: a MariaDB sidecar plus the Matomo app with an app volume.

nomad-pack run matomo --registry nomploy
…or one line (add registry + run)
curl -fsSL https://packs.nomploy.com/install.sh | sh -s -- matomo

Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.

3 tasks http 80db 3306 2 volumes image matomo:latest tracks :latest image bumped 27 days ago
Variables 13
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run matomo -f values.hcl --registry nomploy
# The name of the Nomad job.
job_name = "matomo"

# The Nomad namespace to deploy into.
namespace = "default"

# The datacenters to deploy to.
datacenters = ["*"]

# The Matomo container image. Pin a tag in production.
image = "matomo:latest"

# The MariaDB image for the bundled database.
mariadb_image = "mariadb:11"

# Host port for the Matomo web UI. The app's Apache listens on 80; keep this at 80 or front with a reverse proxy.
port = 80

# Password for the Matomo database user.
db_password = "matomo"

# UID the app runs as (www-data). The app volume is chown'd to this at startup.
uid = 33

# Named volume for the Matomo application files and config (/var/www/html).
data_volume = "matomo_data"

# Named volume for MariaDB data (/var/lib/mysql). Holds all your analytics data.
db_data_volume = "matomo_db_data"

# Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# Resources for the Matomo app task.
resources = {
    cpu    = 500
    memory = 512
  }

# Resources for the MariaDB task.
mariadb_resources = {
    cpu    = 300
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"matomo"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"matomo:latest"
The Matomo container image. Pin a tag in production.
mariadb_image string
"mariadb:11"
The MariaDB image for the bundled database.
port number
80
Host port for the Matomo web UI. The app's Apache listens on 80; keep this at 80 or front with a reverse proxy.
db_password key string
"matomo"
Password for the Matomo database user.
uid number
33
UID the app runs as (www-data). The app volume is chown'd to this at startup.
data_volume string
"matomo_data"
Named volume for the Matomo application files and config (/var/www/html).
db_data_volume string
"matomo_db_data"
Named volume for MariaDB data (/var/lib/mysql). Holds all your analytics data.
constraints list
[]
Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 500
    memory = 512
  }
Resources for the Matomo app task.
mariadb_resources object
{
    cpu    = 300
    memory = 512
  }
Resources for the MariaDB task.
Back up this pack

This pack stores data in 2 Docker named volumes: matomo_datamatomo_db_data

⚠ This pack bundles a database. A cold copy of the volume can be inconsistent — for a reliable backup, dump the DB (pg_dump / mysqldump) or stop the job while backing up.

restic

# Run on the node hosting this pack. Point restic at your repo first:
#   export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>"
#   export RESTIC_PASSWORD="<repo-password>"
#   export AWS_ACCESS_KEY_ID=<key>  AWS_SECRET_ACCESS_KEY=<secret>
restic backup \
  /var/lib/docker/volumes/matomo_data/_data \
  /var/lib/docker/volumes/matomo_db_data/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/matomo_data/_data backup:<bucket>/matomo_data
rclone sync /var/lib/docker/volumes/matomo_db_data/_data backup:<bucket>/matomo_db_data

Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.

Readme

matomo

Matomo — a powerful, privacy-focused web analytics platform and a self-hosted alternative to Google Analytics: full data ownership, heatmaps, funnels, and reports.

All-in-one host-networked Nomad job: a busybox chown init, a MariaDB prestart sidecar (on 3306), and the Matomo app.

Deploy

nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run matomo --registry=nomploy

Configure

Variable Default Description
port 80 Web UI port (Apache; see note).
db_password matomo Database password.
uid 33 User the app runs as (www-data); app volume chown'd to it.
data_volume matomo_data /var/www/html — app files + config.
db_data_volume matomo_db_data MariaDB data — analytics.
resources / mariadb_resources see defaults Per-task resources.

Finish the web installer on first visit (DB fields are pre-filled). See also the privacy-analytics plausible and umami packs (lighter). Matomo's Apache binds 80 and the bundled MariaDB uses 3306 — front with a reverse proxy for another port/domain, and note both overlap other packs' defaults. Pin the job to the node holding the volumes with constraints.