Files
homelab-infra/docs/EXTERNAL_DEPENDENCIES.md
T

19 KiB

External Dependencies - KalliLab CORE

Status: Betreiber-Baseline 2026-06-01; Account-Recovery, Schluessel und Besitznachweise bleiben ausserhalb des Repos.

Zweck

Dieses Dokument beschreibt externe Anbieter und Konten, von denen Betrieb, Recovery oder Zugriff abhaengen. Ziel ist, im Ausfallfall nicht erst suchen zu muessen, welcher Provider welches Teilproblem verursacht.

Abhaengigkeiten

Anbieter / System Zweck Kritikalitaet Recovery-Auswirkung Zugang / Besitz Notfallplan
Telekom DSL Internet-Uplink hoch Public Apps, ACME, DDNS, Hetzner-Off-site und Tailscale-Initial-Verbindung fallen aus Telekom-Kundenkonto Kein WAN-Failover am Standort eingerichtet (FRITZ!Box-Ausfallschutz inaktiv); lokale LAN-Dienste laufen weiter; Hotspot-Behelf nur fuer Operator-Arbeit, nicht fuer Public Apps
FRITZ!Box 7590 Router, DHCP, Telefonie, WAN hoch LAN ohne DHCP/Routing; auch lokale Inter-Subnet-Kommunikation kann brechen Operator-Login auf 192.168.178.1 FRITZ!Box-Konfig-Backup vom 2026-06-01 liegt extern/off-system in Vaultwarden; Reset-Pin und Account-Pfad bereithalten; Remote-HTTPS/FTP/FTPS aus dem Internet sind aus
Domain-Registrar Besitz kaleschke.info hoch Ohne Domain brechen Public URLs/TLS-Erneuerung Operator-Konto ausserhalb Repo, konkreten Registrar im Account pruefen Registrar-Zugang, 2FA-Recovery und Zahlungsweg analog/off-system sichern
Cloudflare DNS Authoritative DNS, ACME DNS-Challenge, DDNS hoch Neue Zertifikate/DNS-Aenderungen blockiert Cloudflare-Konto; API-Token liegt als Host-Secret API-Token rotierbar halten, Account-Recovery und Zone-Besitz pruefen
Hetzner Storage Box Off-site Borg Backup kritisch Restore aus Off-site ggf. nicht moeglich Hetzner-Konto / Storage-Box-Zugang ausserhalb Repo Borg-Passphrase ist offline gesichert; Hetzner 2FA/Recovery/Zahlung sind bestaetigt; Storage Box ist SSH-only, Maintenance-Key liegt in Vaultwarden; Borg append-only wird per Operator-Entscheidung nicht umgesetzt
GitHub Mirror Externer Repo-Mirror michaelkaleschke-spec/homelab-infra (privat) mittel/hoch Gitea-Verlust abfederbar, aber Bare-Metal-Bootstrap braucht Read-Zugang (PAT oder SSH-Deploy-Key); ohne diesen ist der Mirror im DR nicht klonbar GitHub-Konto; Push-PAT liegt in Gitea-Mirror-Settings; Read-PAT/Deploy-Key fuer DR muss zusaetzlich offline im DR-Kit liegen Mirror-Status regelmaessig pruefen; lokalen Clone als zweite Kopie behalten; Read-PAT mit Scope repo:read separat erzeugen und im DR-Kit ablegen
Tailscale Remote-/Operator-Zugang hoch Remote-Zugriff erschwert, lokale Bedienung bleibt Tailnet-Konto; Node Kallilabcore, IPv4 100.80.98.33 Break-glass per LAN und physischem Zugriff; Tailnet-Recovery-Codes sichern
GMX SMTP Authelia Notifier, Vaultwarden-Einladungen, Ops-Report-Mail mittel Mail-Notifier und Vaultwarden-Einladungen fallen aus; Login selbst nicht zwingend GMX-Konto; SMTP-Secrets liegen hostseitig ntfy/zweiter SMTP als Fallback pruefen
OpenAI API Paperless-GPT LLM/Vision-OCR (Dokumenttext/-bilder) und n8n Mail->LLM->Gitea-Workflow (GMX-Mailinhalt bis ~8000 Zeichen) mittel Automatische Dokument-Titel/Tags/Korrespondenten/LLM-OCR und die n8n-Mail-Extraktion fallen aus; Paperless und n8n laufen sonst weiter je eigener OpenAI-API-Key ausserhalb Repo (Paperless-GPT Stack-ENV; n8n Credentials Store) Keys in Vaultwarden/Komodo sichern, bei Offenlegung rotieren; Kosten/Usage im OpenAI-Projekt beobachten. Datenklasse/Retention/Loeschpfad stehen unten in "Data Privacy / Egress-Kontrollen"; konkrete OpenAI-Projekt-Settings bleiben live zu pruefen
Let's Encrypt TLS-Zertifikate hoch Cert-Erneuerung faellt aus automatisch via Traefik und Cloudflare DNS-Challenge Cert-Expiry Alert einrichten; Cloudflare-Token und Traefik-Storage pruefen
Container Registries Image Pulls von Docker Hub, GHCR, LSCR, Gitea Registry u. a. mittel Redeploy/Update blockiert ueberwiegend oeffentlich; keine produktiven Registry-Tokens im Repo Gepinnte Digests und lokale Runtime helfen kurzfristig; Updates geplant und einzeln deployen
Plex Konto Plex native Auth, Claim und Client-Zugriff ueber plex.kaleschke.info mittel Plex-Web/App-Login und Clients koennen ausfallen; LAN-Medienpfade bleiben lokal Plex-Konto ausserhalb Repo; PLEX_CLAIM nur fuer Setup Plex Remote Access bleibt aus; externer Zugriff laeuft ueber Traefik/443. Konto-Recovery separat sichern
Mobile Push ntfy (self-hosted) und ggf. mobile Plattform-Pushes; Egress = Alert-Payloads/Topic-Namen an Upstream-Push niedrig/mittel Alerts erreichen Mobilgeraete ggf. nicht App-/Device-seitig Kritische Alerts zusaetzlich in Grafana/Glance sichtbar halten; Payloads/Topics ohne PII/Pfade/Secrets halten; konkrete Live-Namen periodisch screenen
healthchecks.io (Cloud) Externer Dead-Man's-Switch fuer Host-down-/Backup-Stillstand: Borg-Pre-Hook, baerchen-Nearline-Pull, geplanter Monitoring-Watchdog (#8); interne Job-Checks laufen self-hosted mittel Stiller Ausfall von Borg-/Nearline-Lauf wird nicht extern sichtbar; Backups selbst laufen weiter healthchecks.io-Account; Ping-/Capability-URLs als Host-Secrets (docs/SECRETS_MAP.md) Datenklasse = operative Metadaten (Check-Name/Timing); Naming ohne PII/Pfade/Secrets. Skripte sind endpoint-agnostisch -> bei Bedarf auf self-hosted hc.kaleschke.info umstellbar. Bewusste Architektur (DECISIONS 2026-06-23): Host-down-Waechter bleiben extern
Operator-DR-Workstation Bare-Metal-Recovery-Arbeitsplatz (Gaming-PC Windows, lokaler Repo-Clone G:\Gitea_Clone\homelab-infra) kritisch Ohne Workstation kein Borg-Extract, kein Hetzner-Zugriff, kein Repo-Bootstrap; der Unraid-Host ist im Bare-Metal-Fall gerade weg Operator-PC, WSL2 + Borg-Client, SSH-Key fuer Hetzner Storage Box, Offline-Kopie der Borg-Passphrase Setup als bewusste DR-Vorbedingung pflegen (siehe Abschnitt "DR-Workstation Bare-Metal-Kit")

Data Privacy / Egress-Kontrollen

Stand: 2026-06-26, gegen Repo und offizielle Anbieter-Doku eingeordnet. Diese Tabelle beschreibt erlaubte externe Pfade und die erwartete Datenhygiene. Sie ersetzt keine Live-Kontrolle der konkreten Account-Schalter.

Egress-Pfad Repo-Beleg Datenklasse Token / Account Retention beim Dritten Loesch-/Export-/Opt-out-Pfad Naheliegende Optimierung
Paperless-GPT -> OpenAI API apps/paperless-gpt/docker-compose.yml, docs/SERVICE_CATALOG.md Dokumenttext, Dokumentbilder, Metadaten, ggf. personenbezogene Inhalte OPENAI_API_KEY als Stack-ENV/Host-Secret OpenAI API: Standard-Retention bis zu 30 Tage fuer API Inputs/Outputs; Responses-API Application State standardmaessig 30 Tage; API-Daten werden laut OpenAI standardmaessig nicht zum Training genutzt, sofern nicht explizit opt-in App deaktivieren oder Provider wechseln; API-Key rotieren/loeschen; OpenAI-Projekt/Logs pruefen; ZDR nur fuer geeignete Accounts/Endpoints beantragen; bei Responses-API store=false/Feature-Nutzung bewusst setzen, falls die App dies unterstuetzt Nur Allowlist/Tags an Paperless-GPT senden; keine sensiblen Dokumenttypen ohne bewusste Freigabe
n8n Mail -> OpenAI -> Gitea n8n-Workflow-JSONs und docs/SERVICE_CATALOG.md; Live-Aktivitaet separat pruefen GMX-Mailinhalt bis Workflow-Limit, extrahierte Aufgaben/Metadaten n8n Credential Store: GMX/OpenAI/Gitea-Credentials; N8N_ENCRYPTION_KEY fuer Restore noetig OpenAI wie oben; Gitea speichert erzeugte Issues lokal und ggf. im GitHub-Mirror, falls dort committed/gespiegelt Workflow deaktivieren; Credentials rotieren/loeschen; n8n Credential-Export nur verschluesselt behandeln; Gitea-Issues loeschen/exportieren Workflow standardmaessig inaktiv halten oder Mail-Absender/Ordner allowlisten; Prompts auf minimale Datenweitergabe kuerzen
GMX IMAP/SMTP Authelia/Vaultwarden/Mail-Archiver/n8n Mailpfade in Service-Doku E-Mail-Inhalte, Absender/Empfaenger, SMTP-/IMAP-Metadaten GMX-Konto + Host-Secrets GMX: Content-/Nutzungsdaten werden nach 180 Tagen Inaktivitaet geloescht; bei Kuendigung werden Userdaten geloescht, sofern keine gesetzlichen Aufbewahrungsfristen greifen GMX Account verwalten/kuendigen; Mails via IMAP/POP3/Export sichern; personenbezogene Accountdaten im Kundencenter exportieren n8n/Mail-Archiver nur mit dediziertem Postfach oder dedizierten Ordnern betreiben; keine privaten Vollpostfaecher ungefiltert an LLM-Workflows geben
healthchecks.io Cloud Externe Borg-/Nearline-/Host-down-Waechter in docs/MASTER_TODO.md, ops/h-drive-nearline/README.md Checknamen, Ping-Zeitpunkte, IP-/Log-Metadaten, Capability-URLs healthchecks.io-Account; Ping-URLs als Host-Secrets Healthchecks.io: inaktive Accounts werden nach Hinweis geschlossen; Daten koennen nach Loeschung/Account-Schliessung bis zu 2 Monate in DB-Backups wiederherstellbar sein Checks/Account loeschen; Capability-URLs rotieren; Pfad bei Bedarf auf self-hosted hc.kaleschke.info umstellen Checknamen abstrakt halten, keine Hostpfade/Personennamen/Secrets im Namen oder Payload
ntfy / Mobile Push ops/ntfy, Monitoring/Alertmanager-Bridge, Service-Doku Alert-Payloads, Topicnamen, ggf. operative Metadaten ntfy-User/Topic/Device; mobile Push ueber App-Plattform ntfy: Nachrichten werden standardmaessig 12h gecached, Attachments 3h; bei Play/App-Store-Versionen koennen Metadaten/Inhalte ueber FCM laufen Payload loeschen/Cache abwarten; mobile Push abmelden; F-Droid-App oder Self-host/Instant-Delivery nutzen, wenn FCM vermieden werden soll Payloads weiter minimieren: keine PII, keine Pfade, keine Secrets, keine aussagekraeftigen internen Hostnamen
Borg -> Hetzner Storage Box Borg-Scope, ops/borg-ui/BACKUP_SCOPE.md, docs/RESTORE_MATRIX.md Verschluesselte Offsite-Kopie aller Borg-Quellen inkl. personenbezogener Appdaten und Secrets Hetzner-Konto, Storage-Box-SSH-Key, Borg-Passphrase Retention liegt primaer in Borg-Retention; Hetzner verarbeitet als Dienstleister nach DPA/Produktstandort, Non-Cloud-Produkte laut Hetzner innerhalb EU Borg prune/delete/compact; Storage-Box-Daten loeschen/Account kuendigen; Crypto-Shred durch Vernichtung der Borg-Passphrase/Keys als letzte Kontrolle DPA im Hetzner-Account aktuell halten; Restore und Loesch-/Prune-Lauf periodisch belegen
GitHub Mirror docs/EXTERNAL_DEPENDENCIES.md, Gitea-Push-Mirror Repo-Inhalt: Infrastruktur-Code/Doku, keine Secret-Werte; ggf. interne Host-/Pfadnamen GitHub-Konto; Push-PAT in Gitea; DR-Read-Deploy-Key offline GitHub behandelt private Repos als vertraulich; konkrete Repo-/Account-Loeschung ueber GitHub-Settings, Actions-Artefakt-Retention separat falls genutzt Mirror deaktivieren/Repo loeschen; PAT/Deploy-Key widerrufen; Audit-/Access-Listen exportieren, soweit Account/Plan es erlaubt Mirror weiter privat halten; Branch-/Token-Inventar live pruefen; Secret-Scanner gegen History laufen lassen

Quellen fuer Anbieter-Regeln:

  • OpenAI API Data Controls: https://developers.openai.com/api/docs/guides/your-data
  • OpenAI Enterprise Privacy/API Retention: https://openai.com/enterprise-privacy/
  • GMX Privacy/Data Collection: https://www.gmx.com/company/privacypolicy/, https://www.gmx.com/company/data-collection/mail-client/
  • GMX Export: https://support.gmx.com/account/managing/export-data.html
  • Healthchecks.io Privacy: https://healthchecks.io/privacy/
  • ntfy Privacy: https://docs.ntfy.sh/privacy/
  • Hetzner DPA/Data Protection: https://docs.hetzner.com/general/company-and-policy/data-protection-at-hetzner/
  • GitHub private repo confidentiality/deletion/export: https://docs.github.com/site-policy/github-terms/github-terms-of-service

Kritische Secrets ausserhalb des Repos

Authoritativ ist docs/SECRETS_MAP.md. Diese Liste markiert nur externe Abhaengigkeiten.

Secret Zweck Recovery-Hinweis
Borg Passphrase Entschluesselung Borg-Repos Offline gesichert, Operator-Bestaetigung 2026-05-26
Cloudflare DNS API Token ACME DNS-Challenge Token-Rotation und Scope pruefen
GitHub Mirror Token Push-Mirror In Gitea/GitHub verwaltet, nicht im Repo
Tailscale Account Recovery Tailnet-Zugang Account-2FA/Recovery Codes sichern
SMTP Passwort Authelia Mail, Vaultwarden-Einladungen, Ops-Report-Mail In Host-Secrets, Fallback pruefen
Domain-Registrar Recovery Domain-Besitz und Zahlung Account, 2FA und Zahlungsweg ausserhalb des Homelabs sichern
Hetzner Storage Box Zugang Off-site Backup-Ziel Account 2FA aktiv, Recovery Key offline gedruckt, Zahlungsweg ok; Maintenance-Key und Storage-Box-Passwort in Vaultwarden
OpenAI API Key Paperless-GPT GPT-Zugriff Als Stack ENV / Vaultwarden-Eintrag sichern; bei Verdacht auf Leak rotieren
KOMODO_* Stack-ENV-Notiz Offline-Sicherung der 5 Komodo-Werte (KOMODO_SECRET_KEY, KOMODO_WEBHOOK_SECRET, KOMODO_JWT_SECRET, KOMODO_MONGO_PASSWORD, KOMODO_PERIPHERY_PASSKEY) Status 2026-06-03: offline gesichert (Operator-Bestaetigung). Quelle der Werte ist die host-seitige Self-Stack-.env (/mnt/user/services/stacks/komodo/.env) bzw. die Drift-Recovery-Kopie unter /mnt/user/appdata/secrets/_komodo_stack_env_recovery_2026-05-04.env. Nicht im Repo, nicht in ntfy, nicht in Logs
GitHub-Mirror Read-Only Deploy-Key DR-Read-Zugang zum privaten Mirror michaelkaleschke-spec/homelab-infra Status 2026-06-03: offline gesichert (Operator-Bestaetigung). SSH-Deploy-Key dr-readonly-2026-06-03 (ed25519, Passphrase-frei), Title in GitHub Repo Settings -> Deploy Keys: DR Read-Only 2026-06-03, Write-Access bewusst deaktiviert. Private Key liegt offline neben der KOMODO_*-Notiz. Smoke git ls-remote am 2026-06-03 erfolgreich.

DR-Workstation Bare-Metal-Kit

Der Operator-Gaming-PC ist im Bare-Metal-Fall die einzige Stelle, von der aus Recovery starten kann. Folgende Bestandteile gehoeren zum minimalen DR-Kit auf diesem Rechner:

Bestandteil Zweck Pruefen
Repo-Clone G:\Gitea_Clone\homelab-infra (master, gefetcht) Recovery-Anker fuer ops/komodo/docker-compose.yml, Restore-Skripte git -C G:\Gitea_Clone\homelab-infra log --oneline -1 plausibel aktuell
Read-Zugang zum privaten GitHub-Mirror Fallback, falls lokaler Clone defekt SSH-Deploy-Key dr-readonly-2026-06-03 (ed25519, Passphrase-frei) offline im DR-Kit, ein Test-Clone pro Quartal mit GIT_SSH_COMMAND="ssh -i <pfad-zum-key> -o IdentitiesOnly=yes" git ls-remote git@github.com:michaelkaleschke-spec/homelab-infra.git
WSL2 mit Borg-Client (apt install borgbackup) Borg-Extract von Hetzner Storage Box ohne laufenden Unraid-Host borg --version antwortet; ein borg list gegen Hetzner-Repo laeuft
SSH-Key fuer Hetzner Storage Box Login auf u565255.your-storagebox.de:23 Status 2026-06-03: ed25519-DR-Key dr-hetzner-2026-06-03 offline gesichert. Pubkey via install-ssh-key auf der Storage Box autorisiert, passwortloser Login erfolgreich, ls zeigt vier Borg-Repos (backup, backup2, hetzner_borg_appdata, hetzner_borg_appdata_critical). Private Key liegt offline neben KOMODO_*-Notiz und GitHub-Deploy-Key
Offline-Kopie Borg-Passphrase Entschluesselung des Borg-Repos Operator-Bestaetigung 2026-05-26; bei Reviews nur Auffindbarkeit pruefen
Offline-Kopie KOMODO_* Stack-ENV Komodo-Bootstrap ohne Vaultwarden Status 2026-06-03: offline gesichert (Operator-Bestaetigung)
Vaultwarden Master-Passwort offline Zugriff auf Vaultwarden-Export im DR Operator-Wissen, ggf. analog gesichert

Operative Regel: Die DR-Workstation wird nicht als Test-/Spiel-PC betrachtet. WSL und das DR-Kit duerfen nicht unbemerkt unbrauchbar werden. Quartalsweise minimaler Trockenlauf: borg list <hetzner-repo> muss antworten und der Repo-Clone muss fetchbar bleiben.

Ausfall-Szenarien

Hetzner Storage Box nicht erreichbar

  • Lokales Borg-Repo und aktuelle Dumps pruefen.
  • Keine destruktiven Host-Aenderungen starten, solange Off-site unklar ist.
  • H:/ Nearline-Pull als schnelle lokale Zweitkopie fuer kritische Restore-Artefakte nutzen.
  • Zweites Off-site-Ziel nur neu bewerten bei Hetzner-Problemen, stark wachsendem Datenwert oder geaenderter Betreiber-Praeferenz.

Cloudflare Account/DNS gestoert

  • Bestehende Zertifikate laufen bis Ablauf weiter.
  • Keine Domain-/ACME-Aenderungen moeglich.
  • Tailscale/LAN-Zugang als Break-glass nutzen.

Tailscale gestoert

  • Lokalen LAN-Zugang nutzen.
  • Direkte Admin-Ports nur gemaess dokumentierten Ausnahmen verwenden.
  • AdGuard-Admin-Bind muss so geplant werden, dass ein lokaler Break-glass-Weg bekannt ist.
  • Seit 2026-05-26 ist AdGuard Admin nur ueber 100.80.98.33:8082 gebunden; bei Tailnet-Ausfall ist lokaler Host-/Compose-Zugriff der Break-glass-Weg.

Telekom-DSL / FRITZ!Box gestoert

  • Lokale LAN-Apps (Plex, AdGuard-DNS, lokales Borg-Dump-Repository) bleiben verfuegbar, solange Host und Switch laufen.
  • Tailscale-Sessions, die bereits stehen, koennen ueber DERP/Relays kurzzeitig weiterlaufen; neue Verbindungen koennen ausfallen.
  • ACME-/DDNS-/Hetzner-Backup-Laeufe pausieren bis WAN zurueck ist.
  • FRITZ!OS ist am 2026-06-01 auf 8.25 (154.08.25) beobachtet; weitere Updates nur in einem geplanten Service-Fenster einspielen, weil Reboot WAN/Tailscale-Aufbau unterbricht.

Domain verloren oder Registrar-Zugriff verloren

  • Gitea/GitHub Mirror und lokale IP/Tailscale-Pfade fuer Recovery nutzen.
  • Neue Domain waere separater Migrationsfall fuer Traefik, Authelia, App-URLs und Clients.

Review

Datum Ergebnis Naechste Aktion
2026-05-26 bis 2026-06-03 Baseline und Haertung abgeschlossen: externe Abhaengigkeiten dokumentiert; FRITZ!Box-WAN auf 443/tcp bereinigt, Remote-Dienste aus, Konfig-Backup in Vaultwarden; Hetzner-Account-Hygiene (2FA, Recovery Key offline); KOMODO_*-Notiz und GitHub-Read-Deploy-Key offline gesichert. Detailhistorie in Git. Keine Folgeaktion
2026-06-03 Hetzner Storage Box DR-SSH-Key dr-hetzner-2026-06-03 (ed25519, Passphrase-frei) erzeugt, via install-ssh-key auf Storage Box u565255.your-storagebox.de:23 autorisiert, passwortloser Login erfolgreich (Borg-Repos sichtbar), Private-Key offline neben KOMODO_*-Notiz und GitHub-Deploy-Key abgelegt, Arbeitsplatz-Kopie geloescht. Bare-Metal-Borg-Restore von der DR-Workstation ist damit moeglich, sobald WSL2 + Borg-Client installiert sind. Restliche P1-Operator-Aufgaben: WSL2 + Borg-Client auf DR-Workstation installieren, Nextcloud-Restore-Test
2026-06-06 DR-Workstation produktiv: WSL2 Ubuntu 24.04 vorhanden, SSH/Git und Borg 1.2.8 in WSL vorhanden, DR-Key-Arbeitskopien unter ~/.ssh/dr-readonly und ~/.ssh/dr-hetzner, GitHub-Read-Smoke und Hetzner-SSH-Smoke erfolgreich, ops/maintenance/dr-workstation-smoke.sh nach ~/dr-smoke.sh kopiert. Finaler Operator-Smoke erfolgreich: GitHub HEAD 3a263a4..., Hetzner Storage Box Repos sichtbar, Borg-Repo hetzner_borg_appdata_critical gelesen, Repository ID 5dd9b949..., encrypted Yes (repokey), DR-Smoke OK (2026-06-06 10:05:30). Quartalsweise bash ~/dr-smoke.sh; Borg-Passphrase weiterhin nur interaktiv eingeben und nicht speichern