Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Synology / NAS 11.09.2026 · 9 min Lesezeit

Umami auf dem Synology NAS installieren: cookielose Webanalyse

Umami ist eine cookielose Webanalyse mit zwei Containern und geringem Ressourcenbedarf. Die Anleitung zeigt, wie Sie Umami als Docker-Compose-Projekt auf dem Synology NAS einrichten, inklusive APP_SECRET, PostgreSQL-Persistenz, Tracking-Prüfung und Datenschutzhinweisen.

Geprüft am 30.09.2026 · für umami 3.4.0, postgres 15-alpine

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Umami auf dem NAS: Webanalyse, Ohne Cookies, PostgreSQL. Illustration mit Laptop und Administrationsoberfläche.

Für Besucherstatistiken bleibt oft nur die Wahl zwischen Google Analytics mit seinen Datenschutzfragen und einem umfangreichen Werkzeug wie Matomo. Umami ist eine schlanke Node.js-Anwendung mit PostgreSQL, setzt keine Cookies, speichert keine IP-Adressen im Klartext und lässt sich auf dem Synology NAS mit einem Compose-Projekt in rund 20 Minuten einrichten. Das senkt den Aufwand für Einwilligungen deutlich; ob ein Consent-Banner ganz entfallen kann, hängt allerdings von der Einzelfallbewertung ab (siehe FAQ).

Voraussetzungen

  • Synology NAS mit x86_64- oder ARM64-Prozessor und DSM 7.2 oder neuer
  • Container Manager aus dem Synology Package Center installiert
  • Mindestens 1 GB freier RAM
  • Mindestens 2 GB freier Speicherplatz auf /volume1 für Datenbankdaten
  • SSH-Zugang zum NAS – empfohlen für die APP_SECRET-Generierung (Einrichtung: SSH auf dem Synology NAS aktivieren und verbinden)
  • Internetverbindung für den Image-Download von ghcr.io
  • Optional: eigene (Sub-)Domain oder Synology DDNS für HTTPS-Zugriff von außen
  • Eine oder mehrere Websites, auf denen das Tracking-Snippet eingebunden werden soll

Eckdaten: Umami auf einen Blick

EigenschaftWert
Image (App)ghcr.io/umami-software/umami:latest (v3.4.0, 17.09.2026; amd64 und arm64)
Image (DB)postgres:15-alpine
Externer Port3999 (→ Container-Port 3000; vermeidet Konflikte auf Synology)
PostgreSQL-Port5432 – nur intern im Docker-Netzwerk, nicht nach außen exponiert
Persistentes Volume/volume1/docker/umami/db → /var/lib/postgresql/data
Pflicht-Env (App)DATABASE_URL, APP_SECRET
Pflicht-Env (DB)POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD
Standard-Loginadmin / umami, sofort ändern
LizenzMIT

Schritt 1: Ordner anlegen und APP_SECRET generieren

Bevor der Stack starten kann, muss der Datenbankordner auf dem NAS existieren. Verbinden Sie sich per SSH mit dem NAS und legen Sie den Pfad an:

mkdir -p /volume1/docker/umami/db

Erzeugen Sie im selben Terminal Ihr APP_SECRET. Die Zeichenkette sichert die Anmeldetoken der Installation und darf kein Beispielwert bleiben:

openssl rand -hex 32

Die Ausgabe ist eine 64-stellige Hexadezimalzeichenkette. Speichern Sie den Wert im Passwortmanager; er kommt gleich in die Compose-Datei. Den Ordner können Sie alternativ in der File Station erstellen (unter docker, dann Unterordner umami und darin db). Alles zu Berechtigungen und PUID/PGID erklärt Docker-Ordner und Berechtigungen auf dem Synology NAS.

Verifizieren: Der Ordner existiert:

ls -la /volume1/docker/umami/

Erwartete Ausgabe: ein Verzeichnis db wird aufgelistet. Erscheint „Permission denied“, korrigieren Sie mit chmod 755 /volume1/docker/umami/db.

Schritt 2: Compose-Datei erstellen und Projekt starten

Öffnen Sie den Container Manager, wechseln Sie zu Projekt und klicken Sie auf Erstellen. Projektname umami, Pfad /volume1/docker/umami. Das Anlegen von Compose-Projekten beschreibt Container Manager: Docker-Compose-Projekt anlegen, starten und aktualisieren Schritt für Schritt. Fügen Sie folgende compose.yaml ein und ersetzen Sie die Platzhalter für Passwort und APP_SECRET:

---
services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    container_name: umami
    ports:
      - "3999:3000"
    environment:
      DATABASE_URL: postgresql://umami:SicheresPasswort123@db:5432/umami
      APP_SECRET: HIER_OPENSSL_AUSGABE_EINTRAGEN
      # optional, nötig für Zwei-Faktor-Anmeldung (ab v3.3.0):
      # TWO_FACTOR_ENCRYPTION_KEY: ZWEITE_OPENSSL_RAND_HEX_32_AUSGABE
      DISABLE_TELEMETRY: "1"
    depends_on:
      db:
        condition: service_healthy
    init: true
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
      interval: 5s
      timeout: 5s
      retries: 5

  db:
    image: postgres:15-alpine
    container_name: umami-db
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: STARKES_DB_PASSWORT
    volumes:
      - /volume1/docker/umami/db:/var/lib/postgresql/data
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5

Drei Punkte verdienen besondere Aufmerksamkeit:

  • Port 3999:3000: Der externe Port 3999 vermeidet Konflikte mit anderen Containern auf Port 3000; jeder freie Port ist möglich.
  • Doppeltes $$ im Healthcheck: In Compose-YAML muss das Dollarzeichen verdoppelt werden ($${POSTGRES_USER}), damit Docker Compose es nicht als eigene Variable interpretiert.
  • depends_on mit condition: service_healthy: Umami startet erst, wenn PostgreSQL den Healthcheck besteht. Das Passwort in DATABASE_URL muss mit POSTGRES_PASSWORD übereinstimmen.

Verifizieren: Beide Container sollten nach etwa 30–60 Sekunden den Status „Wird ausgeführt“ (grünes Symbol) anzeigen. Im Protokoll-Tab des umami-Containers darf keine Fehlerausgabe erscheinen. Rufen Sie außerdem den Heartbeat-Endpunkt auf:

curl http://NAS-IP:3999/api/heartbeat

Erwartete Antwort: {"ok":true}, dann läuft Umami.

Schritt 3: Firewall-Port freigeben

Damit Umami aus dem Netzwerk erreichbar ist, muss der externe Port in der DSM-Firewall freigegeben werden. Unter Systemsteuerung → Sicherheit → Firewall fügen Sie eine Regel für Port 3999 (TCP) hinzu, sofern die Firewall aktiv ist. Die genauen Schritte beschreibt DSM-Firewall auf dem Synology NAS: Ports für Docker-Container freigeben.

Verifizieren: Rufen Sie auf einem anderen Gerät im Netzwerk http://NAS-IP:3999 auf. Die Umami-Anmeldeseite muss erscheinen. Bleibt das Fenster leer oder kommt ein Timeout, ist die Firewall-Regel noch nicht aktiv oder der falsche Port eingetragen.

Schritt 4: Erster Login und Standard-Passwort ändern

Öffnen Sie http://NAS-IP:3999 und melden Sie sich mit den Standard-Zugangsdaten an:

  • Benutzername: admin
  • Passwort: umami

Das Standardpasswort ist öffentlich bekannt; ändern Sie es sofort. Klicken Sie in der Seitenleiste auf das Profilsymbol, dann auf Einstellungen → Profil → Passwort ändern.

Verifizieren: Nach Ab- und erneuter Anmeldung funktioniert nur noch das neue Passwort.

Schritt 5: Website anlegen und Tracking-Snippet einbinden

Unter Einstellungen → Websites → Website hinzufügen tragen Sie Name und Domain Ihrer Website ein. Nach dem Speichern öffnen Sie die Website über Bearbeiten und wechseln zum Reiter Tracking-Code.

Das generierte Snippet sieht so aus:

<script defer src="https://umami.example.de/script.js"
  data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>

Binden Sie das Snippet in den <head> aller zu messenden Seiten ein, bei WordPress etwa per Theme-Hook oder Header-Plugin. Werbeblocker auf Testgeräten blockieren unter Umständen script.js (siehe Troubleshooting).

Verifizieren: Öffnen Sie eine der Seiten und wechseln Sie im Umami-Dashboard zur Echtzeitansicht der Website; der Aufruf erscheint nach wenigen Sekunden. Alternativ zeigt der Netzwerk-Tab der Entwicklertools (F12) nach dem Neuladen einen Request an /api/send mit HTTP 200.

Schritt 6: Reverse Proxy für HTTPS einrichten (optional, empfohlen)

Soll das Snippet auf einer öffentlichen Website laden, muss Umami per HTTPS aus dem Internet erreichbar sein, sonst blockiert der Browser das Skript als Mixed Content. Öffnen Sie Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy → Erstellen:

  • Quelle: HTTPS, Port 443, Ihre (Sub-)Domain oder DDNS-Adresse
  • Ziel: HTTP, localhost, Port 3999

WebSocket-Header sind für Umami nicht nötig. Ein Let's-Encrypt-Zertifikat lässt sich direkt in DSM unter Systemsteuerung → Sicherheit → Zertifikat beantragen. Eine detaillierte Anleitung zum Reverse Proxy mit SSL bietet Nginx Proxy Manager auf der Synology mit Container Manager einrichten.

Verifizieren: https://umami.example.de lädt ohne Zertifikatswarnung, und das Tracking-Snippet mit HTTPS-URL sendet weiterhin Requests an /api/send.

Troubleshooting / Typische Fehler

  • Umami startet nicht: Prüfen Sie, ob condition: service_healthy gesetzt ist und ob der Healthcheck des db-Containers erfolgreich durchläuft. Logs im Protokoll-Tab des Container Managers prüfen.
  • „permission denied“ beim PostgreSQL-Start: Der Ordner /volume1/docker/umami/db existiert nicht oder hat falsche Berechtigungen. Lösung: mkdir -p /volume1/docker/umami/db per SSH ausführen und den Ordner leer lassen.
  • „variable not set“-Warnung oder fehlerhafter Healthcheck: Das Dollarzeichen im Healthcheck-Befehl ist nur einfach geschrieben. In der YAML-Datei muss es $${POSTGRES_USER} heißen, nicht ${POSTGRES_USER}.
  • „getaddrinfo ENOTFOUND db“: Der Service-Name in der DATABASE_URL stimmt nicht mit dem Compose-Service-Namen des Datenbank-Containers überein. Wenn der DB-Service db heißt, muss die URL @db:5432 enthalten – exakt wie im Compose-File definiert.
  • Kein Tracking, obwohl Snippet eingebunden: Werbeblocker filtern Umami häufig. Mit TRACKER_SCRIPT_NAME (z. B. stats.js) und optional COLLECT_API_ENDPOINT vergeben Sie andere Pfade; das Snippet passen Sie entsprechend an. Außerdem zählt Umami Aufrufe nicht, wenn die Domain im Browser nicht zur eingetragenen Website-Domain passt.
  • Sonderzeichen im Passwort, DATABASE_URL schlägt fehl: Zeichen wie @, / oder ? im POSTGRES_PASSWORD müssen in der DATABASE_URL URL-kodiert werden (@ → %40). Einfacher: Passwort nur aus Buchstaben, Ziffern und Bindestrichen bilden.
  • Umami im LAN nicht erreichbar trotz laufendem Container: Port 3999 ist in der DSM-Firewall nicht freigegeben. Von außen erfolgt der Zugriff über den Reverse Proxy auf Port 443.
  • Altes Image läuft nach Update weiterhin: Der Container Manager lädt latest nicht automatisch neu. Projekt stoppen, unter Image die neue Version herunterladen und das Projekt neu erstellen.

Häufige Fragen

Häufig nicht, eine Garantie gibt es aber nicht. Die Umami-FAQ hält fest: „No, Umami does not use any cookies in the tracking code.“ IP-Adressen speichert Umami nicht im Klartext. § 25 TDDDG (früher TTDSG) erfasst allerdings nicht nur Cookies, sondern jeden Zugriff auf Informationen im Endgerät; ob das Auslesen von Browserdaten durch das Skript darunter fällt, wird unterschiedlich bewertet. Nennen Sie Umami in der Datenschutzerklärung, dokumentieren Sie die Interessenabwägung nach Art. 6 Abs. 1 lit. f DSGVO und klären Sie im Zweifel mit Ihrem Datenschutzbeauftragten, ob ein Banner nötig ist. DISABLE_TELEMETRY: "1" schaltet zusätzlich die anonyme Telemetrie an die Umami-Entwickler ab.

Wo finde ich meinen Tracking-Code?

Im Umami-Dashboard unter Einstellungen (Zahnrad-Icon) → Websites → gewünschte Website → Bearbeiten → Reiter „Tracking-Code“. Das Snippet enthält Ihre Website-ID im Format data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" und die URL des Tracking-Skripts. Dieses Snippet gehört in den <head>-Bereich aller zu trackenden Seiten.

Wie verifiziere ich, dass das Tracking wirklich funktioniert?

Drei Methoden stehen zur Verfügung: (1) Umami-Dashboard → gewählte Website → Live-Ansicht: eigene Seitenaufrufe erscheinen nach wenigen Sekunden. (2) Browser-Dev-Tools (F12) → Network-Tab → Seite neu laden → Request an /api/send suchen – HTTP 200 bedeutet aktives Tracking. (3) Heartbeat direkt prüfen:

curl http://NAS-IP:3999/api/heartbeat

Die Antwort {"ok":true} bestätigt, dass Umami erreichbar ist.

Was ist der Unterschied zwischen Umami und Matomo für den NAS-Betrieb?

Umami besteht aus zwei Containern, braucht wenig RAM und liefert einen kompakten Überblick über Besucher, Quellen und Geräte. Matomo ist umfangreicher, bietet E-Commerce-Auswertungen, Ziele und über Plugins Funnels und Heatmaps, erfordert aber mehr Ressourcen und Konfiguration. Empfehlung: Umami für einfache Traffic-Analyse ohne Overhead; Matomo wenn detaillierte Marketinganalysen notwendig sind. Den vollständigen Matomo-Aufbau beschreibt Matomo auf dem Synology NAS installieren: DSGVO-konforme Webanalyse.

Kann ich mehrere Websites mit einer Umami-Instanz tracken?

Ja – Umami unterstützt beliebig viele Websites pro Instanz. Für jede Website wird im Dashboard eine eigene ID generiert und ein eigenes Snippet bereitgestellt. Alle Daten landen in derselben PostgreSQL-Datenbank, sind aber im Dashboard sauber getrennt und einzeln auswertbar.

Was passiert bei einem NAS-Neustart?

Mit restart: always starten beide Container automatisch neu. Der Healthcheck-Mechanismus stellt sicher, dass Umami erst hochfährt, wenn die Datenbank wirklich bereit ist. Alle Analytics-Daten bleiben erhalten, weil die PostgreSQL-Dateien im persistenten Volume /volume1/docker/umami/db liegen.

Wie sichere ich die Umami-Daten?

Der Datenbestand liegt unter /volume1/docker/umami/db. Eine Dateisicherung der laufenden Datenbank ist nicht zuverlässig konsistent; sichern Sie daher zusätzlich per Dump, etwa täglich im Aufgabenplaner:

docker exec umami-db pg_dump -U umami umami > /volume1/backup/umami_$(date +%F).sql

Den Backup-Ordner nimmt Hyper Backup mit. Zur Gesamtstrategie: 3-2-1-Backup-Strategie umsetzen.

Fazit

Umami ist eine schlanke, cookielose Webanalyse für das eigene NAS: zwei Container, ein Schlüssel aus openssl rand -hex 32 und ein Tracking-Snippet. Wer wissen will, woher Besucher kommen, welche Seiten sie aufrufen und welche Geräte sie nutzen, ist damit gut bedient. Für E-Commerce-Auswertungen und umfangreiche Marketinganalysen passt Matomo besser. Die Datenschutzerklärung und die rechtliche Bewertung bleiben auch bei Umami Pflicht.

Weiterführende Anleitungen und Quellen

Quellen: Offizielle Umami-Dokumentation (docs.umami.is/docs/install, docs.umami.is/docs/faq, docs.umami.is/docs/environment-variables), Umami GitHub Repository mit offiziellem docker-compose.yml (github.com/umami-software/umami).