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".
92 lines
3.7 KiB
Markdown
92 lines
3.7 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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.
|