Die Idee
Jeder kann auf seine Website schreiben “Ich betreibe ein Homelab”. Aber was, wenn die Website selbst beweist, dass der Server läuft? Genau das wollte ich umsetzen: echte Live-Daten meines Unraid-Servers direkt auf der Portfolio-Seite.
Der Stack
Mein Setup besteht aus drei Komponenten:
- Unraid-Server – läuft 24/7 mit 10 Docker-Containern
- n8n – Workflow-Automation, ebenfalls als Docker-Container
- stats.json – eine einfache JSON-Datei, die auf dem Webserver liegt
Wie funktioniert es?
1. Daten sammeln
Ein n8n-Workflow läuft alle 15 Minuten und sammelt die aktuellen Daten vom Unraid-Server:
- OS-Version und Uptime
- Speicherauslastung (RAM und Storage)
- Laufende Docker-Container mit Status und Uptime
2. JSON generieren
n8n formatiert die Daten in eine saubere JSON-Struktur:
{
"timestamp": "2026-02-13T19:00:00Z",
"system": {
"os": "Unraid 7.2.3",
"uptime": "53 days",
"storage_total": "6.4TB",
"storage_percent": 54,
"ram_used": "12GB",
"ram_percent": 76,
"containers_running": 10,
"containers_total": 10
},
"containers": [
{ "name": "jellyfin", "status": "running", "uptime": "Up 2d" },
...
]
}
3. Auf die Website bringen
Die Website fetcht beim Laden die stats.json und aktualisiert das Terminal-Widget dynamisch. Wenn die Datei nicht erreichbar ist, werden einfach die statischen Fallback-Werte angezeigt.
const res = await fetch('stats.json?t=' + Date.now());
if (res.ok) {
const data = await res.json();
updateTerminal(data);
}
Der ?t=-Parameter verhindert, dass der Browser eine gecachte Version lädt.
Das Ergebnis
Auf meiner Startseite sieht man jetzt ein Terminal-Widget, das die echten Daten meines Servers zeigt – inklusive “Live”-Indikator, der anzeigt, wie aktuell die Daten sind. Wenn alle Container laufen, leuchtet es grün.
Lessons Learned
- Keep it simple – Eine JSON-Datei ist robuster als eine eigene API
- Fallback-Werte sind Pflicht – Wenn der Server mal down ist, soll die Website trotzdem gut aussehen
- Cache-Busting nicht vergessen – Sonst sieht der Besucher stundenlang die gleichen Werte
Was kommt als Nächstes?
Ich überlege, historische Daten zu sammeln und eine kleine Uptime-Grafik einzubauen. Aber erstmal läuft das Setup stabil – und das ist das Wichtigste.