Gotify per Docker installieren: Private Push-Benachrichtigungen für Server und Smart Home¶
Veröffentlicht am 16. Oktober 2026 · Geschätzte Lesezeit: 7 Minuten
Gotify ist ein schlanker Open-Source-Push-Server, der Nachrichten von Skripten, Cronjobs, Backups oder Smart-Home-Diensten per REST-API entgegennimmt und über WebSocket an Browser oder die offizielle Android-App weiterleitet.[1] Jede Nachrichtenquelle bekommt einen eigenen Application Token. Clients (Web-UI, Android-App) empfangen die Meldungen in Echtzeit – kein Drittanbieter, keine Cloud. Die Installation mit Docker Compose dauert etwa 25 Minuten. Im Anschluss sendest du die erste Testnachricht per curl.[4]
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose (Plugin)
- Terminal-Zugriff mit
sudo-Rechten - Port 8080 im Heimnetz frei
- Die feste LAN-IP deines Docker-Hosts (für den späteren Zugriff)
- Ein Android-Gerät (optional, für die offizielle App)
1. Projektverzeichnis und Passwort-Datei anlegen¶
Lege einen geschützten Ordner für Gotify an. Das Admin-Passwort wird in einer separaten Datei gespeichert und nie in die Compose-Datei geschrieben:
Erzeuge ein sicheres Zufallspasswort und schütze die Datei vor unbefugtem Lesen. umask 077 stellt sicher, dass die Datei nur für den eigenen Benutzer lesbar ist:
Die Datei secrets/admin_password.txt enthält jetzt genau eine Zeile mit dem Initialpasswort. Notiere es nicht zusätzlich – du liest es beim ersten Login aus dieser Datei aus.
2. docker-compose.yml anlegen¶
Erstelle die Datei docker-compose.yml im Verzeichnis ~/docker/gotify. Gotify hat keine externen Abhängigkeiten – kein separater Datenbankserver, kein Cache. Ein Container, ein Volume:[1]
services:
gotify:
image: gotify/server:3.1.1
container_name: gotify
restart: unless-stopped
ports:
- "${BIND_IP}:8080:80"
environment:
TZ: "${TZ}"
GOTIFY_DEFAULTUSER_PASS_FILE: /run/secrets/admin_password
volumes:
- gotify_data:/app/data
security_opt:
- no-new-privileges:true
secrets:
admin_password:
file: ./secrets/admin_password.txt
volumes:
gotify_data:
Die wichtigsten Details:
image: gotify/server:3.1.1– Gepinnte Version stattlatest, damit ein Update nicht unerwartet die Konfiguration ändert. Version 3.1.1 war bei Veröffentlichung dieser Anleitung die aktuelle stabile Version.[6] Prüfe vor dem ersten Start, ob eine neuere Version auf GitHub Releases verfügbar ist.ports: "${BIND_IP}:8080:80"– Der Host-Port 8080 wird nur auf einer bestimmten LAN-IP veröffentlicht (konfiguriert in der.env-Datei). Kein0.0.0.0, kein Zugriff von außerhalb des Heimnetzes.GOTIFY_DEFAULTUSER_PASS_FILE: /run/secrets/admin_password– Das_FILE-Suffix teilt Gotify mit, das Passwort aus einer Datei zu lesen.[2] So bleibt das Geheimnis aus der Compose-Datei und aus Umgebungsvariablen indocker compose psheraus.no-new-privileges:true– Verhindert, dass Prozesse im Container höhere Rechte anfordern können.[5]volumes: gotify_data:/app/data– Ein benannter Volume statt eines Host-Ordners für die persistente SQLite-Datenbank. Das ist die einfachste Variante, die Daten später zu sichern.
3. .env-Datei anlegen¶
Damit die IP-Adresse und Zeitzone nicht fest in der Compose-Datei stehen, legst du eine .env-Datei an:[1]
Ersetze 192.168.178.20 durch die tatsächliche feste LAN-IP deines Docker-Hosts. Ist noch keine DHCP-Reservierung eingerichtet, vergib eine statische IP im Router oder stelle den Dienst mit 127.0.0.1 nur lokal bereit.
4. Konfiguration validieren und starten¶
Prüfe die Compose-Datei auf Syntaxfehler. Achte darauf, dass das Passwort selbst nicht im Output auftaucht – es erscheint nur der Secret-Dateipfad:
Lade das Image herunter und starte Gotify:
Prüfe, ob der Container läuft:
Sieh dir die letzten Log-Meldungen an. Erwartet wird ein sauberer Start ohne Datenbank- oder Berechtigungsfehler:
5. Erstanmeldung¶
Gotify erstellt beim ersten Start automatisch ein Admin-Konto.[3] Lies das generierte Passwort aus der Secret-Datei:
Öffne im Browser:
Ersetze <SERVER-IP> durch die IP deines Docker-Hosts (identisch mit BIND_IP aus der .env).
Melde dich an:
- Benutzername:
admin - Passwort: der Inhalt aus
admin_password.txt
Standard-Passwort sofort ändern
Das in der Secret-Datei gespeicherte Passwort ist das Initialpasswort. Nach der ersten Anmeldung solltest du unter Users das Admin-Passwort ändern oder ein zweites Administrator-Konto anlegen und das initiale Konto löschen.[3]
6. Application Token erstellen¶
Anders als bei ntfy (topic-basiert) verwendet Gotify Application Tokens: Jede Nachrichtenquelle (Backup-Skript, Cronjob, Home Assistant) bekommt ihren eigenen Token.[1]
- Klicke in der Web-UI auf Apps
- Klicke auf Create Application
- Gib einen Namen ein, z. B.
Server-BackupoderCronjob-Meldungen - Kopiere den angezeigten Token (beginnt mit
A)
Jede Anwendung erhält einen eigenen Token. Erstelle für verschiedene Zwecke separate Anwendungen – das erleichtert später die Fehlersuche.
7. Testnachricht senden¶
Sende die erste Nachricht mit curl. Ersetze <APPLICATION-TOKEN> durch den kopierten Token:
curl "http://<SERVER-IP>:8080/message?token=<APPLICATION-TOKEN>" \
-F "title=Gotify läuft" \
-F "message=Herzlichen Glückwunsch! Der Push-Server funktioniert." \
-F "priority=5"
Die Nachricht erscheint sofort im Browser und (sobald verbunden) auf dem Smartphone.[4]
Bedeutung der Parameter:
title– Der Titel der Benachrichtigung (optional, wird ohne Titel leer dargestellt)message– Der Nachrichtentextpriority– Priorität von 0 (still, keine Benachrichtigung) bis 10 (höchste Dringlichkeit, überwindet "Nicht stören" auf Android)[4]
8. Android-App verbinden (optional)¶
Die offizielle Gotify-Android-App ist im F-Droid-Store und auf GitHub verfügbar.[5] Nach der Installation:
- Gib als Server-URL
http://<SERVER-IP>:8080/ein (oder die HTTPS-Adresse mit Reverse Proxy) - Melde dich mit deinem Benutzernamen und Passwort an
- Die App baut eine dauerhafte WebSocket-Verbindung auf
Hintergrundbetrieb auf dem Smartphone
Android beendet Hintergrundverbindungen oft nach einiger Zeit. Gehe zu Einstellungen → Apps → Gotify → Akku und setze die Optimierung auf Nicht optimieren oder Uneingeschränkt. Ohne diesen Schritt kann es passieren, dass Nachrichten auf dem Smartphone erst beim Öffnen der App ankommen.
9. Backup und Rückweg¶
Gotify speichert alle Daten (Benutzer, Anwendungen, Nachrichten, hochgeladene Bilder) im benannten Volume gotify_data. Sichere es regelmäßig:
docker run --rm -v gotify_data:/data -v "$(pwd):/backup" alpine \
tar czf /backup/gotify-backup-$(date +%F).tar.gz -C /data .
Das Archiv enthält die SQLite-Datenbank mit allen Nachrichtentexten und muss entsprechend geschützt aufbewahrt werden.
Für den Rückweg nach einem fehlgeschlagenen Update:
docker compose down
docker compose rm -f gotify
docker volume rm gotify_gotify_data
docker compose up -d
Dann die Datenbank aus dem Backup wiederherstellen. Dazu den Container wieder stoppen, das Volume über ein temporäres Alpine-Container mounten und das Archiv einspielen.
Nachrichtentexte in der Datenbank
Gotify speichert alle Nachrichtentexte im Klartext in der SQLite-Datenbank. Wenn du vertrauliche Inhalte (Passwörter, API-Keys) per Gotify sendest, sind diese im Klartext in der Datenbank und im Backup vorhanden. Sende keine Geheimnisse über Push-Benachrichtigungen.
10. Typische Fehler¶
- "address already in use" – Port 8080 ist bereits belegt. Ändere den Host-Port in der
docker-compose.yml(z. B.8081:80). - Oberfläche nicht erreichbar – Falsche
BIND_IPin der.env. Prüfe die tatsächliche IP des Docker-Hosts mithostname -I. - Container startet nicht – Rechte auf
gotify_dataprüfen. Lösche das Volume mitdocker volume rm gotify_gotify_dataund starte neu. - Anmeldung schlägt fehl – Das Passwort aus
secrets/admin_password.txtstimmt nicht oder die Datenbank wurde bereits initialisiert. Lösche Volume und Secret-Datei und beginne neu. - HTTP 401 beim Senden – Falscher oder abgelaufener Application Token. Prüfe den Token in der Web-UI unter Apps.
- Smartphone erhält nichts – Android-Akkuoptimierung blockiert die App. Setze die Akku-Optimierung wie oben beschrieben zurück. Ohne VPN funktioniert Gotify nur im Heimnetz.
- Reverse Proxy ohne WebSocket-Weiterleitung – Gotify benötigt WebSocket (WSS) für Echtzeit-Nachrichten. Ein Reverse Proxy muss
Upgrade- undConnection-Header korrekt weiterleiten.[1] Gotify stellt dafür Proxy-Beispiele bereit.
Fertig¶
Deine private Gotify-Instanz nimmt jetzt Nachrichten entgegen und zeigt sie im Browser und auf dem Smartphone an. Die Einrichtung funktioniert, wenn:
docker compose configkeine Fehler anzeigtdocker compose psden Container alsrunningzeigtdocker compose logs --tail=50 gotifykeine Datenbank- oder Berechtigungsfehler enthält- Die Web-UI unter
http://<SERVER-IP>:8080/erreichbar ist - Die Anmeldung mit
adminund dem Passwort aus der Secret-Datei gelingt - Die
curl-Testnachricht im Browser erscheint docker compose restart gotifyden Dienst ohne Datenverlust neu startet
Quellen¶
[1] Gotify Installation (offiziell) – https://gotify.net/docs/install [2] Gotify Konfiguration (offiziell) – https://gotify.net/docs/config [3] Gotify Erstanmeldung (offiziell) – https://gotify.net/docs/first-login [4] Gotify Push-Nachrichten (offiziell) – https://gotify.net/docs/pushmsg [5] Docker Hub gotify/server – https://hub.docker.com/r/gotify/server [6] Gotify GitHub Releases – https://github.com/gotify/server/releases/latest