Zum Inhalt

D1 · Ziel-Topologie & Service-Placement: Design

Datum: 2026-10-28 Epic: homeserver#180 Status: Entscheidungen von Robin getroffen (Denk-Session 27./28.10.2026) und nach dem Prüfbericht im Doppelcheck bestätigt. Grundsatzentscheidung: ADR-012 Rolle von Kubernetes, schränkt ADR-001 ein. Belege: Dienste-Inventar · Kubernetes im Homelab · VPS und Offsite · Zugriff von außen · PKI und Voice · Prüfbericht

D1 ist eine Denk-Epic. Gebaut wird hier nichts. Das Dokument legt fest, wo was läuft, wo Daten liegen, wie der Zugang von außen funktioniert und was bei Ausfällen passieren darf. Die Umsetzung verteilt sich auf die Epics, die in Abschnitt 13 stehen.

1. Kontext und Ziel

Robins Rahmen aus der Roadmap: Alle Server bleiben. Entschieden wird das Placement nach Auslastung und Hardware-Fähigkeiten. Neu seit Oktober: Drei HP-G6-Minis für einen Cluster sind gekauft.

Was Robin heute am meisten belastet, mit den Messwerten vom 27./28.10.:

Schmerzpunkt Beleg
Update-Schulden auf allen Ebenen drei Hosts mit drei Ubuntu-Versionen (22.04, 24.04, 26.04) · 10 offene Renovate-PRs im homeserver-Repo, ältester vom 27.05. · 14 von 120 HA-Update-Entitäten offen · Tailscale-Clients 1.94/1.98 statt 1.104
Fehlender Überblick („was habe ich, was stimmt, wie hängt es zusammen“) 60 Container auf dem NUC, 1782 HA-Entitäten, davon 242 unavailable · der NUC ist nicht reproduzierbar (Host-Konfiguration nur teilweise im Git)
Gefühl „unaufgeräumt“ ungenutzte Dienste, doppelte Dienste, kaputte HA-Integrationen, ~150 GB Altlasten auf der NUC-SSD (Inventar)
Netztrennung fehlt flaches Netz 10.10.10.0/24, Lösung in E9

Ziel: eine Topologie, die diese Schmerzen verkleinert statt verschiebt. Das Haus muss robust sein (DNS und Smart Home), das Lab muss frei experimentieren können, und jeder Dienst hat einen begründeten Ort.

Nicht Ziel: Umsetzung in dieser Epic, Agenten-Fabrik in 2026 (nur Weichen) und Hardwarekäufe ohne Auslöser.

2. Ist-Stand (27./28.10.2026)

Host Hardware / OS Lage
NUC 10.10.10.3 NUC11 i5-1135G7, 32 GiB, Ubuntu 22.04 (Supportende Mai 2027) 60 Container, 30-Tage-Spitze aller Container 31,5 GiB, MemAvailable im 90-Tage-Tief 4,2 GiB, Swap 4/4 GiB voll bei Memory-PSI 0 (kein Druck), CPU im Mittel 12 %
aiserver 10.10.10.7 Ryzen AI Max+ 395, 124 GiB, Ubuntu 26.04 llama-swap, open-webui, Wyoming; 30-Tage-Spitze 99,8 GiB (Modelle); keine USV, kein Autostart (aiserver#9)
VPS (Hetzner CX22, Falkenstein) 2 vCPU, 3,7 GiB, Ubuntu 24.04 Headscale, Authelia/lldap, ntfy, Uptime Kuma, Healthchecks, Traefik; kein Backup
UNAS Pro 10.10.10.150 91 TB (RAID6) 26,6 TB belegt, +1,2–1,3 TB/Monat
Cluster (ab Jan 2027) 3 × ProDesk 600 G6 Mini, i5-10600T, 16 GB, 512 GB NVMe, 2,5 GbE (I225-V B3) Hardware geprüft (#277); zweiter M.2-Slot und 2,5″-Schacht frei
USV CyberPower OR650ERM1U, 360 W trägt NUC + USB-RAID, Netzwerk und UNAS; Last 144 W im Mittel, 185 W in der Spitze; Laufzeit ~23 min, im 30-Tage-Tief 13,75 min

Größte Befunde der Inventur (Details im Dienste-Inventar):

  • Kaum genutzt, aber teuer: pz-server belegt dauerhaft 7–8,7 GiB, hatte aber in 30 Tagen nur 5 Stunden lang Spieler. Der NUC-AI-Stack (ollama-ipex u. a.) ist seit 25.10. gestoppt, sein Datenordner hat 60 GB.
  • Ungenutzt: navidrome, bonus-tracker, homepage (0 Aufrufe in 6 Wochen), esphome-Dashboard, Voice-Stack auf dem NUC (0 Transkriptionen seit 06.09.), TeamSpeak (0 Verbindungen seit 13.09.).
  • Doppelt: Voice-Stack auf NUC und aiserver, unbound nativ und als Container, Prometheus parallel zu VictoriaMetrics, InfluxDB ohne Leser.
  • Das Standort-Tracking von HA funktioniert unterwegs nicht. person.robin und person.lars standen 8 Tage durchgehend auf „home“, obwohl beide weg waren. Port 443 ist von außen zu, und das iPhone war seit 05.10. nicht im Tailnet.
  • Docker auf dem NUC startet ohne UNAS oder Internet nicht (homeserver#278). Dann fallen DNS und HA aus.

3. Leitsätze

  1. Fehlerdomänen vor Eleganz. Das Haus (DNS, Smart Home, USV, Backup-Ziel, Alarmierung) darf weder vom Cluster noch vom Lab abhängen. Die Alarmierung darf nicht über das Bewachte laufen.
  2. Messen, dann entscheiden. Jede Ausbaustufe hat einen messbaren Auslöser (Abschnitt 12), und das Cluster-Review hat feste Kriterien (ADR-012).
  3. Weniger Dienste statt mehr Plattform. Ungenutztes kommt weg, bevor etwas umzieht.
  4. Kein Vertrauen in fremde Clouds für den Zugang. Selbst betrieben, wo es um Zugangskontrolle geht (mTLS mit eigener CA, kein Nabu Casa). Fremde Dienste nur für das, was prinzipiell außerhalb laufen muss (Wächter, Offsite-Backup).
  5. Datenbanken nie auf NFS, Backups immer auf einem anderen Gerät als die Quelle.

4. Rollen der Hosts

Host Rolle Plattform Was nicht dorthin gehört
NUC Haus-Kern: DNS, Smart Home, Medien-Transcoding (QSV), Dokumente, Fotos, Monitoring, Samba/Scanner, Backup-Quelle Compose (doco-cd ab E2d), Ubuntu 26.04 ab Feb/März 2027 Lab-Experimente, Fabrik
aiserver Inferenz (llama-swap), Voice (Wyoming), Immich-ML (E5) Compose (doco-cd-Pilot E2c) RAM-Fresser außer Modellen. Robins Regel: Der RAM gehört den Modellen
Cluster Lab, Agenten-Fabrik, nicht hostgebundene Apps in Stufen Talos + Kubernetes Hauskritisches (ADR-012)
Raspberry Pi 4 (vorhanden) zweiter DNS-Server (Pi-hole + Unbound) Compose alles andere
VPS Tür nach außen, Wächter, Identity, Headscale Compose Datenhaltung über Konfigurationen hinaus
UNAS Pro Medien, Fotos, Dokumente, Archive, künftig lokales Backup-Ziel (E1) Appliance (NFS) Datenbanken

5. Placement-Karte

Kritikalität hat zwei Achsen: V = Verfügbarkeit (0 sofort kritisch, 1 nach Stunden, 2 nach Tagen, 3 egal) und D = Datenwert (★★★ unersetzlich, ★★ mühsam wiederherzustellen, ★ neu aufsetzbar). Robins Einordnung: V0 = DNS und Smart-Home-Stack. Medien sind V1. Immich wird mit E5 zu V1, sein Datenwert ist ★★★.

Dienst(gruppe) V D Bindung Ziel Wann / Epic
Pi-hole + Unbound 0 ★ Port 53 NUC + zweiter Server auf dem Pi 4 (per DHCP verteilt, nebula-sync), nativer unbound.service fällt weg vor E9
Home Assistant, Zigbee2MQTT, Mosquitto, NUT, ha-mcp 0 ★★★ Host-Netz, BT, USB NUC bleibt
Traefik, Tailscale-Subnet-Router, cloudflare-ddns 0–1 ★ Host-Netz, 443 NUC (DDNS-Records fallen mit der VPS-Tür weg) E10
Samba/Scanner, borgmatic, nut-monitor 1 ★★★ nativ NUC (/mnt/scanner zieht auf /mnt/ssd) E2b
Jellyfin 1 ★ iGPU, NFS NUC (QSV) bleibt
*arr + gluetun + sabnzbd 1 ★★ tun, NFS Cluster, Stufe 1b nach der NUC-Neuinstallation, frühestens März 2027
Immich (Server, DB) 2 → 1 ★★★ iGPU, NFS NUC; ML auf den aiserver; Cluster frühestens nach dem Review E5
Paperless (+ tika, gotenberg, bridge) 2 ★★★ Samba-Consume, NFS NUC; Cluster frühestens nach dem Review bleibt
Monitoring (VictoriaMetrics/-Logs, Grafana, Alloy, Exporter) 1 ★★ Syslog 514, NFS NUC, außerhalb dessen, was überwacht wird; VM/VL ziehen von NFS auf die SSD; Prometheus und InfluxDB gehen in VictoriaMetrics auf, inklusive Bestandsdaten E3
pkv-app 3 ★★ – Cluster, Stufe 1a (Pilot für CloudNativePG). Enthält vermutlich Gesundheits-/Versicherungsdaten → eigener Namespace, Cilium default-deny, kein Weg aus den Fabrik-Namespaces dorthin; das Restrisiko gemeinsamer Nodes trägt Robin bewusst. Zieht erst um, wenn die Backup-Kette steht und ein Restore getestet ist: pg_dump → NFS-Share, den borgmatic auf dem NUC mitsichert (Claudes Call) Jan 2027
speedtest-tracker 3 ★ – Cluster, Stufe 1a Jan 2027
Agenten-Fabrik, Cluster-Monitoring – – – Cluster, Stufe 1a Jan 2027 (Fabrik-MVP-0)
llama-swap, open-webui, Wyoming 2 ★ GPU aiserver; HA-Voice zeigt dorthin, falls Voice genutzt wird E4/E6
snowflake-proxy 3 ★ – VPS (Proxy ist zustandslos, keine Reputation; mit -capacity begrenzen; Hetzner-AGB zu Tor vorher prüfen) E10
TeamSpeak 3 3 ★ UDP 9987 bleibt vorerst auf dem NUC, ServerQuery 10011 nur noch per Tailnet (#211). In Q2/Q3 2027 fällt die Entscheidung zwischen TS6, Fluxer und Mumble; der Nachfolger läuft dann auf dem VPS 2027
pz-server 3 ★ UDP 16261 NUC, nur bei Bedarf: HA-Schalter „Spieleabend“ startet ihn, nach X Stunden ohne Spieler stoppt er automatisch (pz_players_online) E6
homepage 3 ★ docker.sock bleibt Familien-Startseite; in E3/E6 klären, ob sie in HA (Wand-iPad) nachgebaut wird und als Dienst entfällt E3/E6
Fällt weg bonus-tracker und navidrome (archivieren), Voice-Stack auf dem NUC, nativer unbound, NUC-ollama-Stack inkl. 60 GB Daten, vscode-server (dafür VS Code Remote-SSH) E0b-Nachtrag / E4
esphome 3 ★ Host-Netz nur bei Bedarf starten (Kompilieren/OTA) E6

6. Speicher und Backup

Grundregel für den Speicherort:

Datenart Ort
Datenbanken, SQLite, App-Zustand lokale SSD des Hosts, auf dem der Dienst läuft (im Cluster: lokaler Node-Speicher)
Medien, Fotos, Dokumente, Archive UNAS (NFS)
Modelle NVMe des aiserver
Backups immer auf einem anderen Gerät als die Quelle, plus eine Kopie außer Haus

Datenklassen für das Backup:

Klasse Beispiele Offsite
Originale / Archive ★★★ Fotos (/mnt/pictures), Paperless, UNAS-Archivordner (nextcloud-archiv, immich-nicht-importiert inkl. Kindheits-DVDs, wallos-export, stack-archiv, ~95 GB) ja (Archivordner neu, vorher Sichtung in E1)
Dienst-Zustand ★★ Container-Daten, DB-Dumps, Host-Konfiguration ja
Medien ★ Filme, Serien, Musik (~25 TB, +1,2–1,3 TB/Monat) nein (wiederbeschaffbar; ~50–80 €/Monat wären der größte Posten des Homelabs; #227 bleibt zu)

Richtung für E1 (dort wird die Topologie entschieden):

  • Das USB-RAID (QNAP TR-004 am NUC) wird kein Backup-Ziel mehr. Die UNAS wird lokales Ziel für den Dienst-Zustand von NUC, aiserver und Cluster. Von dort geht es offsite, eventuell zu zwei Zielen.
  • Die Originale auf der UNAS gehen dann direkt offsite, idealerweise zu zwei Zielen. UNAS-Snapshots neu bewerten (am 02.10. abgelehnt), als Schutz der Originale gegen versehentliches Löschen.
  • Ein Repo auf der UNAS kann der NUC mit root-Rechten löschen. Gegen Ransomware schützt deshalb erst das Offsite-Ziel mit Löschschutz.
  • Lücken: Der VPS hat kein Backup. Der aiserver sichert nur auf das NUC-RAID, braucht also ein neues Ziel, sobald das RAID wegfällt.

Offsite-Anbieter: Die Hetzner Storage Box bleibt. Laut Recherche ist sie der günstigste Weg, der borg nativ kann, und die Preise blieben 2026 unverändert. Heute: BX11, 620 GiB von 931 GiB, Wachstum ~15–20 GB/Monat. Die nächste Stufe kommt bei 80 % Füllstand oder vor großen Importen. Robin hatte nach einem anderen Anbieter gefragt. Kein Anbieter ist für borg-Speicher dieser Größe günstiger (Vergleich in VPS und Offsite).

7. VPS

Entscheidung: Der VPS bleibt, abgespeckt. Robins Motiv war der Preis, dazu der Wunsch „alles zu Hause“. Ein Standbein draußen hat aber echten Wert.

  • Preis: Der Bestandstarif kostet 3,99 € im Monat (Robin, laut Rechnung). Neu bestellt wäre nichts günstiger. Nie umskalieren und nie löschen und neu anlegen, sonst gilt der neue Preis. Ein Rebuild behält den Preis (Hetzner-Billing-FAQ).
  • Rollen:
  • Tür nach außen (Abschnitt 8)
  • Wächter: ntfy, Uptime Kuma, Healthchecks
  • Identity: Authelia und lldap bleiben hier, die Entscheidung vom 29.06.2026 ist bestätigt. E8 legt nur OIDC-Clients an. Lokale Notfallkonten auf den Heimdiensten kommen aus E1.
  • Headscale bleibt hier
  • Pflicht vor „VPS = einzige Tür“:
  • zweiter Alarmweg: healthchecks.io beobachtet den VPS (#225, E3)
  • VPS-Backup (E1)
  • Tailworm-Funde abgearbeitet (homelab-external#34): mem_limit für Headscale, Rate-Limit vor dem Registrierungs-Endpunkt, Tailscale-Clients ≥ 1.104.4, Headscale-Update, sobald der Fix erschienen ist
  • NetBird wird nicht geprüft (gestrichen). Neu bewertet wird nur, wenn Headscale Probleme macht.

8. Zugriff von außen

Anforderungen (Robin):

  • Home Assistant: Robin und Lars müssen von außen zugreifen können, und HA muss beide unterwegs tracken. Das ist der wichtigste Punkt.
  • Immich: Freigaben für Dritte ohne Konto, die App der beiden synchronisiert unterwegs immer.
  • Jellyfin: nur Robin und Lars.
  • Grundsatz: möglichst ohne VPN. Admin-Zugänge laufen immer per VPN.

Topologie:

  • Der VPS ist die einzige öffentliche Tür. Traefik auf dem VPS leitet als TCP-Router per SNI und TLS-Passthrough über den Tunnel zum NUC-Traefik weiter. TLS und mTLS enden erst zu Hause. Die echte Client-IP kommt per PROXY-Protokoll v2 an einem eigenen Entrypoint am NUC an (z. B. :8443, nur von der Tunnel-IP erreichbar). Die LAN-Clients auf :443 bleiben unverändert.
  • Die HTTPS-Portfreigabe an der UDM fällt weg. Vorher prüfen, ob die UDM per IPv6 etwas freigibt. Bewusste Ausnahme bis 2027 (Claudes Call): Spiele-UDP lässt sich über den TCP-Passthrough nicht sauber führen. Deshalb bleiben die UDM-Freigaben für TeamSpeak (9987/udp, 30033/tcp) und pz-server (16261–16262/udp) samt DDNS-Record bestehen. Erst mit dem TeamSpeak-Nachfolger auf dem VPS 2027 fallen sie weg, dann gehen auch ddns./udm.robinwerner.net. Bis dahin ist die Heim-IP über die Spiele-Ports sichtbar.
  • 2027 bekommt der Cluster keinen öffentlichen Dienst (Claudes Call): Stufe 1a und 1b sind rein intern, die Tür zeigt nur auf den NUC. Braucht später ein Cluster-Dienst Zugang von außen, wird der Weg dann entschieden (eigener Tailnet-Knoten im Cluster oder über den Subnet-Router am NUC).
  • CrowdSec und Geo-Block: Der VPS sieht wegen des Passthrough kein HTTP. CrowdSec-Agent und LAPI laufen deshalb zu Hause und lesen die Logs des NUC-Traefik (echte IP über PROXY v2), der Bouncer sitzt am NUC-Traefik. Optional kommt ein Firewall-Bouncer auf den VPS. Der Geo-Block läuft per nftables/GeoIP auf dem VPS oder als Traefik-Plugin am NUC. Die Hetzner-Firewall kann kein Geo.

Je Dienst:

Dienst Weg von außen Begründung
Home Assistant mTLS (Client-Zertifikat), dahinter HA-Login (TOTP bzw. hass-oidc-auth), nie Forward-Auth Die iOS-App kann Client-Zertifikate, nicht mehr experimentell seit App 2026.8, inkl. Hintergrund-Webhooks. Standort-Updates brauchen den Webhook ohne interaktiven Login
Immich: Freigaben immich-public-proxy öffentlich nur freigegebene Alben, nur lesend, ohne API-Key. Immich hatte 2026 mehrere Lücken bei geteilten Links
Immich: App mTLS App kann es seit v2.6.0 inkl. Hintergrund-Upload. iOS-Bugs bekannt, vorher mit beiden iPhones testen. Bis dahin bleibt das Tailnet Übergangsweg für den Upload (E5)
Jellyfin nur VPN die iOS-Clients können kein mTLS, 2026 gab es zwei kritische Lücken ohne Login. Lars kommt dafür ins Tailnet (E1-Rest T2)
TeamSpeak wie heute, bis zur Entscheidung 2027 Abschnitt 5
Admin-Oberflächen nur VPN –

PKI für mTLS: Offline-CA je Person (Robins Entscheid; Infisical-PKI ist geprüft und verworfen):

  • Je eine CA für Robin und eine für Lars, 10 Jahre gültig, erstellt per openssl bzw. step. Je Gerät ein Client-Zertifikat für 2 Jahre, exportiert als Legacy-.p12, weil iOS das Standardformat von OpenSSL 3 ablehnt.
  • Die CA-Schlüssel liegen offline: verschlüsselt auf der UNAS und als Notfallkopie in Proton Pass. Die öffentlichen CA-Zertifikate liegen im Repo und werden als Verzeichnis in Traefik gemountet (clientAuth.caFiles, RequireAndVerifyClientCert).
  • Sperren: CA-Datei der betroffenen Person aus dem Verzeichnis nehmen und für diese Person neu ausstellen. Traefik prüft keine Sperrlisten, und das Plugin tlscrlchecker lässt bei fehlender Datei alles durch, es ist also ungeeignet.
  • Ablaufwarnung: Ein Check meldet notAfter 90 Tage vorher an ntfy, dazu kommt ein Kalender-Issue.
  • Infisical-PKI verworfen: Im Free-Plan liegt der CA-Schlüssel in der Cloud. Eine eigene Offline-Root gibt es nur in Enterprise, auf Anfrage und mit Jahresvertrag. Damit hätte eine fremde Cloud die Macht, Zugänge auszustellen.
  • Bekannte Grenzen: keine Apple Watch, Local Push evtl. nicht, Siri/Shortcuts eingeschränkt. Im LAN braucht die Companion-App weiter eine interne URL ohne mTLS (http://10.10.10.3:8123, an die SSID gebunden). HA-trusted_proxies vorher prüfen.

Reihenfolge (E10): Zuerst HA per mTLS zwei Wochen mit einem iPhone testen, über einen temporären UDM-443-Forward und damit entkoppelt vom Bau der Tür. Den Standortverlauf in der App prüfen. Danach die VPS-Tür bauen, dann immich-public-proxy, dann Immich-mTLS. Die alte E10-Reihenfolge Immich → Jellyfin → HA ist damit ersetzt.

9. Betriebssysteme und NUC-Neuinstallation

Ziel: Ubuntu 26.04 auf allen Ubuntu-Hosts.

Host Weg Wann
aiserver läuft bereits mit 26.04 –
VPS Hetzner-Rebuild mit dem 26.04-Image (Preis bleibt), bootstrap.sh aus homelab-external vorher auf die 26.04-Fallen prüfen (apt-key, sysctl.d, dracut) E2b
NUC Neuinstallation der System-NVMe (Samsung 980), die Daten-SSD /mnt/ssd bleibt unberührt. Ein Sprung statt zwei In-place-Upgrades Feb/März 2027, vor Supportende 22.04 (Mai 2027)
Raspberry Pi 4 frisches Image (Ubuntu 26.04 arm64 oder Raspberry Pi OS, Entscheidung beim Aufbau) vor E9

Voraussetzungen für die NUC-Neuinstallation, in fester Reihenfolge:

  1. E2a: Die 17 untracked .env- und Secret-Dateien in /opt/rpi-docker-compose liegen in Infisical. Getestet ist, dass der Infisical-Agent auch ohne Internet startet bzw. sein Ziel persistent rendert, denn /run/infisical ist tmpfs.
  2. E2b: bootstrap.sh für den NUC existiert (ADR-006 wird um den NUC erweitert). Er deckt die Zustände der System-NVMe ab:

    • borgmatic-Configs und Credentials, Infisical-Agent und Identität
    • SSH-Keys aus borg (hetzner-borg, ha-config-journal, nut_shutdown), rclone.conf
    • mdadm.conf, Netplan, smb.conf, NUT-Configs, cron.d
    • 5 Mount-Units, Docker-Drop-in (#278), Timer und Units (paperless, ups, zomboid)
    • Nutzer und Gruppen (u. a. paperless), Host-Resolver mit Fallback, /dev/dri-Gruppen-ID prüfen

    Abnahme ist ein Probelauf in einer VM (Claudes Call: ein Cluster-Node fehlt sonst dem Januar-Aufbau). 3. Vollimage der System-NVMe auf die UNAS als Rückweg. 4. Für das Zeitfenster reicht ein temporärer DHCP-DNS an der UDM, falls der Pi noch nicht steht.

10. Ausfall-Szenarien und Kaltstart

Szenario Heute Ziel (nach Umsetzung)
NUC aus Haus ohne DNS, HA/Heizung weg, lokales Backup-Ziel weg, Fernzugriff weg DNS läuft über den Pi weiter. HA darf ausfallen, die Thermostate halten ihren letzten Sollwert. Wiederanlauf innerhalb eines Wochenendes (Robin), aus bootstrap.sh und Backup bzw. Image. Alarm kommt von außen
Stromausfall USV ~14–23 min, NUC fährt nach 15 min herunter, aiserver geht hart aus aiserver und Cluster bleiben ohne USV (USV hat 360 W, der aiserver allein bis 137 W APU; der Cluster darf als Lab hart ausgehen, App-Daten haben Backups). Beide bekommen „Power On after power loss“ im BIOS (aiserver#9, Cluster-Aufbau). Der Pi 4 hängt an der USV. ONBATT-Timer auf Basis von battery.runtime statt fest 900 s. Kaltstart-Reihenfolge UDM → UNAS → NUC → Pi/aiserver → Cluster ist nicht erzwingbar, jede Schicht muss verspätete andere tolerieren
UNAS beim Boot nicht da Docker startet nicht, also auch kein DNS und kein HA (#278) Docker hängt hart nur an /mnt/ssd. NFS-Dienste warten auf ihren Mount und starten danach selbst (#278/#270). Abnahme per Kaltstart-Drill
Internet weg lokal läuft fast alles, aber Docker startet nach einem Reboot nicht (rclone-Mount, #278) lokal läuft alles, auch nach einem Reboot. Fernzugriff fällt aus. healthchecks.io meldet das fehlende Lebenszeichen aufs Handy
VPS aus gesamte Alarmierung stumm (#225), Fernzugriff weg zweiter Alarmweg (healthchecks.io beobachtet den VPS). Fernzugriff und Identity-Login von außen fallen aus, das ist akzeptiert
UNAS aus Immich, Paperless, Jellyfin, *arr, VictoriaMetrics/-Logs fallen aus und hängen danach (stale handle, #270) VM/VL liegen auf der SSD. Die übrigen melden sich und starten selbst wieder an (E3)
aiserver aus Paperless-KI, Voice Paperless-KI, Voice und Immich-ML laufen eingeschränkt. DNS bleibt unberührt (Pi)
Cluster aus – Pilot-Apps, *arr und Fabrik sind weg. Das Haus merkt nichts (ADR-012)
UDM aus alles weg Config-Backup (E1) und ein dokumentierter Minimal-Wiederaufbau. Ein Ersatzgerät gibt es nicht, das ist bewusst so
Infisical Cloud nicht erreichbar 3 Stacks hängen am Agent Nach E2a hängt jeder Stack daran. Darum muss ein Offline-Kaltstart möglich sein (E2a). Bestehende Container laufen weiter
Cloudflare nicht erreichbar Zertifikats-Erneuerung (DNS-01) verzögert unkritisch, Zertifikate gelten 90 Tage
Robin nicht da – Notfallzettel für Lars (E1)

11. Kapazität des Clusters

Posten RAM (Spitze bzw. Schätzung) Quelle
Plattform je Node (Talos, etcd, API-Server, Cilium, Monitoring-Agents, GitOps-Anteil) 4–7 GB pro Node Recherche (Schätzung aus Einzelmessungen); das Fabrik-Konzept nennt 3–4 GB und wird angepasst
Nutzbar clusterweit mit Reserve für einen Node in Wartung ~18–24 GB Recherche
Stufe 1a: pkv-app, speedtest-tracker, Cluster-Monitoring (nur Agents, die an VictoriaMetrics/-Logs auf dem NUC liefern; den Alarm „Cluster tot“ lösen NUC-Seite und healthchecks.io aus, nicht der Cluster selbst; Claudes Call) ~1,5–2 GB Inventar + Schätzung
Fabrik: 2 Worker (Start), später 3 ~12 GB bzw. ~18 GB, dazu Dienste (Beads, Qdrant, Registry, Paket-Proxy, Steuer-Runner) ~2–3 GB Fabrik-Konzept
Stufe 1b: *arr inkl. sabnzbd Spitzen ~15,5 GB (sabnzbd 9,9, sonarr 3,1, radarr 1,6) Inventar (VictoriaMetrics, 30 Tage)
Summe der Spitzen bei Vollausbau ~31–33 GB > 24 GB –

Folge: Die Spitzen fallen nicht zwangsläufig zusammen, aber es wird eng. Vorgaben dafür:

  • Alle Pods bekommen Requests und Limits.
  • Fabrik-Jobs laufen mit niedriger Priorität.
  • Der Article Cache von sabnzbd wird begrenzt, weil er die Spitze von 9,9 GB vermutlich treibt.
  • Flux statt Argo CD würde ~0,5 GB sparen (Entscheidung beim Aufbau).

Verdrängte Fabrik-Jobs sind ein ehrliches Ergebnis der Messphase. Der RAM-Auslöser (Abschnitt 12) entscheidet dann über die Aufrüstung.

12. Hardware-Auslöser

Gekauft wird nur, wenn ein Auslöser zieht. So spät wie möglich, wegen der aktuellen Preise für RAM und SSDs.

Was Auslöser
Cluster-RAM (+16 GB je Node, freier Slot) Heimdienst-Pods werden ≥ 1× pro Woche verdrängt oder Fabrik-Jobs warten im Schnitt > 30 min
Zweiter Datenträger je Node (M.2 2280 oder 2,5″-SATA; für SATA braucht es HP-Rahmen und -Kabel) lokale Volumes > 70 % voll oder konkreter Bedarf an repliziertem Speicher
NUC entlasten bzw. ersetzen nach dem Aufräumen: Memory-PSI rate(node_pressure_memory_stalled_seconds_total[1h]) > 0,05 über 7 Tage oder MemAvailable-Minimum < 2 GiB über 30 Tage. Swap zählt nicht (Swap ist voll ohne Druck). Ersatz nur bei einem Defekt
USV Laufzeit-Tief < 10 min oder Meldung „Akku tauschen“
Storage Box 80 % voll oder vor großen Importen
UNAS-Platten 75 % voll (heute 29 %)

13. Übergaben an die Epics

Epic Übergabe aus D1
E1 (#179/#216) Backup-Topologie nach Abschnitt 6: USB-RAID raus, UNAS als lokales Ziel, Originale direkt offsite, UNAS-Snapshots neu bewerten, neues Ziel für das aiserver-Repo, VPS-Backup, Archivordner sichten und offsite sichern. Rebuild-Runbook NUC mit der Zustandsliste aus Abschnitt 9. Kaltstart-Drill als Abnahme. Notfallkonten auf den Heimdiensten (Identity bleibt auf dem VPS). UDM-Config-Backup. Lars ins Tailnet (T2). Storage-Box-Auslöser
E2a (#181) Alle 17 untracked .env → Infisical vor der NUC-Neuinstallation. Offline-Kaltstart des Agents testen. Infisical-Identitäten je Vertrauenszone (Robin), damit der Free-Plan mit 5 Identitäten reicht. Vorschlag zum Zuschnitt: Robin · Heim-Hosts (NUC, Pi, aiserver) · VPS · Cluster-Heimdienste · Fabrik (statt der zwei Identitäten aus dem Fabrik-Konzept). upsmon-Passwort rotieren (Kommentar in #181)
E2b (#182) bootstrap.sh NUC nach Abschnitt 9 mit Probelauf. ADR-006 um den NUC erweitern. Docker-Drop-in nach #278. /mnt/scanner → /mnt/ssd. VPS-Rebuild auf 26.04. Tailscale-Clients aktualisieren (homelab-external#34)
E2c/E2d (#183/#184) doco-cd für alle Compose-Hosts (NUC, aiserver, VPS, Pi)
E3 (#186) VM/VL auf die SSD. Prometheus und InfluxDB → VictoriaMetrics inkl. Bestandsdaten. Zweiter Alarmweg + healthchecks.io vor „VPS = einzige Tür“ (#225). #270 und #278 (Wiederanlauf). Strommessung NUC/aiserver/UNAS. PSI-Auslöser NUC. Label der pz-server-Metrik prüfen. Ablaufwarnung für mTLS-Zertifikate. Fragen zu homepage
E4/E6 NUC-ollama-Stack und Voice-Stack auf dem NUC entfernen. HA-Voice → aiserver oder Pipeline entfernen. Kaputte HA-Integrationen (pi_hole, ollama, ZHA ohne Stick). pz-server bei Bedarf (HA-Schalter). esphome bei Bedarf. homepage in HA nachbauen?
E5 (#188) Immich-ML → aiserver. Tailnet bleibt Übergangsweg für den Upload, bis Immich-mTLS auf beiden iPhones getestet ist. Abnahme entsprechend formulieren
E8 (#191) Identity bleibt auf dem VPS, nur OIDC-Clients anlegen. NetBird-Prüfung gestrichen. Headscale-OIDC bleibt Ventil Nr. 1
E9 (#192) DNS-Zweitserver auf dem Pi 4 vor dem Umbau im flachen Netz (DHCP verteilt beide, nebula-sync), damit er Sicherheitsnetz für das Umbau-Wochenende ist. Cluster-Nodes nutzen nicht Pi-hole als einzigen Resolver. VLAN 80 „lab“ und AMT-Netz. Host-Resolver-Fallback bleibt aus dem Server-VLAN erreichbar. Der Cluster-Aufbau wartet auf E9 (Robin): Rutscht E9, rutscht der Cluster mit, kein Aufbau im flachen Netz
E10 (#193) Reihenfolge und Design nach Abschnitt 8: HA-mTLS-Test → VPS-Tür (Entrypoint-Plan, CrowdSec-Topologie, Geo-Block, DDNS-Records weg, Headscale mem_limit) → immich-public-proxy → Immich-mTLS. PKI-Rezept im Repo. snowflake auf den VPS. iCloud-Kündigung erst 2027
Fabrik 2027 Fabrik-Namespaces erreichen pkv-app nicht (Cilium default-deny), eine Infisical-Identität für die Fabrik. Infisical Agent Vault prüfen (Credential-Broker per HTTPS_PROXY: Worker-Jobs halten keine echten Tokens, Access Bundles, Sessions mit Ablaufzeit, Audit-Log, Proxy selbst hostbar; Sessions legt eine Machine Identity an, also keine zusätzlichen Identitäten; frei bis 5.000 Anfragen im Monat, danach 2 $ je 1.000, Stand 28.10.2026). Vorher die Anfragenzahl pro Job messen und die Proxy-Kette mit dem Paket-Proxy klären (beide brechen TLS auf). Konzept auf den Stand von ADR-012 bringen: kein Longhorn zum Start, Storage und Backup für Beads/Qdrant (local-path + VolSync bzw. NFS für Qdrant-Snapshots), Grundlast 4–7 GB, Argo oder Flux offen, Kapazitätstabelle als Eingang für „2 oder 3 Worker“. Paket-Proxy im Cluster. Webhook-Empfänger auf dem VPS möglich
Doku homelab-infra-Skill nachziehen (USV-Modell, Identity bestätigt, VPS-Tür, Pi 4). LikeC4-Modell um Cluster, Pi und Tür ergänzen, als Antwort auf „wie hängt alles zusammen“

14. Änderungen an der Roadmap

  • Leitplanke „Plattform“: „K8s bewusst verworfen“ wird durch ADR-012 ersetzt: Hybrid und gestuft, Compose bleibt für Hostgebundenes.
  • Leitplanke „Extern-Hosting“: Der VPS bleibt in abgespeckter Form. Die StorageBox bleibt.
  • iCloud-Kündigung → 2027 (Robins Entscheid). iCloud bleibt bis dahin der Kanal zum Teilen. Ventil v4 Nr. 3 ist damit bewusst gezogen, nicht erst am Checkpoint.
  • Q1 2027: Jan Cluster + Stufe 1a + Fabrik-MVP-0 → Feb NUC-Neuinstallation → März E10-Rest → Stufe 1b danach. Review April 2027.
  • Vor E9: DNS-Zweitserver auf dem Pi 4.
  • Neu auf dem Board: homeserver#278 (Kaltstart), homelab-external#34 (Tailworm).

15. Dem Umsetzer überlassen

  • Cluster-Werkzeuge: Argo CD oder Flux, Omni oder talhelper, Vorlage. Die Kapazität dabei mitdenken.
  • Lokaler Speicher im Cluster: local-path oder OpenEBS-LVM/TopoLVM.
  • Konkrete Requests und Limits je Pod, Größe des sabnzbd-Article-Cache.
  • Werkzeug für die Offline-CA (openssl oder step), solange Legacy-.p12 und Laufzeiten eingehalten werden.
  • Betriebssystem des Pi 4.
  • Timer bzw. Watchdog für NFS-Dienste (#278/#270): Healthcheck, Pfad-Unit oder Compose-Abhängigkeit.

16. Offene Prüfpunkte

  • Hetzner-AGB zu Tor-Diensten vor dem Umzug von snowflake.
  • IPv6-Freigaben der UDM vor dem Schließen der Forwards.
  • Upload-Bandbreite des Heimanschlusses: speedtest-Metriken fehlen in VictoriaMetrics, relevant für Jellyfin-Remote und Immich-Video.
  • Immich-mTLS-Import auf den aktuellen iOS-Versionen beider iPhones.
  • Nutzt jemand Apple Watch oder Local Push mit HA? Das sind die Grenzen von mTLS.
  • Raspberry Pi 4: Zustand und Netzteil prüfen und ihn an die USV anschließen.