Zum Inhalt

Umami-Webanalyse mit Docker installieren

Veröffentlicht am 22. August 2026 · Geschätzte Lesezeit: 4 Minuten

Umami zeigt Seitenaufrufe, Besucher, Herkunftsseiten und verwendete Geräte für deine eigene Webseite an. Die Messdaten landen in deiner PostgreSQL-Datenbank statt bei einem fremden Analysedienst. Für Installation, Absicherung und den ersten Test solltest du ungefähr 30 Minuten einplanen.

Voraussetzungen

  • Ein Server mit Docker und Docker Compose
  • Mindestens 1 GB freier Arbeitsspeicher
  • Ein freier TCP-Port 3000
  • Zugriff auf den HTML-Code der zu messenden Webseite

1. Projektordner anlegen

Führe diesen Befehl auf dem Docker-Server aus:

mkdir -p ~/umami && cd ~/umami

2. Sichere Zugangswerte erzeugen

Der folgende Befehl erstellt eine .env-Datei mit einem zufälligen Datenbankpasswort und einem Anwendungsschlüssel:

printf 'POSTGRES_PASSWORD=%s\nAPP_SECRET=%s\n' "$(openssl rand -hex 24)" "$(openssl rand -hex 32)" > .env

Beschränke den Zugriff auf deinen Benutzer:

chmod 600 .env

Datei geheim halten

Die .env-Datei enthält Zugangsdaten. Lade sie nicht in ein öffentliches Repository und bewahre Sicherungskopien verschlüsselt auf.

3. Compose-Datei anlegen

Lege im Ordner ~/umami eine Datei namens compose.yaml an:

services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    container_name: umami
    restart: unless-stopped
    init: true
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami
      APP_SECRET: ${APP_SECRET}
    depends_on:
      db:
        condition: service_healthy
    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
    restart: unless-stopped
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      TZ: UTC
    volumes:
      - umami-db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5

volumes:
  umami-db-data:
    name: umami-db-data

PostgreSQL erhält absichtlich keinen Host-Port. Nur der Umami-Container kann die Datenbank über das interne Compose-Netz erreichen.

4. Container starten

Starte Anwendung und Datenbank:

docker compose up -d

Prüfe den Zustand beider Container:

docker compose ps

Falls Umami nicht startet, zeige die letzten Protokollzeilen an:

docker compose logs --tail=100 umami db

5. Erste Anmeldung absichern

Öffne http://<server-ip>:3000 im Browser. Ersetze <server-ip> durch die IP-Adresse deines Docker-Servers. Melde dich mit den offiziellen Standarddaten an:

  • Benutzername: admin
  • Passwort: umami

Ändere das Passwort sofort unter den Profileinstellungen.

Standardpasswort sofort ändern

Mit den bekannten Standarddaten kann sich jeder anmelden, der den Dienst erreicht. Veröffentliche Umami erst nach dem Passwortwechsel und ausschließlich über HTTPS.

6. Webseite hinzufügen

Öffne in Umami Settings → Websites → Add website. Vergib einen Namen und trage die Domain deiner Webseite ein. Nach dem Speichern zeigt Umami einen Tracking-Code an.

Kopiere diesen Code unverändert in den <head>-Bereich deiner Webseite. Er enthält eine individuelle Website-ID und sieht ungefähr so aus:

<script defer src="https://<umami-domain>/script.js" data-website-id="<website-id>"></script>

Ersetze <umami-domain> durch die öffentlich per HTTPS erreichbare Umami-Adresse. <website-id> übernimmst du exakt aus Umami. Verwende keine erfundene ID.

HTTPS für öffentliche Webseiten

Eine öffentlich erreichbare Webseite sollte das Tracking-Skript ebenfalls über HTTPS laden. Andernfalls blockieren Browser den unsicheren Inhalt. Verwende dafür einen Reverse Proxy mit gültigem Zertifikat.

7. Ersten Seitenaufruf prüfen

Öffne deine Webseite in einem neuen privaten Browserfenster und wechsle danach zurück zum Umami-Dashboard. Der Aufruf sollte nach kurzer Zeit in der Echtzeitansicht erscheinen.

Falls nichts ankommt, öffne die Entwicklerwerkzeuge des Browsers und prüfe, ob script.js geladen wird. Werbe- und Tracking-Blocker können das Skript absichtlich sperren.

8. Datenbank sichern

Dieser Befehl wird im Umami-Projektordner ausgeführt. Er erstellt mit pg_dump eine portable SQL-Sicherung auf dem Docker-Server:

docker compose exec -T db pg_dump -U umami -d umami > umami-backup-$(date +%F-%H%M).sql

Prüfe, ob die Datei existiert und nicht leer ist:

ls -lh umami-backup-*.sql

Sichere zusätzlich compose.yaml und .env verschlüsselt auf einem anderen Gerät.

9. Aktualisieren und zurückgehen

Erstelle vor jeder Aktualisierung eine Datenbanksicherung. Lade anschließend die Images und baue die Container neu:

docker compose pull
docker compose up -d

Prüfe Anmeldung, Dashboard und einen neuen Seitenaufruf. Für einen Rückweg benötigst du die vorher verwendeten Image-Tags, die gesicherte .env-Datei und den SQL-Dump. Ändere die PostgreSQL-Hauptversion niemals durch bloßes Austauschen des Image-Tags; dafür ist eine geplante Datenbankmigration nötig.

10. Typische Fehler beheben

  • Umami bleibt beim Start hängen: Prüfe zuerst den Gesundheitszustand und die Protokolle der Datenbank.
  • Anmeldung funktioniert nicht: Teste die Standarddaten nur beim ersten Start und kontrolliere anschließend dein neues Passwort.
  • Keine Seitenaufrufe sichtbar: Prüfe Website-ID, Skriptadresse, HTTPS und einen möglicherweise aktiven Blocker.
  • Port 3000 ist belegt: Ändere links in "3000:3000" den Host-Port und passe nur die Browseradresse an.
  • Datenbankfehler nach einem Update: Spiele nicht sofort alte Volume-Dateien ein, sondern sichere den aktuellen Zustand und prüfe die offiziellen Upgrade-Hinweise.

11. Quellen und Videos

Fertig

Umami läuft nun mit einer privaten PostgreSQL-Datenbank und erfasst Aufrufe deiner eingebundenen Webseite. Öffne eine Testseite und kontrolliere die Echtzeitansicht. Erscheint der Aufruf dort, arbeitet die Webanalyse korrekt.