Uptime Kuma selbst hosten: Monitoring & Status-Seite
Läuft dein Server noch? Und was ist mit der Status-Seite für deine Nutzer? Uptime Kuma – ebenfalls vom Dockge-Macher – ist ein schlankes, selbst gehostetes Monitoring-Tool: Es prüft deine Dienste in einstellbaren Intervallen, alarmiert dich über Dutzende Kanäle und veröffentlicht den Zustand optional auf einer eigenen Status-Seite. In diesem Tutorial richtest du Uptime Kuma mit Docker Compose ein.
Warum Uptime Kuma?
„Läuft bei mir“ ist keine Antwort, wenn es um deine selbst gehosteten Dienste geht. Uptime Kuma prüft deine Dienste automatisch und meldet sich, wenn etwas ausfällt – ganz ohne Cloud-Anbieter, der deine Ausfälle mitprotokolliert. Dazu kommen öffentliche Status-Seiten im Stil von „status.page“, die du deinen Nutzern zeigen kannst. Das Tool ist Open Source, mehrsprachig (u. a. Deutsch) und bewusst schlank.
Konzept: Monitore, Benachrichtigungen & Status-Seiten
- Monitor-Typen: HTTP(S), TCP/Port, Ping, DNS, Schlüsselwort in der Antwort, Push-, Cron- und Docker-Monitore u. v. m.
- Intervalle & Auswertung: Prüfintervalle frei wählbar; Ausfälle werden mit Dauer und Historie gespeichert.
- Benachrichtigungen: Telegram, Discord, E-Mail/SMTP, Matrix, ntfy, Slack, Webhooks & Co. – 90+ Anbieter, jeweils mit „Test“-Button.
- Status-Seiten: Öffentlich schaltbar, gruppierbar, mit dunklem Design und Verlauf – ohne Login erreichbar.
- Zugang: Login mit Benutzerrollen (Admin/Lesen); die Status-Seite selbst bleibt bewusst öffentlich, wenn du sie freigibst.
- Versionen:
:2ist der aktuelle Hauptzweig (neue Oberfläche); wer von v1 kommt, migriert über ein Backup.
Vorbereitung: Datenordner & Nutzer
mkdir -p ~/uptime-kuma/data
cd ~/uptime-kuma
./data→/app/data: hier liegt die komplette Installation inklusive SQLite-Datenbank (kuma.db), Hintergrundbildern und Zertifikaten.USER_UID/USER_GID: im offiziellen Image nicht dokumentiert und ohne Funktion – sie schaden nicht, lassen sich aber gefahrlos entfernen.- Port 3001 intern – gebunden wird nur an
127.0.0.1, den Rest übernimmt der Reverse Proxy.
Docker Compose – die Datei
Deine Vorlage, bereinigt (leerer networks: {}-Block und network_mode: bridge entfernt – beides unnötig) und kommentiert:
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
ports:
# Host-Port : Container-Port
- "127.0.0.1:50522:3001" # Web-UI nur lokal, Proxy macht den Rest
volumes:
- ./data:/app/data # Datenbank + Einstellungen
deploy:
resources:
limits:
cpus: "2.0"
memory: 2G
environment:
- USER_UID=1000
- USER_GID=1000
louislam/uptime-kuma:2: Major-Tag:2für den aktuellen Hauptzweig – Updates perdocker compose pull.127.0.0.1:50522:3001: Uptime Kuma lauscht intern auf Port 3001.- Ein Docker-Socket wird für HTTP-/Ping-Monitore nicht benötigt – erst der Monitor-Typ „Docker“ braucht Zugriff auf die Docker-API.
- Limits (2 CPU / 2 GB) sind für ein Monitoring-Setup mit ein paar Dutzend Monitoren mehr als ausreichend.
Konfiguration: Rollen, Benachrichtigungen & mehr
| Thema | Erklärung |
|---|---|
| Benutzer & Rollen | Der erste Account (Setup) wird Admin; weitere Nutzer lassen sich mit Leserechten oder als weitere Admins anlegen. |
| Benachrichtigungen | Unter „Einstellungen → Benachrichtigungen“ Kanäle anlegen (Telegram, Discord, SMTP …) und mit „Test“ verifizieren, bevor ein Monitor sie nutzt. |
| Monitor „Docker“ | Prüft Container-Status – dafür zusätzlich den Docker-Socket mounten (Achtung: Socket-Zugriff = weitreichende Rechte). |
| Status-Seiten | Pro Status-Seite wählst du Monitore und Gruppen aus; eine Status-Seite ist ohne Login erreichbar und lässt sich auch in Dark-Theme betreiben. |
| SSL-Überwachung | Zertifikatsablauf wird für HTTPS-Monitore automatisch erfasst und gemeldet. |
| API & Badges | Uptime Kuma bietet API-Endpunkte und Status-Badges für READMEs/Websites – beides deaktivierbar. |
Reverse Proxy & WebSockets
Die UI spricht nur HTTP auf localhost – dahinter gehört ein TLS-Proxy. Für Live-Updates nutzt Uptime Kuma WebSockets, die durchgereicht werden müssen:
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name status.meine.domain;
access_log off;
error_log /var/log/nginx/status.meine.domain.error.log;
ssl_certificate /etc/ssl/private/status.meine.domain_ecc/fullchain.cer;
ssl_certificate_key /etc/ssl/private/status.meine.domain_ecc/status.meine.domain.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_early_data on;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "no-referrer" always;
location / {
proxy_http_version 1.1;
# WebSockets für Live-Updates der Oberfläche
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_read_timeout 3600s;
proxy_pass http://127.0.0.1:50522;
}
}
Erster Start & erster Monitor
cd ~/uptime-kuma
docker compose up -d
docker compose logs -f uptime-kuma
Danach https://status.meine.domain öffnen:
- Beim ersten Aufruf legst du das Admin-Konto an (Benutzername + sicheres Passwort).
- Unter „Neuer Monitor“ einen Dienst anlegen: z. B. „HTTP(s)“ auf
https://sky.huuu.bizoder einen Ping auf deinen Router. - Kontrollwerte setzen (erwarteter Statuscode, Keyword) – dann erscheint der Monitor mit grünem Herz.
- Für echte Ausfälle: unter „Benachrichtigungen“ einen Kanal anlegen und dem Monitor zuweisen – Auslöser sind Fälle wie „Down“ oder „SSL abgelaufen“.
- Status-Seite: Monitore in einer Gruppe zusammenfassen und die Seite als „öffentlich“ aktivieren – fertig ist dein eigenes
status.meine.domain.
Backups, Updates & Versionen
Das Backup besteht aus dem kompletten ./data-Ordner. Am sichersten kopierst du die SQLite-Datei
bei gestopptem Container (docker compose stop → kopieren → starten); alternativ
bietet die UI unter „Einstellungen → Backup“ einen Export an.
docker compose pull && docker compose up -d – die
Daten bleiben dank Volume erhalten. Wer von v1 (:1) auf v2 wechselt: vorher Backup erstellen,
danach die neue Oberfläche prüfen. Vor jedem großen Versionssprung gilt: erst sichern, dann aktualisieren.
Häufige Probleme (FAQ)
| Problem | Lösung |
|---|---|
| Monitor meldet „Down“, Dienst läuft aber | Kontrollwerte prüfen (Statuscode/Keyword); bei HTTPS evtl. Zertifikatskette oder User-Agent des Monitors anpassen. |
| Keine Benachrichtigungen | Kanal vorher mit „Test“ prüfen und dem Monitor zuweisen; Auslöser wie „Down“ aktivieren. |
| Login nicht möglich / Passwort vergessen | Admin-Passwort über die UI zurücksetzen lassen oder Backup einspielen – die Datenbank enthält die Konten. |
| Live-Updates hängen in der Oberfläche | WebSocket-Upgrade im Proxy fehlt (Upgrade/Connection, proxy_http_version 1.1). |
| Schreibfehler / Datenbank wird nicht angelegt | Besitzer von ./data prüfen (chown auf Container-Nutzer), Pfad des Volumes kontrollieren. |
| Uptime Kuma erreicht deine Dienste nicht | Monitore laufen vom Server aus – Firewall-/DNS-Probleme des Hosts betreffen auch Uptime Kuma; ggf. zweiten Monitor von außen (externer Check) ergänzen. |
Fazit
Uptime Kuma liefert dir in fünf Minuten ein eigenes Monitoring samt öffentlicher Status-Seite – ohne Cloud, ohne versteckte Kosten und mit Benachrichtigungen über die Kanäle, die du ohnehin nutzt. Zusammen mit Dockge (vom selben Autor) hast du damit Monitoring und Stack-Verwaltung komplett in eigener Hand.
./data-Ordner (idealerweise bei gestopptem Container).