Privacy-freundliche, self-hosted Webanalyse für den Digital Garden, erreichbar unter analytics.nettailor.net.

Zweck

Aktuell einzige getrackte Domain: garden.nettailor.net. Andere Hetzner-Dienste bewusst nicht getrackt.

Stack

Plausible CE v3.2.1 (Postgres + ClickHouse). Ursprünglich via Portainer Web Editor deployed, seit Juli 2026 als Komodo-Stack im Files-on-Host-Modus – läuft in-place aus dem Original-Ordner (run_directory), wodurch die relativen ClickHouse-Config-Pfade und die .env gültig bleiben (siehe Lessons Learned unten).

Auth-Konzept

Wie Stirling PDF komplett über Authentik Forward Auth via NPM – aber mit zwei Pfad-Ausnahmen ohne auth_request, da Plausibles Tracking-Script öffentlich erreichbar bleiben muss, unabhängig vom Login:

  • location /js/ – liefert script.js aus
  • location = /api/event – nimmt Tracking-Events entgegen

Nur location / (Dashboard/Login) hängt hinter Authentik.

Quartz-Integration

Kein manuelles Snippet – analytics: { provider: "plausible", host: "https://analytics.nettailor.net" } in quartz.config.ts des Digital-Garden-Repos, injiziert das Tracking-Script automatisch in jede gebaute Seite.

Opt-out

Button auf der DSGVO-Seite (content/dsgvo.md) togglet localStorage.plausible_ignore – wird von Plausibles Script selbst respektiert (offizielles, eingebautes Verhalten), kein zusätzlicher Code nötig.

Sicherheitshinweis

Plausible CE hatte mit v3.2.1 einen CVE-Fix (RCE über offenen /storybook-Endpoint) – Image-Tag im Blick behalten, GitHub-Releases beobachten.

🔧 Lessons Learned: ClickHouse-Config-Dateien und bare Env-Vars als Stolperfallen

Datum: Juli 2026

Beim ursprünglichen Deploy über Portainer Web Editor (ohne Git-Stack) traten zwei nicht offensichtliche Fallen auf. Der spätere Umzug auf Komodo Files-on-Host entschärft die erste (Punkt 1) automatisch, weil Komodo das Compose im Original-Ordner ausführt und die relativen Pfade damit wieder stimmen:

  1. Relative Pfade in compose.yml: Die offiziellen ClickHouse-Config-Mounts (./clickhouse/*.xml) sind relativ zum Repo-Root. Im Web Editor existiert dieser Ordner nicht automatisch. Docker legt bei fehlendem Host-Pfad automatisch ein leeres Verzeichnis statt der erwarteten Datei an – der Bind-Mount schlägt dann fehl (Verzeichnis statt Datei). Lösung: Dateien vorab in ein festes Verzeichnis kopieren (z. B. in das Docker-Volume plausible_clickhouse unter /var/lib/docker/volumes/plausible_clickhouse/_data/) und vor dem ersten Start dort ablegen.
  2. CLICKHOUSE_DATABASE_URL ohne Inline-Default: Anders als DATABASE_URL (dort war der Wert im Compose direkt mit ${POSTGRES_PASSWORD} zusammengesetzt) stand bei CLICKHOUSE_DATABASE_URL nur der bare Verweis ohne Wert. Ohne explizite Env-Variable in Portainer (http://plausible_events_db:8123/plausible_events_db) bleibt das leer, Plausible kann ClickHouse dann nicht erreichen.

Merke: Bei Compose-Dateien, die für Git-Checkouts gedacht sind (relative Pfade, .env-Dateien), aber per Portainer Web Editor deployed werden: relative Pfade grundsätzlich in absolute umwandeln und alle bare - VARNAME-Referenzen einmal gegen die Wiki-Dokumentation auf tatsächlich benötigte Defaults prüfen, statt sie unverändert zu übernehmen.