Umami auf einem Managed VPS zu hosten heißt, die Statistiken Ihrer Websites auf einer Maschine zu bewahren, die Ihnen gehört und die unsere Teams aktuell halten und Tag und Nacht beaufsichtigen. Umami ist freie Software unter der MIT-Lizenz, die den Besucherverkehr ohne Cookies misst. Dieser Leitfaden folgt der offiziellen Dokumentation: die Installation mit Docker Compose und PostgreSQL, HTTPS, die erste Anmeldung, das Tracking-Skript, was das Projekt zu personenbezogenen Daten sagt, nützliche Einstellungen, Backups und Updates.
Von Simon Vasconcelos Lee
Veröffentlicht am 15. November 2026Lesezeit: 12 Minuten
APP_SECRET und TWO_FACTOR_ENCRYPTION_KEY per Zufall, betreiben Sie Umami über HTTPS unter einer eigenen Subdomain und ändern Sie dann sofort das Passwort des Kontos admin.<head> Ihrer Seiten: Der Tracker verwendet keine Cookies.pg_dump, bewahren Sie die Datei .env sicher auf und aktualisieren Sie mit docker compose pull.Umami ist eine quelloffene Plattform für Web- und Produktanalyse. Seine Dokumentation beschreibt ein Werkzeug, das Besucherverkehr, Kampagnen, Besucherverhalten, Conversions, Bindung und Umsatz zusammenführt, vom ersten Besuch bis zu den Ergebnissen, die für Ihr Unternehmen zählen. Es ist in TypeScript auf Basis von Next.js geschrieben, und sein Docker-Image läuft unter einem Konto ohne Sonderrechte.
Eine Instanz verfolgt mehrere Websites: Jede erhält ihre eigene ID und ihr eigenes Tracking-Skript, und Ihre Kolleginnen und Kollegen finden sich über Konten und Teams zurecht.
Umami wird unter der MIT-Lizenz veröffentlicht, im Namen von Umami Software, Inc. Sie gewährt kostenlos das Recht, die Software zu nutzen, zu kopieren, zu ändern, zusammenzuführen, zu veröffentlichen, zu verbreiten, unterzulizenzieren und Kopien davon zu verkaufen. Sie können sie also für Ihr Unternehmen und für die Websites Ihrer Kunden betreiben, ohne eine Lizenz zu kaufen.
Ihre einzige Bedingung: Der Urheberrechtshinweis und der Erlaubnishinweis begleiten alle Kopien oder wesentlichen Teile der Software. Wie jede MIT-Lizenz stellt sie die Software „wie besehen“ bereit, ohne Gewährleistung.
Die Dokumentation stellt Umami als Analyse ohne Cookies vor, ohne websiteübergreifendes Tracking und ohne automatische Erhebung personenbezogener Daten. Selbst gehostet, bewahrt es Ihre Statistiken auf Ihrem eigenen Server: Sie entscheiden, wo sie liegen und wie lange sie bleiben.
| Frage | Was das Projekt sagt | Quelle |
|---|---|---|
| Cookies | Der Web-Tracker verwendet keine Cookies; ob Ihre Website einen Cookie-Hinweis braucht, hängt von den anderen Diensten ab, die Sie nutzen, und von den geltenden Anforderungen | FAQ |
| Erhobene Daten | Seitenaufrufe, Verweis-URLs, Browser, Betriebssysteme, Gerätetypen und ungefährer Standort | FAQ |
| IP-Adresse | Die Tabelle der Sitzungen hat keine Spalte für die IP-Adresse; eine Sitzungs-ID ist ein Hash aus der Website, der Adresse, dem Browser und einem Salt, der standardmäßig jeden Monat wechselt | Schema und Code, Version 3.4.1 |
| Aufbewahrung | Selbst gehostet werden die Daten aufbewahrt, bis Sie sie löschen | FAQ |
| DSGVO | Umami ist mit Blick auf den Datenschutz entworfen, und die Konformität hängt davon ab, wie Sie es konfigurieren und nutzen | FAQ |
| Daten, die Sie senden | Eine Besucher-ID oder Ereigniseigenschaften, die Sie zu senden beschließen, liegen in Ihrer Verantwortung | Einführung |
Drei Einstellungen des Tracking-Skripts gehen auf Wunsch weiter: data-exclude-search entfernt die Suchparameter aus den erfassten URLs, data-exclude-hash entfernt den Hash, und data-do-not-track schaltet das Tracking für Browser ab, die die Präferenz Do Not Track übermitteln. Die Dokumentation weist darauf hin, dass diese letzte Einstellung für sich allein keine vollständige Lösung für das Einwilligungsmanagement ist.
Wenn Sie angemeldete Besucher mit data-distinct-id oder umami.identify() identifizieren, empfiehlt die Dokumentation eine interne Nutzer-ID oder einen Hash statt einer E-Mail-Adresse: Der Wert ist im HTML der Seite lesbar.
Das Repository liefert eine docker-compose.yml, die Umami und seine PostgreSQL-Datenbank startet. Seit Version 3 ist PostgreSQL die einzige unterstützte Datenbank, mindestens in Version 12.14, und die Dokumentation empfiehlt, sie auf die Zeitzone UTC einzustellen. Legen Sie auf einem Server, auf dem Docker installiert ist, einen Ordner an und beginnen Sie mit den Geheimnissen, per Zufall mit openssl erzeugt, wie es die Dokumentation vorschlägt:
cat > .env <<EOF
POSTGRES_PASSWORD=$(openssl rand -hex 24)
APP_SECRET=$(openssl rand -hex 32)
TWO_FACTOR_ENCRYPTION_KEY=$(openssl rand -hex 32)
EOF
chmod 600 .env
Legen Sie dann diese compose.yaml daneben. Sie folgt der Datei des Projekts in Version 3.4.1, mit zwei Änderungen: Die Geheimnisse kommen aus der Datei .env, und der Port wird nur auf 127.0.0.1 veröffentlicht.
services:
umami:
image: ghcr.io/umami-software/umami:latest
ports:
- "127.0.0.1:3000:3000"
environment:
DATABASE_URL: postgresql://umami:${POSTGRES_PASSWORD}@db:5432/umami
APP_SECRET: ${APP_SECRET}
TWO_FACTOR_ENCRYPTION_KEY: ${TWO_FACTOR_ENCRYPTION_KEY}
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
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
volumes:
umami-db-data:
docker compose up -d
curl -s http://127.0.0.1:3000/api/heartbeat
DATABASE_URL: die einzige Pflichtvariable, die Verbindungszeichenkette der Datenbank. Das hexadezimale Passwort wird unverändert eingesetzt; ein Passwort mit Sonderzeichen müsste prozentkodiert werden.APP_SECRET: eine zufällige Zeichenkette, die die Authentifizierungstoken absichert, für jede Installation eigen. Im Code der Version 3.4.1 fließt sie auch in die Berechnung der Sitzungs-IDs ein: Halten Sie sie stabil.TWO_FACTOR_ENCRYPTION_KEY: 64 hexadezimale Zeichen, die die Geheimnisse der Zwei-Faktor-Authentifizierung verschlüsseln. Ohne ihn kann niemand die Zwei-Faktor-Authentifizierung aktivieren.admin an. Die Prüfadresse /api/heartbeat antwortet {"ok":true}, sobald Umami bereit ist.latest folgt der zuletzt veröffentlichten Version. Die Registry des Projekts veröffentlicht auch Versions-Tags wie 3.4.1, um die Version festzulegen, die Sie betreiben.Die Installationsdokumentation nennt weder Arbeitsspeicher noch Prozessor. Die Größe hängt vom Besucherverkehr der verfolgten Websites und vom Umfang der aufbewahrten Daten ab. Auf einem Managed VPS beschreiben Sie uns Ihren Einsatz, und wir empfehlen Ihnen die passende Größe.
Umami lauscht über HTTP auf Port 3000, und die Dokumentation schlägt vor, es hinter Ihrem Webserver über einen Reverse Proxy auszuliefern. Geben Sie ihm eine eigene Subdomain, etwa stats.example.com, die mit A- und AAAA-Einträgen auf den Server zeigt. Umami unter einem Pfad auszuliefern, läuft über BASE_PATH, eine Variable, die beim Bau der Anwendung gelesen wird: Mit dem veröffentlichten Image ist die Subdomain der direkte Weg.
Der Proxy muss außerdem die Adresse des Besuchers weitergeben. Umami liest sie aus den Headern, die es erhält, darunter X-Real-IP und X-Forwarded-For: Es nutzt sie, um Besucher zu unterscheiden und ihr Land zu bestimmen. Wenn Ihr Proxy einen anderen Header verwendet, benennt ihn CLIENT_IP_HEADER.
Caddy bezieht das Zertifikat von Let’s Encrypt und aktiviert HTTPS selbstständig. Seine Direktive reverse_proxy setzt standardmäßig X-Forwarded-For: Diese drei Zeilen genügen.
stats.example.com {
reverse_proxy 127.0.0.1:3000
}
Dieser Block folgt dem Nginx-Beispiel der Umami-Dokumentation und lauscht auf Port 80, damit Certbot HTTPS einrichten kann:
server {
listen 80;
listen [::]:80;
server_name stats.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Certbot richtet anschließend das Zertifikat ein und kümmert sich um die Erneuerung:
sudo certbot --nginx
Wenn Umami seine Datenbank anlegt, eröffnet es ein Administratorkonto: Benutzername admin, Passwort umami. Die Dokumentation bittet darum, dieses Passwort bei der ersten Anmeldung zu ändern.
admin und umami an.Bewahren Sie TWO_FACTOR_ENCRYPTION_KEY bei Ihren Backups auf: Die Dokumentation warnt, dass der Verlust oder die Änderung dieses Schlüssels die gespeicherten Geheimnisse unlesbar macht, und jeder Nutzer muss sich dann erneut für die Zwei-Faktor-Authentifizierung registrieren.
<head> Ihrer Seiten und besuchen Sie dann Ihre Website: Die Daten erscheinen sofort im Dashboard.<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>
next/script ein statt mit einem einfachen Tag <script>.data-domains beschränkt das Tracking auf Ihre Produktionsdomains, was Ihre Testumgebungen aus den Statistiken heraushält.localStorage.setItem('umami.disabled', 1).Manche Werbeblocker sperren alles, was nach Analyse aussieht. Selbst gehostet wird Umami bereits von Ihrer eigenen Domain ausgeliefert, und zwei Variablen gehen weiter: TRACKER_SCRIPT_NAME gibt dem Skript einen anderen Namen als script.js, und COLLECT_API_ENDPOINT benennt den Erfassungsendpunkt um, statt /api/send. Das Skript ruft den neuen Endpunkt dann selbst auf; auf Ihren Seiten ändert sich nur die Quelle des Tracking-Codes.
TRACKER_SCRIPT_NAME: "stats.js"
COLLECT_API_ENDPOINT: "/api/collect"
Diese Umgebungsvariablen kommen in den Dienst umami der compose.yaml, danach erstellt docker compose up -d den Container neu, damit er sie übernimmt:
| Variable | Was sie tut | Wert |
|---|---|---|
DISABLE_TELEMETRY | Schaltet die anonyme Telemetrie ab, die Umami an das Projekt schickt, um die Anwendung zu verbessern | 1 |
PRIVATE_MODE | Schaltet alle externen Netzwerkaufrufe ab, darunter die Website-Symbole, die standardmäßig von DuckDuckGo kommen | 1 |
DISABLE_UPDATES | Schaltet die Prüfung auf neue Versionen ab | 1 |
IGNORE_IP | Schließt IP-Adressen und CIDR-Bereiche von der Erfassung aus, etwa die Ihrer Büros | Eine kommagetrennte Liste |
SALT_ROTATION | Legt fest, wie oft der Salt hinter den Sitzungs-IDs wechselt | Standardmäßig month |
REDIS_URL | Ergänzt einen Redis-Cache, den die Dokumentation für Websites mit viel Besucherverkehr oder für mehrere Instanzen empfiehlt | Ihre Redis-Adresse |
MCP_ENABLED | Öffnet den Endpunkt /mcp: Ihr KI-Assistent liest Ihre Statistiken mit Lesezugriff, mit einem API-Schlüssel, den Sie unter Settings, API keys anlegen | 1 |
Alles, was Umami aufbewahrt, liegt in seiner PostgreSQL-Datenbank: Konten, Websites, Teams und Statistiken. Exportieren Sie sie jeden Tag und unmittelbar vor jedem Update: Selbst gehostet werden diese Daten ohne zeitliche Grenze aufbewahrt. Neben der Datenbank enthält die Datei .env die Geheimnisse, die sie nutzbar machen:
| Element | Was es enthält | Zu sichern |
|---|---|---|
| Die PostgreSQL-Datenbank | Konten, Websites, Teams, Berichte und alle Statistiken | Pflicht, mit pg_dump |
.env | Das Datenbankpasswort, APP_SECRET und der Schlüssel der Zwei-Faktor-Authentifizierung | Pflicht, verschlüsselt |
compose.yaml | Die Konfiguration Ihrer Instanz | Empfohlen |
pg_dump erstellt einen konsistenten Export, während die Datenbank in Gebrauch ist. Das benutzerdefinierte Format, -Fc, ist komprimiert und wird mit pg_restore wiederhergestellt:
docker compose exec -T db pg_dump -U umami -d umami -Fc > umami-$(date +%F).dump
Planen Sie diesen Befehl auf dem Server mindestens einmal täglich, räumen Sie die Exporte auf, die sich ansammeln, und schicken Sie eine Kopie an einen anderen Ort. Auf der Festplatte des Servers abgelegt, fließen diese Exporte auch in dessen nächtliche Backups ein.
docker compose stop umami.docker compose stop umami
docker compose exec -T db pg_restore -U umami -d umami --clean --if-exists < umami-YYYY-MM-DD.dump
docker compose start umami
Wiederholen Sie diese Übung von Zeit zu Zeit, an einer Kopie: So prüfen Sie, dass ein Backup funktioniert.
Die Dokumentation nennt zwei Befehle, auszuführen im Ordner der compose.yaml. Die Datenbank bleibt in ihrem Volume:
docker compose pull
docker compose up --force-recreate -d
Beim Neustart wendet der Container die Schemamigrationen selbst an. Version 3.4.0 vom 17. September 2026 brachte zwei davon mit, für Anmerkungen und API-Schlüssel; Version 3.4.1 vom 23. Oktober 2026 bringt keine. Nach einem großen Versionssprung, etwa dem Wechsel auf Version 3, schlägt die Dokumentation vor, in PostgreSQL ANALYZE auszuführen, damit die Dashboards wieder ihre Geschwindigkeit erreichen:
docker compose exec db psql -U umami -d umami -c "ANALYZE;"
postgres:15-alpine der Datei. Der Wechsel auf eine neue Hauptversion von PostgreSQL erfordert Export und Wiederherstellung oder pg_upgrade.Beim Selbsthosting müssen Sie neben der Anwendung auch den Server betreuen. Auf einem Managed VPS übernehmen unsere Teams den Server und betreuen Ihre Instanz proaktiv; Umami bleibt Ihre Software, mit ihren Einstellungen und Daten.
| Thema | Unsere Teams | Sie |
|---|---|---|
| Der Server | System- und Sicherheitsupdates, Eingriffe am Server inbegriffen | Der Zeitpunkt, der zu Ihrem Betrieb passt |
| Die Überwachung | Server rund um die Uhr im Blick, mit Eingriff, ohne auf Ihren Anruf zu warten | Das Lesen der Protokolle Ihrer Instanz |
| Umami | Proaktive Betreuung: Fehler, lange Antwortzeiten und Speicherplatz erkannt, Korrektur empfohlen | Installation, Updates und Einstellungen, die Sie umsetzen, selbst oder mit Ihrem KI-Assistenten |
| Die Websites und die Statistiken | Der Server, der sie trägt, überwacht und gesichert | Die Konten, die verfolgten Websites, das Tracking-Skript und die Aufbewahrungsdauer der Daten |
| Die Backups | Jede Nacht, verschlüsselt und außerhalb der Maschine aufbewahrt; Wiederherstellung inbegriffen | Die eigenen Exporte von Umami und die Wiederherstellungsanfrage, wenn Sie sie brauchen |
| Die Migration | Ihr aktueller Server wird kostenlos migriert | Der Zeitpunkt der Umstellung |
Wenn unsere Teams lieber in der Anwendung selbst eingreifen sollen, wird diese Leistung nach Stunden oder pauschal abgerechnet, mit einem Kostenvoranschlag vor dem Eingriff.
Mit einem Managed VPS von Simafri halten unsere Teams den Server Ihrer Umami-Instanz aktuell, überwachen ihn Tag und Nacht und greifen ein, ohne auf Ihren Anruf zu warten; sie betreuen auch Ihre Instanz proaktiv und empfehlen Ihnen die sinnvollen Korrekturen, die Sie umsetzen, selbst oder mit Ihrem KI-Assistenten. Die Backups werden jede Nacht verschlüsselt und außerhalb der Maschine aufbewahrt, ihre Wiederherstellung ist inbegriffen, und die Migration Ihres aktuellen Servers ist kostenlos.
Ja. Umami steht unter der MIT-Lizenz: Sie können es im Unternehmen nutzen, ändern und weitergeben, ohne eine Lizenz zu kaufen, sofern Sie seinen Urheberrechtshinweis beibehalten. Bleiben die Kosten für den Server, auf dem es läuft.
Nein. Die FAQ des Projekts stellt klar, dass der Web-Tracker von Umami keine Cookies verwendet. Ob Ihre Website einen Cookie-Hinweis braucht, hängt von den anderen Diensten ab, die Sie darauf nutzen, und von den geltenden Anforderungen.
Seit Version 3 nicht mehr: Umami unterstützt PostgreSQL, mindestens in Version 12.14. Eine Instanz der Version 2 mit MySQL überträgt ihre Daten zuerst mit dem Migrationsleitfaden des Projekts nach PostgreSQL und wechselt dann auf Version 3.
Gehen Sie von der docker-compose.yml des Projekts aus, die Umami und PostgreSQL startet, mit zufälligen Geheimnissen in einer Datei .env und dem auf 127.0.0.1 veröffentlichten Port. Starten Sie docker compose up -d und stellen Sie dann einen Reverse Proxy mit HTTPS davor, auf einer Subdomain.
Bei der Installation legt Umami ein Konto admin mit dem Passwort umami an. Ändern Sie es bei der ersten Anmeldung, unter Settings und dann Profile, und aktivieren Sie die Zwei-Faktor-Authentifizierung im Reiter Security, sobald TWO_FACTOR_ENCRYPTION_KEY gesetzt ist.
Auf einer selbst gehosteten Instanz gibt TRACKER_SCRIPT_NAME dem Skript einen anderen Namen als script.js, und COLLECT_API_ENDPOINT benennt den Erfassungsendpunkt /api/send um. Ändern Sie dann die Quelle des Tracking-Codes auf Ihren Seiten.
Exportieren Sie die PostgreSQL-Datenbank täglich mit pg_dump aus dem Datenbank-Container und bewahren Sie die Datei .env getrennt auf, denn sie enthält APP_SECRET und den Schlüssel der Zwei-Faktor-Authentifizierung. Stellen Sie mit pg_restore wieder her und testen Sie die Wiederherstellung regelmäßig.
Ein Managed VPS deckt den Server ab: System, Sicherheit, Überwachung und Backups. Unsere Teams betreuen auch Ihre Instanz proaktiv und empfehlen Ihnen die sinnvollen Korrekturen, die Sie umsetzen. Ein Eingriff in der Anwendung wird nach Stunden oder pauschal abgerechnet.
Simafri
Sprechen wir über Ihr Vorhaben
Sagen Sie uns in wenigen Worten, was Sie brauchen: Wir melden uns schnell bei Ihnen.
Vielen Dank! Ihre Anfrage wurde gesendet. Wir melden uns in Kürze bei Ihnen.
Sie schreiben lieber eine E-Mail? Schreiben Sie uns an support@simafri.com.