vanityontour-status/README.md
Oliver G 7d373612a0
feat: fehlende Dienste und die VanityCast App aufnehmen
Abgeglichen gegen die tatsächlich vorhandenen Dienste (Uptime-Kuma-Monitore,
Traefik-Hosts auf dem Hostinger VPS, CloudPanel-Sites auf hetzner, NPM-Datenbank
auf beiden Proxy-Servern und die Domainliste auf Hostinger). Es fehlten sieben
Einträge — vor allem alles, was auf dem Hostinger VPS hinter Traefik läuft.

Neu:
- VanityCast Landing (vanitycast.vanityontour.de)
- Kurzlinks (go.vanityontour.de)
- Forgejo (git.giertz.biz)
- Postiz (social.vanityontour.de)
- Shlink Admin (shlink.vanityontour.de)
- Shlink API (go.vanityontour.de/rest/health)
- SSL-Laufzeit für vanitycast, go und git.giertz.biz

Shlink Admin erwartet bewusst 401: Traefik beantwortet die BasicAuth vor dem
Proxy. Das belegt nur, dass Traefik läuft und der Schutz noch greift — eine 200
hiesse, der Schutz ist weg. Dass Shlink selbst antwortet, zeigt der neue
Health-Endpunkt.

App-Bereich fasst jetzt mehrere Apps: APP_STORE_ID wird zu APP_STORE_IDS,
status.json bekommt "apps" als Liste. Das alte Einzelfeld "app" bleibt erhalten,
weil index.html nur manuell auf Hostinger aktualisiert wird und eine ältere
Seite sonst leer liefe. VanityCast hat noch keine Bewertungen — statt "☆ — (0)",
was nach einem Fehler aussieht, steht dort "Noch keine Bewertungen".
2026-08-03 07:11:08 +02:00

3.7 KiB

VanityOnTour Status Page

Automated status dashboard for all VanityOnTour services, hosted on Hostinger at status.vanityontour.de.

What it monitors

  • Websites: vanityontour.de, News, Wiki, StaySense, StaySense Landing, VanityCast Landing, Kurzlinks (go.)
  • Tools: N8N, beide Nginx Proxy Manager, Uptime Kuma, Grafana, App Backend, CloudPanel, Forgejo, Postiz, Shlink Admin
  • APIs: RSS News API, StaySense API, Shlink API
  • iOS Apps: Vanity Expense Logbook und VanityCast (Version, Bewertung, letztes Update)
  • SSL: Zertifikatslaufzeit aller Hauptdomains

Shlink Admin ist bewusst ein schwaches Signal: Traefik beantwortet die BasicAuth vor dem Proxy, die erwartete 401 belegt also nur, dass Traefik läuft und der Schutz noch greift — nicht, dass der Container dahinter lebt. Dass Shlink selbst antwortet, zeigt Shlink API (go.vanityontour.de/rest/health).

How it works

Ein Cron auf hetzner (88.99.209.207) läuft alle 5 Minuten:

*/5 * * * * /opt/run_status_check.sh >> /var/log/status_check.log 2>&1
  1. /opt/check_status.py prüft alle Dienste und schreibt /opt/public/status.json
  2. run_status_check.sh kopiert die Datei per SCP (Port 65002) nach /home/u982551092/domains/status.vanityontour.de/public_html/status.json

Die statischen Dateien unter public/ (HTML, CSS, Icons) liegen unverändert auf Hostinger; nur status.json wird zyklisch überschrieben.

Der frühere Weg über GitHub Actions + FTP-Deploy wird nicht mehr benutzt. Das committete public/status.json ist deshalb nur ein Platzhalter — der Live-Stand steht ausschließlich auf Hostinger.

Deployment einer Skript-Änderung

scripts/check_status.py wird nicht automatisch ausgerollt. Nach einer Änderung:

scp scripts/check_status.py hetzner:/opt/check_status.py
ssh hetzner '/opt/run_status_check.sh'   # einmal testweise ausführen

Deployment einer Änderung an public/

index.html, CSS und Icons werden vom Cron nicht mit ausgerollt — der kopiert nur status.json. Der Deploy-Key für Hostinger liegt ausschließlich auf hetzner (/root/.ssh/hostinger_ed25519), der Weg geht deshalb über hetzner:

scp public/index.html hetzner:/opt/public/index.html
ssh hetzner 'scp -P 65002 -i /root/.ssh/hostinger_ed25519 /opt/public/index.html \
  u982551092@82.198.228.98:/home/u982551092/domains/status.vanityontour.de/public_html/index.html'

Vorher prüfen, ob die Live-Datei noch dem Repo-Stand entspricht — sie wird sonst stillschweigend überschrieben.

Dienste hinter dem Management-VPN

Seit der VPN-Absicherung antworten die Admin-Oberflächen öffentlich nur noch mit 403. Weil der Checker auf hetzner läuft und hetzner WireGuard-Peer 10.10.0.14 ist, werden diese Dienste über das Feld check_url intern geprüft:

Dienst Anzeige (url) Prüfung (check_url)
N8N Automation n8n.vanityontour.de http://10.10.0.13:5678
Nginx Proxy Manager nginx.vanityontour.de http://10.10.0.13:81
Nginx Proxy Mgr (VoT) ng.vanityontour.de http://10.10.0.12:81
Statistiken (Grafana) stats.vanityontour.de http://127.0.0.1:3000
CloudPanel cp.blog.vanityontour.de https://127.0.0.1:8443
Uptime Kuma server.vanityontour.de …/status/vanity (öffentlich)

check_url wird vor dem Schreiben aus status.json entfernt — die interne Netztopologie gehört nicht auf eine öffentliche Seite. Die Statusseite zeigt weiterhin nur den Hostnamen aus url an.

Local test

python3 scripts/check_status.py
# → writes public/status.json

Achtung: Lokal (ohne VPN-Route zu 10.10.0.0/24) melden die intern geprüften Dienste zwangsläufig „down". Aussagekräftig ist der Lauf nur auf hetzner.