Apprise ist ein flexibles Open-Source-Benachrichtigungstool, das es ermöglicht, Nachrichten an über 80 verschiedene Plattformen und Dienste gleichzeitig zu senden. Unterstützt werden unter anderem E-Mail, Matrix, Slack, Discord, Telegram, SMS-Gateways und viele weitere. Der große Vorteil von Apprise ist, dass wir mit nur einer einheitlichen Schnittstelle unterschiedliche Benachrichtigungssysteme ansprechen können – ideal für Automatisierungen, Monitoring-Tools oder eigene Skripte.
👉 Offizielle Projektseite: Apprise auf GitHub
0. Versionierung
Datum | Änderung |
---|---|
29.08.2025 | Initialer Release |
1. Zielsetzung
Wir möchten Apprise nutzen, um Benachrichtigungen aus unseren Anwendungen und Containern an verschiedene Dienste zu versenden. Damit schaffen wir eine flexible Möglichkeit, Warnungen, Statusmeldungen oder Informationen automatisiert weiterzuleiten, ohne für jeden Dienst eine eigene Integration bauen zu müssen.
2. Voraussetzung
Bevor wir mit der Installation und Konfiguration von Apprise beginnen, stellen wir sicher, dass einige grundlegende Voraussetzungen erfüllt sind. Am wichtigsten ist eine funktionierende Docker- und Docker-Compose-Umgebung, da wir Apprise containerisiert betreiben möchten. Zusätzlich sollte bereits eine Traefik V3 Installation, Konfiguration und CrowdSec-Security vorhanden sein, damit wir Apprise sicher und erreichbar in unsere bestehende Infrastruktur einbinden können.
3. Verzeichnisse / Dateien anlegen
Um mit der Installation und Konfiguration von Apprise zu beginnen, müssen wir zuerst die notwendigen Verzeichnisse und Dateien erstellen. Dazu erstellen wir ein Hauptverzeichnis für Zammad und verschiedene Dateien, die wir im Verlauf dieser Anleitung benötigen.
Führen Sie die folgenden Befehle in Ihrer Linux-Shell aus, um das Verzeichnis und die Dateien zu erstellen:
# Hier erstellen wir das Hauptverzeichnis und ein Unterverzeichnis für Apprise mkdir -p /opt/containers/apprise-api/{config,data}
Sie dienen als Grundlage für die Installation und Konfiguration von Apprise in den nachfolgenden Schritten.
4. Erstellung der docker-compose.yml
4.1. docker-compose.yml
Im nächsten Schritt erstellen wir die docker-compose.yml, mit der wir den Apprise-Container starten und verwalten. Wir nutzen bewusst das Image von linuxserver.io (lscr.io/linuxserver/apprise-api), da diese Images meist schlanker sind und besonderen Wert auf Sicherheit und regelmäßige Pflege legen.
Die folgende docker-compose.yml
beschreibt unseren Apprise-Dienst:
nano /opt/containers/apprise-api/docker-compose.yml
In die geöffnete Datei kopieren wir folgenden Inhalt:
services: apprise-api: image: lscr.io/linuxserver/apprise-api:latest container_name: apprise_api env_file: ./config/apprise-api.env volumes: - ./data/config:/config - ./data/attachments:/attachments restart: unless-stopped
4.2. Erstellen der docker-compose.override.yml
Das Apprise-Image könnte grundsätzlich auch ohne zusätzliche Anpassungen direkt laufen. Wir bevorzugen jedoch, alle weiteren Konfigurationen wie Netzwerkeinstellungen und Traefik-Labels in eine separate docker-compose.override.yml auszulagern. Das hat den Vorteil, dass die Hauptdatei (docker-compose.yml) schlank und unverändert bleibt, während individuelle Anpassungen übersichtlich und leichter wartbar sind.
Die docker-compose.override.yml sieht wie folgt aus:
nano /opt/containers/apprise-api/docker-compose.override.yml
Fügen Sie den folgenden Inhalt ein:
services: apprise-api: networks: proxy: labels: traefik.docker.network: proxy traefik.enable: "true" traefik.http.routers.apprise-api-secure.entrypoints: websecure traefik.http.routers.apprise-api-secure.rule: Host(`apprise.deinedomain.de`) traefik.http.routers.apprise-api-secure.service: apprise-api traefik.http.routers.apprise-api-secure.tls: "true" traefik.http.routers.apprise-api-secure.tls.certresolver: tls_resolver traefik.http.routers.apprise-api.entrypoints: web traefik.http.routers.apprise-api.rule: Host(`apprise.deinedomain.de`) traefik.http.services.apprise-api.loadbalancer.server.port: "8000" networks: proxy: external: true
Mit dieser Konfiguration binden wir den Dienst in unser bestehendes Proxy-Netzwerk ein und stellen über Traefik sowohl eine sichere HTTPS-Verbindung (websecure) als auch eine einfache HTTP-Verbindung (web) bereit.
5. Erstellung der .env-Datei
Damit unser Container die richtigen Rechte erhält und korrekt mit der Zeitzone sowie weiteren Parametern arbeitet, legen wir eine eigene Umgebungsdatei an. Diese Datei erlaubt es uns, Variablen zentral zu verwalten und später einfach anzupassen, ohne die docker-compose.yml ändern zu müssen.
Wir öffnen die neue Datei im Verzeichnis /opt/containers/apprise-api/config
:
nano /opt/containers/apprise-api/config/apprise-api.env
Inhalt der Datei:
PUID=3000 PGID=3001 TZ=Europe/Berlin APPRISE_ATTACH_SIZE=5
Erklärung:
PUID
undPGID
bestimmen, mit welcher Benutzer- und Gruppen-ID der Container läuft. Diese Werte können individuell an das eigene System angepasst werden (z. B. an den Benutzer, unter dem die Container betrieben werden).TZ
definiert die Zeitzone. Hier stellen wir sicher, dass Logfiles und Prozesse mit der richtigen lokalen Zeit arbeiten.APPRISE_ATTACH_SIZE
legt die maximale Größe von Anhängen in MB fest, die per Apprise mitgeschickt werden können.
5.1. Rechte vergeben
Wenn wir nicht den Root-User und die Root-Gruppe (also PUID=0 und PGID=0) verwenden, müssen wir die benötigten Verzeichnisse manuell anlegen und mit den passenden Rechten versehen. Besonders wichtig ist hierbei das Attachments-Verzeichnis, da Apprise dort hochgeladene Dateien speichert.
Mit folgenden Befehlen erstellen wir den Ordner und passen die Rechte entsprechend an:
mkdir -p /opt/containers/apprise-api/data/attachments chown PUID:PGID /opt/containers/apprise-api/data/attachments -R
In unserem Beispiel mit den zuvor gesetzten Werten PUID=3000 und PGID=3001 lautet der Befehl:
chown 3000:3001 /opt/containers/apprise-api/data/attachments -R
Damit stellen wir sicher, dass der Container die notwendigen Schreibrechte für Anhänge besitzt, ohne dabei den Root-User zu verwenden.
6. Apprise starten
Nachdem alle Vorbereitungen abgeschlossen sind, können wir nun Zammad starten. Wir wechseln zuerst in das Verzeichnis, in dem sich die Docker-Compose- und .env-Dateien befinden:
cd /opt/containers/apprise-api/
Jetzt können wir Apprise mit dem Befehl docker compose up -d
starten:
docker compose up -d
Dieser Befehl startet alle Dienste, die in der docker-compose.yml
– und docker-compose.override.yml
-Datei definiert sind, im Hintergrund und lässt sie laufen, selbst wenn wir die Terminal-Sitzung beenden.
Die Option -d
steht für “detached” und bedeutet, dass die Container im Hintergrund laufen und die Shell nach dem Start der Container zur Verfügung steht.
7. Apprise UI verwenden
Nachdem der Container gestartet ist, erreichen wir die Weboberfläche von Apprise unter der Domain:
https://apprise.deinedomain.de
Auf der Oberfläche finden wir bereits alle wichtigen Informationen, inklusive Beispielen für die Nutzung der API.
7.1. Neue Konfiguration anlegen
Links im Menü klicken wir auf „New Configuration“.
Daraufhin erscheint eine Warnung, ob wirklich eine neue Konfiguration erstellt werden soll – diese bestätigen wir mit „Yes“.
Nun wird eine Config ID generiert, z. B.:
deae95c62a2d93273e2c5ba93ff2153d3f9d640e1b9eec59a7861dba32e924f9
Diese ID dient als eindeutiger Schlüssel, über den die Konfiguration jederzeit erreichbar ist. Sie findet sich auch in der URL wieder:
https://apprise.deinedomain.de/cfg/deae95c62a2d93273e2c5ba93ff2153d3f9d640e1b9eec59a7861dba32e924f9
7.2. Konfiguration anpassen
Über den Tab „Configuration“ können wir nun unsere gewünschte Konfiguration anlegen. Wir bevorzugen dabei das TXT-Format, da es übersichtlich ist.
Eine Liste der unterstützten Dienste und deren Konfigurationen findet sich hier:
👉 Apprise – Notification Services
7.3. Arbeiten mit Tags
Um Konfigurationen später leichter über die API anzusprechen, können wir Tags vergeben.
Ein Beispiel:
tag1,tag2=pover://{user_key}@{token}?priority={priority}
Damit lassen sich Benachrichtigungen gezielt über bestimmte Tags versenden, z. B.:
pushover,normal=pover://{user_key}@{token}?priority=0 pushover,prio=pover://{user_key}@{token}?priority=1 pushover,highprio=pover://{user_key}@{token}?priority=2
7.4. Speichern und testen
Nach dem Speichern sehen wir im Tab „Review“ die vollständige Konfiguration und können auch direkt prüfen, wie sich die Tags verhalten.
Unter dem Tab „Notifications“ lassen sich die Konfigurationen schließlich praktisch testen, bevor wir sie in der API einsetzen.
8. Sicherheitsaspekte
So praktisch und flexibel Apprise auch ist, wir sollten uns bewusst machen, dass die Weboberfläche ohne Schutz für jeden zugänglich ist, der die URL kennt. Zwar sind die generierten Config IDs lang und zufällig, wodurch ein direktes Erraten sehr unwahrscheinlich ist. Dennoch besteht theoretisch die Möglichkeit, dass Angreifer durch gezielte Angriffe zufällig auf eine Konfiguration stoßen. Damit könnten sensible Daten wie Zugangsdaten oder API-Tokens eingesehen werden.
Um dieses Risiko zu minimieren, schützen wir im nächsten Schritt unsere UI zusätzlich. Damit verhindern wir unbefugten Zugriff und stellen sicher, dass nur autorisierte Personen Apprise konfigurieren oder Konfigurationen auslesen können.
Bei diesem Inhalt handelt es sich um exklusiven Content für Community Plus Mitglieder und Supporter.
Bitte logge dich mit deinem Account ein um den Inhalt zu sehen.
Hinweis
Hinweis zu Kommentaren
Wenn etwas nicht funktioniert, gehe noch einmal alle einzelnen Punkte in der Anleitung durch. Ich habe die Anleitung mehrfach getestet. Wenn du sicher bist, dass du alles richtig konfiguriert hast und das noch einmal überprüft hast, dann hinterlasse gerne einen Kommentar. Der Blog wird von Christian betrieben und er, sowie alle Co-Autoren, bemühen uns, alle Fragen und Probleme zu lösen – allerdings ist dies auch immer von unserer verfügbaren Zeit abhängig!
Bitte abonniert goNeuland, damit dieser Blog uns auch weiterhin viele Jahre Freude bereiten kann 😉