No description
Find a file
Oliver G c29f0953db
docs: IPv6-Störung auf hetzner ist behoben, Kommentar richtigstellen
Die "tcp established"-Regel der Hetzner-Robot-Firewall wurde von IPv4 auf
IPv4 & IPv6 erweitert; ausgehendes IPv6-TCP funktioniert wieder, per tcpdump
verifiziert. Der AF_INET-Filter bleibt bewusst bestehen — er hält die
gemessenen Antwortzeiten deterministisch und sichert den Lauf gegen eine
Wiederholung ab. Der Kommentar behauptete bisher, der Filter sei ein
Provisorium bis zur Reparatur.
2026-08-03 07:54:55 +02:00
public feat: fehlende Dienste und die VanityCast App aufnehmen 2026-08-03 07:11:08 +02:00
scripts docs: IPv6-Störung auf hetzner ist behoben, Kommentar richtigstellen 2026-08-03 07:54:55 +02:00
README.md feat: fehlende Dienste und die VanityCast App aufnehmen 2026-08-03 07:11:08 +02:00

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.