Umami Analytics selbst hosten: Cookiefreies Tracking mit Docker & Coolify
Praxisbericht: Cookiefreies, DSGVO-konformes Web-Tracking mit Umami und PostgreSQL auf Hetzner VPS via Coolify – schlank, unabhängig und ohne Cookies.
Das Problem mit Google Analytics & Cookie-Bannern
Wer für mittelständische Unternehmen, Handwerksbetriebe oder die eigene Firmen-Website Besucherströme messen will, landet fast automatisch vor zwei schlechten Optionen:
- Google Analytics 4: Schwerfällig, datenschutzrechtlich hochgradig heikel (Drittlandtransfer USA) und verpflichtet zu Cookie-Bannern, die viele Besucher sofort wegklicken.
- Kostenpflichtige Cloud-SaaS-Tools: Anbieter wie Plausible oder Fathom verlangen für jede zusätzliche Domain monatliche Gebühren – bei mehreren Kunden- und Projekt-Websites summiert sich das schnell.
Meine Lösung für digitale Souveränität: Ich hoste meine Analytics selbst.
Unter analytics.syfrt.de läuft ab sofort eine eigene Umami-Instanz – schlank, cookiefrei, DSGVO-konform und vollständig unter eigener Kontrolle.
Die Architektur auf dem Hetzner VPS
Statt fremder Cloud-Dienste läuft der gesamte Analytics-Stack auf einem eigenen Server (Hetzner Cloud CX33 in Falkenstein/Vogtland). Die Verwaltung erfolgt über die Open-Source-PaaS Coolify:
[ Besucher / Browser ]
│
▼ (HTTPS / Port 443)
┌──────────────────────────────────────────────┐
│ Hetzner CX33 Server │
│ │
│ ┌────────────────────────────────────────┐ │
│ │ Traefik v3.7 (Reverse Proxy & TLS) │ │
│ └───────────────────┬────────────────────┘ │
│ │ │
│ ┌───────────────────▼────────────────────┐ │
│ │ Umami App (umami-software/umami, v3) │ │
│ └───────────────────┬────────────────────┘ │
│ │ (Docker internes Netz)│
│ ┌───────────────────▼────────────────────┐ │
│ │ PostgreSQL 16 Alpine (~65 MB RAM) │ │
│ └────────────────────────────────────────┘ │
└──────────────────────────────────────────────┘
Wichtige Klarstellung zu Cloudflare:
Cloudflare wird in diesem Setup ausschließlich als DNS-Nameserver im sogenannten Graue-Wolke-Modus (proxied: false) genutzt.
Es gibt keine Cloudflare Pages, keine Cloudflare Workers und kein zwischengeschaltetes US-CDN. Der gesamte Datenverkehr fließt direkt von der Domain analytics.syfrt.de auf die feste IP des Hetzner-Servers in Deutschland.
Schritt 1: Docker Compose Setup in Coolify
Die Bereitstellung in Coolify ist denkbar unkompliziert. Ein kompaktes Docker-Compose-Manifest definiert die Web-Applikation und die Datenbank:
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-v3.0.3
container_name: umami-app
restart: unless-stopped
environment:
DATABASE_URL: postgresql://umami:${DB_PASSWORD}@postgres:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: ${APP_SECRET}
depends_on:
- postgres
networks:
- internal-net
postgres:
image: postgres:16-alpine
container_name: umami-db
restart: unless-stopped
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- internal-net
volumes:
postgres_data:
networks:
internal-net:
driver: bridge
Traefik besorgt automatisch ein Let’s-Encrypt-Zertifikat für analytics.syfrt.de.
Schritt 2: Einbindung in Astro (Zero Friction)
Das Umami-Skript ist gerade einmal 2 Kilobyte groß (Google Analytics lädt ein Vielfaches davon nach).
In das zentrale Astro-Layout (src/layouts/BaseLayout.astro) wird das Skript mit zwei Attributen eingebettet:
<script
defer
src="https://analytics.syfrt.de/script.js"
data-website-id="20cd8756-c4d7-4cba-b801-4095e08e40f1"
></script>
Warum für die Reichweitenmessung kein Banner nötig ist:
Umami setzt keine Cookies und speichert keine IP-Adressen. Gezählt wird über eine anonyme Kennung aus IP-Adresse, User-Agent und einem regelmäßig wechselnden Salt; erfasst werden nur grobe Metadaten wie Browser, Betriebssystem und Land. Ein Profiling über längere Zeiträume ist so praktisch ausgeschlossen.
Ergebnis: keine Messlücken durch abgelehnte Cookie-Banner (Adblocker können Umami trotzdem blockieren) und keine Popups, die Besucher vergraulen. Auch syfrt.de kommt deshalb ganz ohne Cookie-Banner aus.
Erkenntnisse aus der Praxis
- Ressourcenbedarf: Umami und PostgreSQL belegen zusammen gerade einmal ~115 MB Arbeitsspeicher. Auf einem CX33 mit 8 GB RAM fällt das schlicht nicht ins Gewicht.
- Multi-Tenancy: In einer einzigen Umami-Installation lassen sich beliebig viele Websites und Kunden-Dashboards anlegen – jedes mit eigener ID und separaten Freigabelinks für Mandanten.
- API-Anbindung: Über n8n kann ich die Besucherzahlen nun täglich per REST-API abfragen und automatisierte Monatsreports für Retainer-Kunden erstellen.
Digitale Souveränität muss weder teuer noch kompliziert sein: Mit Standard-Docker-Containern und Coolify läuft das gesamte Tracking auf deutscher Infrastruktur – transparent, performant und unabhängig. Wie der Server dahinter aufgebaut ist, beschreibe ich im Beitrag Self-Hosting mit Coolify, Forgejo & Astro.
Sie möchten Ihre Website datensparsam messen – oder Tracking, das wirklich stimmt? Mehr unter SEO & Tracking oder direkt im Gespräch.
Häufige Fragen
Warum ist für Umami kein Cookie-Banner erforderlich?
Umami setzt keine Cookies und speichert keine IP-Adressen. Besuche werden über eine anonyme, regelmäßig wechselnde Kennung aus IP-Adresse, User-Agent und einem Salt gezählt. Deshalb gilt Umami nach gängiger Einschätzung als einwilligungsfrei nach DSGVO und TDDDG – eine Rechtsberatung im Einzelfall ersetzt das nicht.
Wie viel Serverressourcen benötigt ein selbst gehostetes Umami?
Im laufenden Betrieb begnügen sich der Umami-Container (Node.js) und die PostgreSQL-Datenbank zusammen mit rund 100 bis 130 MB RAM. Auf einem modernen Hetzner CX33 VPS fällt die Last selbst bei mehreren zehntausend Seitenaufrufen pro Monat kaum ins Gewicht.
Welche Rolle spielt Cloudflare in diesem Setup?
Cloudflare dient hier ausschließlich als schneller, redundanter DNS-Nameserver im 'Graue Wolke'-Modus (DNS only / unproxied). Der Datenverkehr fließt direkt und verschlüsselt über Traefik auf den eigenen Server – ohne zwischengeschaltete US-Proxies oder Serverless-Layer.
Fragen zum Thema? Schreiben Sie mir – ich antworte in der Regel innerhalb eines Werktags.