30aa696e61
renovate.json: gitea platform, autodiscover Micha/*, group rules (major separate, minor+patch+digest grouped, stateful tier-1 individual, komodo-major disabled), pin range strategy, no automerge, dependency dashboard enabled. ops/renovate/run-renovate.sh: one-shot docker run wrapper that reads the Gitea PAT from /mnt/user/appdata/secrets/renovate_token.txt, runs renovate/renovate:41, logs into /mnt/user/services/renovate/logs/. docs/RENOVATE.md: 5-step operator setup (Gitea service account, PAT, token file, first run, six-hourly user script). Explicit no-automerge stance with notfall-stop checklist. Cross-doc sweep: SECRETS_MAP entry for renovate_token.txt, REPO_MAP entry for RENOVATE.md, AUDIT_2026-05-25_TODO new Sprint 8 with F-15, F-07, F-09 rest, F-12 status, MIGRATION_LOG captures the four-block sprint in one entry. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
61 KiB
61 KiB
Migration Log - Homelab GitOps
Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ablauf steht in docs/WORKFLOW.md, das Zielbild in HOMELAB_ARCHITECTURE_MASTER_V2.md.
Aktueller Endstand
- Gitea Online ist der verbindliche Sollzustand.
- Komodo ist der einzige produktive Stack-Manager.
- Portainer CE ist entfernt.
- Firefly, Firefly-Fints und Semaphore sind entfernt.
monitoring/ist der einzige aktive Observability-Stack; alte Repo-Pfadeops/grafana-influxdbundops/lokisind entfernt.- Borg UI ist produktiv, Dump-Automatisierung laeuft host-seitig und ein Restore-Smoke-Test wurde erfolgreich durchgefuehrt.
- GitHub Desktop ist der bevorzugte lokale Workflow fuer
Fetch,Pull,CommitundPush. - Mutable Image-Tags sind auf die aktuell laufenden Digests eingefroren.
Historische Meilensteine
2026-05-29 - Stack-Hygiene Sprint: Healthchecks, Monitoring-Digests, Komodo-Bootstrap-Skript, Renovate-Vorbereitung
Vier Audit-Punkte am Stueck abgearbeitet. Pro Block: Live-Verifikation am Host, Doku im Repo.
F-15 Tier-1 Healthchecks
- 6 Tier-1-Stacks bekommen Healthchecks: postgresql17 (
pg_isready), Redis (redis-cli pingmit Auth aus dem mount), Vaultwarden (curl /alive), Gitea (wget /api/healthz), Traefik (traefik healthcheck --ping, vorher--ping=truein CLI aktiviert), Authelia (wget /api/health- Authelia v4.39 hathelper health-checkentfernt, daher direkter Endpoint). - Erste Iteration in Vaultwarden + Authelia schlug fehl: Vaultwarden hat kein
wget, Authelia kennt dashelper-Subcommand nicht mehr. Probe perdocker execzeigte: Vaultwarden hatcurl, Authelia hatwget. Compose entsprechend nachgezogen, zweiter Lauf gruen. - Komodo-Stack-Workspaces fuer
postgresql17(124 commits behind) undgitea(52 commits behind) wurden Komodo-seitig nicht automatisch gepullt. Manuell uebergit pull --ff-onlypluscpder aktuellen Compose-Datei aus dem Host-Repo-Clone in den Stack-Workspace synchronisiert, danndocker compose up -d. Gitea-Workspace hatte zusaetzlich untracked Doku-Files; nur die im aktuellen Master tracked-en Files entfernt, nicht viagit clean -fd. Workspace-Drift selbst ist nicht heute Auftrag, aber als Folge-Befund notiert. - Endstand Live: alle 6 Healthchecks
healthy.
F-07 Monitoring-Stack Digest-Pinning
- 9 Container in
monitoring/docker-compose.ymlper Tag@sha256 gepinnt (prometheus, alertmanager, alertmanager-ntfy-bridge, blackbox-exporter, loki, promtail, grafana, node-exporter, cadvisor; plus zweiter python:3.13-alpine im Bootstrap-Dashboard-Importer). InfluxDB war bereits gepinnt. - Digests aus den laufenden Containern per
docker inspect ... .Config.Image+docker image inspect ... .RepoDigestsausgelesen, damit die Pins exakt dem Live-Stand entsprechen. - Kein Recreate ausgeloest, weil die Images identisch sind; nur die Compose-Datei ist jetzt reproduzierbar wie die Tier-1-Stateful-Stacks.
F-09 Rest - Komodo-Bootstrap-Trockenlauf-Skript
ops/restore-tests/komodo-bootstrap-{compose.test.yml,test.sh,plan.md,runbook.md}analog zum Immich-Restore-Test-Muster angelegt.- Test-Compose nutzt dieselben Image-Digests wie Produktion (mongo:7.0.32, komodo-core:2, komodo-periphery:2), isoliert unter Compose-Project
restoretest-komodo, Test-Port nur127.0.0.1:19120, Test-Periphery ohne docker.sock-Mount und ohne/mnt/user/services-Mount - kann produktive Container nicht managen. - Wegwerf-Secrets sind im Compose hardcodiert, produktive
KOMODO_*-Werte werden nicht beruehrt. - Smoke-Test-Kriterien: docker compose config valid, Mongo healthy, Mongo Auth-Ping ok, Core HTTP 200/302/303/401, Periphery container
running. - Erster Lauf bleibt manueller Operator-Schritt.
F-12 Renovate-Bot (vorbereitet)
renovate.jsonim Repo-Root mit Homelab-tauglichen Group-Rules: Major-Updates getrennt, Minor/Patch/Digest fuer Docker-Compose und Dockerfile gruppiert, Tier-1-Datenhalter (Postgres, Mongo, Redis, pgvecto-rs) einzeln ohne Group, Komodo-Major-Updates explizit deaktiviert.ops/renovate/run-renovate.shals One-Shot-Container-Wrapper: liest Gitea-PAT aus Host-Secret-Datei, startetrenovate/renovate:41einmalig, schreibt Log unter/mnt/user/services/renovate/logs/.docs/RENOVATE.mdmit kompletter Operator-Setup-Anleitung (5 Schritte): Gitea-Service-Accountrenovate, Access-Token, Token-Datei, Erstlauf, User-Scriptrenovate-six-hourly(20 */6 * * *).- Bewusst KEIN Auto-Merge: jede PR braucht Operator-Sichtpruefung.
- Setup-Schritte (Gitea-User, PAT, Token-Datei, User-Script-Aktivierung) bleiben Operator-Aufgabe; Repo-seitig alles vorbereitet.
2026-05-29 - Borg-Source /local/appdata/homepage verspaetet entfernt + Removal-Checkliste in WORKFLOW
- Befund aus den ersten Tagen scharfer Alert-Pipeline:
HomelabBorgLastJobCompletedWithWarningsfiring fuer die letzten vier Borg-Laeufe (26.05.-29.05.), jeweils Exit-Code 107. - Ursache im Borg-UI-Logfile
backup_job_39_*.log:"/local/appdata/homepage: stat: [Errno 2] No such file or directory". Borg-UI-Source-Liste enthielt seit der Homepage-Entfernung am 25.05. weiterhin den Eintrag/local/appdata/homepage; der Appdata-Pfad war aber bereits nach_archive/homepage-removed-2026-05-25/verschoben. - Operator hat den Eintrag in der Borg-UI manuell entfernt; Source-Liste jetzt 23 statt 24 Eintraege,
homepagenicht mehr drin. Naechster Borg-Lauf 2026-05-30 04:30 sollte wiedercompletedohne Warning sein. - Backups waren nicht gefaehrdet: trotz Exit-Code 107 wurden alle anderen 23 Quellen sauber archiviert (Stats Job 39: 100.895 Dateien, 26.72 GB Original, 317 MB deduplicated).
- Erkenntnis: bei Stack-Removal wurde die Borg-Source-Liste damals nicht mit-aufgeraeumt.
docs/WORKFLOW.mdum neuen Abschnitt "Service-Removal-Checkliste" erweitert, der die Borg-UI-Source-Bereinigung explizit als Pflichtschritt 8 nennt (zusammen mit allen anderen Schritten wie Komodo-Destroy, Gitea-Webhook, Authelia-ACL, Blackbox-Target, Doku). - Positiv-Befund: die ntfy-Push-Pipeline (Cron
*/5Textfile-Export -> node-exporter -> Prometheus -> Alertmanager -> ntfy-Bridge), die am 2026-05-27 scharfgeschaltet wurde, hat den Drift binnen 24 h sichtbar gemacht. Das ist der intendierte Mechanismus.
2026-05-28 - H:/-Pull als Windows Scheduled Task aktiviert
- Task
KalliLab H Drive Nearline Pullregistriert auf dem Operator-Windows-PC: taeglich 05:30 (nach dem Borg-Dump-Fenster um ca. 04:00),RunLevel Limited,AllowStartIfOnBatteries,DontStopIfGoingOnBatteries,StartWhenAvailable,ExecutionTimeLimit 2 h. Naechster Lauf 2026-05-29 05:30. - Repo-Doku
docs/H_DRIVE_NEARLINE_PULL.mdStatus auf "produktiv" gesetzt, Register-Snippet auf den tatsaechlich ausgefuehrten Befehl korrigiert (PowerShell-EnumLeastPrivilege->Limited; alter Snippet haette beim ersten Aufruf einen Parameter-Binding-Fehler geworfen). - Verifikation am Windows-PC:
Get-ScheduledTaskzeigt StateReady, Trigger-Start 2026-05-28T05:30, RunLevelLimited. - Kein Eingriff am Host noetig; SMB-Quelle und H:/-Ziel waren bereits vorbereitet.
2026-05-28 - Zweites Off-site bewusst nicht umgesetzt
- Operator-Bewertung: 3-2-1-Regel ist mit aktueller Topologie erfuellt (Live + lokales Borg-Repo + Hetzner-Borg + H:/-Nearline = 4 Kopien / 3 Medien / 1 Off-site).
- Ein zweites Off-site wuerde ausschliesslich das Szenario "Hetzner-Account verloren" zusaetzlich abdecken. Eintrittswahrscheinlichkeit niedrig (etablierter deutscher Anbieter, dokumentierter Zahlungsweg). Aufwand und Kosten unverhaeltnismaessig fuer Familien-Homelab.
- Beschluss in
docs/OFFSITE_BACKUP_OPTIONS.mdmit Review-Triggern dokumentiert; F-03 indocs/AUDIT_2026-05-25_TODO.mdvon "offen" auf "erledigt (bewusst nicht umgesetzt)". - Stattdessen drei Folge-TODOs zur Haertung der bestehenden Topologie:
- Hetzner-Account-Hygiene: starkes Passwort + Backup-Zahlungsweg + Login-Benachrichtigungen. Bewusst keine 2FA (Operator-Entscheidung analog USV-Risiko-Akzeptanz).
- Borg
--append-onlyauf Hetzner pruefen. Befund: Repoappdata-criticallaeuft aktuell im Modefull,custom_flagsleer. Setup waere server-seitig in Hetzner-authorized_keys. - H:/-Pull als Windows Scheduled Task aktivieren (Skript und Doku ready, Erstlauf 2026-05-27 erfolgreich, Task selbst noch nicht angelegt).
- Bewusst NICHT angefasst: laufende Backup-Pipeline (kein Test-Restore, kein Modus-Wechsel ohne Folge-Sprint).
2026-05-28 - paperless-gpt und BentoPDF bewusst behalten
- Befund: Beide Container laufen Up 3 days, aber 0 Traefik-Zugriffe in den letzten 7 Tagen und kein User-LLM-Event in den paperless-gpt-Logs. BentoPDF-Logs zeigen ausschliesslich Docker-Healthchecks.
- Resource-Footprint vernachlaessigbar:
paperless-gpt34 MB RAM,bentopdf4 MB RAM, beide 0 % CPU. - Operator-Entscheidung 2026-05-28 (gegen die Nicht-Nutzung): beide behalten.
paperless-gpt: bleibt aktiv bis Paperless-NGX 3.0 verfuegbar ist. Paperless 3.0 wird native KI-Features mitbringen; danach neu entscheiden, obpaperless-gptnoch noetig ist oder abgeloest werden kann.bentopdf: bleibt aktiv als situatives PDF-Werkzeug; Footprint zu klein, um eine harte Entfernung zu rechtfertigen.
- Doku-Anker in
docs/SERVICE_CATALOG.mdergaenzt, damit die Frage in 6 Monaten nicht erneut als "warum laeuft das?" auftaucht.
2026-05-28 - Plex Server Reclaim und Remote Access deaktiviert
- Befund beim Versuch, Remote Access in der Plex-UI zu deaktivieren: Plex-Server war seit 18.05.2026 13:18 nicht mehr mit einem Plex.tv-Account geclaimt.
Preferences.xml391 Bytes, ohnePlexOnlineMail/PlexOnlineUsername/PlexOnlineToken. Login alsXeridoslieferte "Keine Berechtigung" auf den lokalen Server. Zusaetzlich waren dielibrary_sectionsleer (Backups vom 19./22./28.05. ebenfalls ~370 KB statt MBs); die Bibliotheks-Konfiguration war seit dem 18.05. weg. Filmdateien unter/mnt/user/media/*blieben unangetastet (833 Verzeichnisse, ~1.7 TB). - Reclaim als
Xeridosdurchgefuehrt: Operator-Token viaplex.tv/claimerzeugt, am Host als Shell-Inline-ENV beimdocker compose up -d --force-recreate plexmitgegeben. Token wurde nicht in.env, nicht in Compose, nicht in Komodo-Stack-ENV geschrieben. Nach Erfolg sauberer zweiter Recreate ohne Token, damitdocker inspect-Snapshot keinen Token mehr enthaelt. Bash-History defensiv geleert. - Endstand laut
Preferences.xml:PlexOnlineUsername="Xeridos",PlexOnlineMail="michideheld@gmx.de",PlexOnlineHome="1",PublishServerOnPlexOnlineKey="0"(Remote Access aus). - Operator hat im Anschluss die Bibliotheken neu angelegt (
/data/movies,/data/Heimatfilme) und Remote Access in der Plex-UI auf "deaktiviert" gesetzt; Metadata-Cache wuchs in den ersten 18 Minuten auf 630 MB. - Plex bleibt damit strikt LAN/Tailscale-only, konsistent zur FRITZ!Box-Bereinigung vom selben Tag. Smart-TVs (Schlaf-/Wohnzimmer) finden den Server ueber WLAN-LAN per mDNS/Plex-GDM unveraendert.
HOMELAB_ARCHITECTURE_MASTER_V2.mdSektion 13 enthaelt die ausfuehrliche Recovery-Geschichte.docs/SERVICE_CATALOG.mdund Sektion 7.4 auf "LAN/Tailscale-only, Remote Access aus" praezisiert.
2026-05-28 - FRITZ!Box-Portfreigaben bereinigt
- WAN-Soll auf eine einzige Freigabe reduziert:
443/tcp -> 192.168.178.58:443(Traefik HTTPS). 80/tcpaus FRITZ!Box-UI entfernt. Validierung: Mobilfunk-Test ergibt Timeout aufhttp://vault.kaleschke.info,https://vault.kaleschke.infoweiter erreichbar; lokal greift Traefik-Redirect 80->443 nach wie vor. Cloudflare-DNS-Challenge braucht kein Port 80.222/tcpbleibt bewusst nicht eingerichtet. Begruendung: Tailscale ist Operator-Pfad, GitHub-Push-Mirrormichaelkaleschke-spec/homelab-infradeckt Repo-Bootstrap-Pfad ab, Gitea-Bundles unter/mnt/user/backups/git-bundles/giteadecken Offline-Restore ab.HOMELAB_ARCHITECTURE_MASTER_V2.mdSektion 10 entsprechend mit "Tailscale-only, bewusst nicht WAN-freigegeben" praezisiert.- UPnP-Selbstfreigabe-Recht fuer
PC-192-168-178-71(HostnameVONETS.COM, MAC00:17:13:2F:61:96) deaktiviert. Identifiziert als VONETS-WiFi-Bridge, vermutlich Bridge-Anbindung zum SolarEdge-Wechselrichter. SolarEdge-Cloud-Sync ist outbound und benoetigt keine UPnP. Aktuell waren 0 Selbstfreigaben aktiv; die Aenderung ist praeventiv gegen kuenftige Anforderungen. docs/NETWORK_INVENTORY.md,docs/FRITZBOX_PORT_CORRECTION_PLAN.mdunddocs/AUDIT_2026-05-25_TODO.mdSprint 4 entsprechend nachgezogen.- Bewusst NICHT angefasst: FRITZ!OS 8.21 Update (Service-Fenster), IPv6-Exposure (separater Folgeschritt), WAN-Ausfallschutz (bewusst aus).
2026-05-27 - Monitoring-Alerts live, Gitea-Bundle-Cron live, H:/-Pull live
Drei Audit-TODOs gleichzeitig auf "erledigt" gezogen; alle Aenderungen mit Host-Smoke verifiziert.
Monitoring-Alerts (Borg-Stale / Cert-Expiry / Container-Down)
- Auf dem Host neuer User-Script
export-prometheus-textfile-5minmit Cron*/5 * * * *angelegt. Schreibt/mnt/user/services/posture-check/textfile/homelab.prom. - Repo:
services/posture-check/export-prometheus-textfile.shsetzt jetzt vor demmvperchmod 644, damit node-exporter (nobody:65534) lesen kann. Vorher0600 root:root→node_textfile_scrape_error 1. monitoring-prometheuswurde einzeln perdocker restartneu gestartet, um denstale file handleauf der gebundenenalerts.ymlzu loesen. Kein Stack-Down.promtool check rulesSUCCESS 14 rules,lastConfigTime 2026-05-27T18:33:06Z. Aktive Alerts: 1 firing (HomelabTraefik5xxaus dem 2026-05-20-Befund), 1 pending (HomelabBorgLastJobCompletedWithWarningsdurchcompleted_with_warnings-Status des letzten Borg-Laufs).- Pipeline end-to-end: Textfile-Skript ⇒ node-exporter Textfile-Collector ⇒ Prometheus ⇒ alerts.yml-Regeln.
Gitea-Bundle-Schedule
- User-Script
gitea-bundle-mirror-6hmit Cron10 */6 * * *(00:10/06:10/12:10/18:10). - Repo:
ops/borg-ui/scripts/gitea-bundle-mirror.shschreibt Bundles und Sidecars jetztchmod 644statt600. Begruendung: Bundle-Inhalt ist Git-Historie ohne Secrets (durch.gitignoreabgedeckt), nicht sensibler als die uebrigen 0644-Dumps. Damit funktioniert der Nearline-Pull ueber SMB. - Existierende Bundles wurden manuell auf 0644 angehoben. Erster Cron-Lauf 2026-05-27 18:41 UTC erfolgreich: 4 Bundles, Checksums OK.
H:/ Nearline-Pull
- Erster scharfer Lauf 2026-05-27 20:25 zeigte vier Permission-Befunde:
unraid-flash-config.*(4 Files, by-design 0600),filebrowser.bolt.dump(0640, Source erbt), und alle 10 Gitea-Bundle-Files (0600). - Repo:
ops/h-drive-nearline/pull-critical-backups.ps1excluded jetzt dieunraid-flash-config.*-Familie ueber/XF(Restore-Quelle bleibt Hetzner-Borg).ops/borg-ui/scripts/pre-backup-dumps.shsetzt alle Dumps viaatomic_writeper Default auf 0644, Flash-Config-Familie explizit mitatomic_write target tmp 600. - Existierende Files am Host nachtraeglich auf 0644 angehoben.
- Zweiter Lauf 2026-05-27 20:45: beide Robocopy-Jobs Exit 1, 19 Borg-Dumps + 10 Gitea-Bundle-Files unter
H:\kallilab-nearline-backups. Report-Tabellen-Quirk in PowerShell durch& robocopy @args | Out-Nullbehoben (Live-Output landete vorher in$results). docs/H_DRIVE_NEARLINE_PULL.mdmit Erstlauf-Befund, gefixter Erwartungs-Liste und expliziter Out-of-Scope-Anmerkung fuer Flash-Config aktualisiert.- Windows Scheduled Task taeglich 05:30 bleibt bewusst offen bis zur Operator-Bestaetigung.
Was bewusst NICHT angefasst wurde
- Authelia/OIDC/CrowdSec/Nextcloud-Haertung (geparkt).
- Hermes (Review 2026-07-25).
- USV (Risiko bewusst akzeptiert).
- FRITZ!Box-/Plex-/UI-Punkte (Punkt 5 fuer morgen frueh).
unraid-flash-config.tar.gzbleibt bewusst 0600 und ausserhalb des Nearline-Scopes.
2026-05-27 - Vorbereitungsdokumente FRITZ!Box-Korrektur und Off-site-Optionen
- Reine Doku-Aenderung; kein Router-, Provider- oder Host-Eingriff.
docs/FRITZBOX_PORT_CORRECTION_PLAN.mdneu angelegt: Korrektur-Plan fuer drei Punkte (80/tcpentfernen,222/tcpnicht ergaenzen solange Tailscale stabil, UPnP-SelbstfreigabePC-192-168-178-71deaktivieren). Operator-Go ausstehend; jede UI-Aenderung wird gesondert dokumentiert.docs/OFFSITE_BACKUP_OPTIONS.mdneu angelegt: Entscheidungsvorlage fuer zweites Off-site-Ziel mit drei Optionen (rsync.net Borg-Plan, BorgBase EU2, rotierende Cold-Platte). Bewertung gegen Provider-Trennung, Standort, Preis und Konto-Risiko; Empfehlung rsync.net oder Cold-Platte; BorgBase EU2 explizit nicht empfohlen wegen gleichem Anbieter. Kein Provider gebucht, keine Kosten ausgeloest.docs/REPO_MAP.mdum beide neuen Dokumente ergaenzt.docs/AUDIT_2026-05-25_TODO.mdSprint 4 (FRITZ!Box) und Sprint 7 (Off-site) mit Verweis auf die neuen Vorbereitungsdokumente nachgezogen.
2026-05-27 - Doku-Sprint Bootstrap / Family-View / Onboarding / Drill-Routine
- Reine Doku-Aenderung; kein Compose-, Secret-, Host- oder Router-Eingriff.
docs/SERVICES_RECOVERY.md"Komodo Bootstrap" auf linearen Stufenpfad A-F ausgebaut: Recovery-Anker bleibtops/komodo/docker-compose.yml, Self-Stack ist explizit kein Anker, Secret-Restore-Reihenfolge verweist aufdocs/SECRETS_MAP.mdStack-ENV-only-Sektion, Validierungs-Kommandos ergaenzt. Trockenlauf-Idee als Folgeaufgabe eingetragen, kein Repo-Skript dafuer.docs/DISASTER_RECOVERY.mdPhase 4 Stufe 3 verweist explizit auf den Bootstrap-Pfad indocs/SERVICES_RECOVERY.mdund auf die Stack-ENV-only-Sektion indocs/SECRETS_MAP.md.docs/FAMILY_VIEW_DASHBOARD.mdneu angelegt: Spezifikation fuerhomelab-family-view-Dashboard, 8 Panels (Endpoints up, Borg-Frische, Cert-Tage, Kritische Container, Disk-Fuellung, Endpoint-Tabelle, Cert-Tabelle, Container-Tabelle), PromQL-Queries, Thresholds, Build-Reihenfolge. Bewusst noch keinmonitoring/grafana/dashboards/family-view.jsonangelegt, weil Borg-Stale-/Cert-Expiry-/Container-Down-Metriken laut Sprint 3 noch "in Arbeit" sind.docs/FAMILY_ONBOARDING.mdfinal redigiert: Status auf "Final-Stand vor Wochenend-Einladung", 2FA-Beschreibung auf App-eigene 2FA praezisiert (kein SSO-Versprechen, weil Authelia-OIDC weiter geparkt ist), neuer "Bewusst nicht versprochen"-Block (kein Einheits-Login, kein 24/7-SLA, kein Hotline-Support, keine Datenweitergabe).docs/RESTORE_DRILL_ROUTINE.mdneu angelegt: Drei-Stufen-Modell (Freshness woechentlich / Mini-Restore monatlich-bimonatlich / DR-Sanity quartalsweise), Quartals-Kadenz Q1-Q4 mit Dienst-Rotation, bestaetigte Mini-Restores (Vaultwarden, Gitea, Paperless 2026-05-07; Immich 2026-05-27), 10-Punkte-Sanity-Check, Abbruch-Regel mit Verweis aufdocs/GITOPS_DRIFT_RUNBOOK.md. Kein Host-Schedule angelegt, nur Doku.ops/restore-tests/schedule.mdverweist jetzt aufdocs/RESTORE_DRILL_ROUTINE.mdals Quelle der Quartals-Belegung.docs/REPO_MAP.mdumdocs/FAMILY_VIEW_DASHBOARD.md,docs/RESTORE_DRILL_ROUTINE.mdunddocs/IMMICH_RESTORE_TEST.mdergaenzt.docs/AUDIT_2026-05-25_TODO.mdaktualisiert: Sprint 2 "Komodo-Bootstrap-Pfad beschreiben", Sprint 3 "Family-View Dashboard definieren", Sprint 4 "Familien-Onboarding schreiben" und Sprint 7 "Restore-Lab-Drill quartalsweise dokumentieren" jeweils auf "erledigt".- Geparkte Punkte bleiben unveraendert: Authelia-2FA/OIDC/CrowdSec, Nextcloud-Haertung, Hermes (Review 2026-07-25), USV-Anschaffung.
2026-05-27 - Immich Restore-Smoke-Test praktisch verifiziert (F-11)
- Erster echter Immich-Restore-Smoke-Test gegen das produktive Borg-Archiv erfolgreich:
Tägliche-Sicherung-2026-05-27T04:30:06.778, Report/mnt/user/backups/restore-reports/immich-2026-05-27.md. - Validiert wurden Borg-Extract von
local/borg-dumps/latest/immich.dump, Import in isoliertentensorchord/pgvecto-rs:pg14-v0.2.0Test-Postgres, Start des Immich-Servers ohne ML und ohne Traefik, HTTP200auf127.0.0.1:12283, Login-Marker,11977Assets und1User im Test-DB-Check. - Produktive Container und produktive Foto-Pfade wurden nicht angefasst; Testdaten und Testcontainer wurden nach Erfolg bereinigt.
- Im Lauf wurden Restore-Test-Haertungen umgesetzt: Borg-
known_hostsaus/data/known_hostswird fuer SSH-Trust genutzt,completed_with_warnings-Archive gelten als verwendbare Restore-Quelle, Postgres-Startfenster werden retry-faehig behandelt, Immich-v2-Upload-Marker werden im leeren Test-Mount erzeugt und Smoke-Checks schlagen bei HTTP-/Marker-Fehlern hart fehl. docs/IMMICH_RESTORE_TEST.md,docs/RESTORE_MATRIX.md,ops/restore-tests/schedule.mdunddocs/AUDIT_2026-05-25_TODO.mdnachgezogen; F-11 ist damit abgeschlossen. Voll-Restore inklusive Foto-Dateien bleibt ein separater DR-Drill.
2026-05-27 - FRITZ!Box-Portfreigaben gegen Repo-Soll abgeglichen
- FRITZ!Box-UI
Internet -> Freigaben -> Kallilabcoregeprueft: aktiv sindHTTP-ServerTCP80/tcpundHTTPS-ServerTCP443/tcpauf192.168.178.58. - Repo-Soll aus
docs/NETWORK_INVENTORY.mdist nur443/tcpplus optional gewolltes Gitea-SSH222/tcp. Der aktuelle Zustand weicht ab:80/tcpist offen,222/tcpfehlt. - Kallilabcore ist nicht als Exposed Host markiert und erlaubt keine selbststaendige Portfreigabe.
PC-192-168-178-71erlaubt selbststaendige Portfreigabe, hat aber0 aktiv. - Keine FRITZ!Box-Aenderung vorgenommen. Router-Korrektur bleibt ein produktiver Operator-Schritt nach ausdruecklicher Freigabe.
2026-05-26 - Immich Restore-Smoke-Test vorbereitet (F-11)
docs/IMMICH_RESTORE_TEST.mdundops/restore-tests/immich-plan.md/immich-runbook.mdbeschreiben den geplanten Immich-Mini-Restore:immich.dumpaus Borg, isolierter pgvecto-rs-Test-Postgres, Test-Redis, Immich-Server ohne ML, lokaler Port127.0.0.1:12283, keine produktiven Foto-Mounts.ops/restore-tests/immich-restore-test.sh,immich-restore-test.ps1undimmich-compose.test.ymlwurden vorbereitet; der Dispatcher kenntimmich --what-if.- Lokal verifiziert: Bash-Syntax,
run-restore-checks.sh immich --what-if, PowerShell-Dispatcher-Mode immich -WhatIf, Docker-Compose-Render und Policy-Check. Kein echter Host-Restore, kein Borg-Extract, kein Produktiv-Container-Eingriff. - Host-Preflight 2026-05-27: Host-Clone per Fast-forward auf
c5d231a,immich.dump66M,/mnt/user/backupsca. 3.7T frei,run-restore-checks.sh immich --what-iferfolgreich. Kein echter Restore-Lauf. - F-11 bleibt fachlich offen bis zum ersten Host-Lauf mit Report unter
/mnt/user/backups/restore-reports/immich-YYYY-MM-DD.md.
2026-05-27 - H:/ Nearline-Pull vorbereitet
docs/H_DRIVE_NEARLINE_PULL.mdundops/h-drive-nearline/pull-critical-backups.ps1definieren den Windows-seitigen Pull von\\192.168.178.58\backups\borg\dumps\latestund\\192.168.178.58\backups\git-bundles\giteanachH:\kallilab-nearline-backups.- SMB-Quelle
\\192.168.178.58\backupsund H:/ sind erreichbar;-WhatIfprueft den Plan ohne Kopie. - Kein Scheduled Task angelegt und kein echter Kopierlauf gestartet. Empfohlen ist taeglich 05:30 nach dem Borg-Dump-Fenster, Aktivierung erst nach Operator-Sichtpruefung.
2026-05-27 - Storage Layout als Active v1.4 gefuehrt
docs/STORAGE_LAYOUT.draft.mdwurde zudocs/STORAGE_LAYOUT.mdumbenannt. Das Dokument war inhaltlich bereits als Active markiert; Version 1.4 entfernt den formalen Draft-Blocker.- Physikalische Disk-Werte aus
docs/HARDWARE_INVENTORY.mdund Host-Readout uebernommen: Cache Samsung 970 EVO Plus 1.8T XFS, Disk1 WDC WD60EFAX 5.5T XFS aufmd1p1, Parity TOSHIBA HDWG480 7.3T, Boot Samsung Flash Drive 59.8G FAT32, H:/ als Nearline-Ziel. docs/AUDIT_2026-05-25_TODO.mdSprint 2 fuer Storage-Layout und Disk-/Share-Baseline auf erledigt gesetzt. Retention-Kalibrierung, Monitoring-Schwellen und RESTORE_MATRIX-Detailklassifikation bleiben normale Folgeaufgaben.
2026-05-27 - F-08 Alert-Regeln vorbereitet
services/posture-check/export-prometheus-textfile.sherzeugt Textfile-Metriken fuer Borg-Backup-Frische und kritische Container unter/mnt/user/services/posture-check/textfile/homelab.prom.monitoring/docker-compose.ymlaktiviert den Node-Exporter-Textfile-Collector.monitoring/prometheus/alerts.ymlenthaelt vorbereitete Alerts fuer Borg-Stale, Borg-Fehlerstatus, Borg-Warnstatus, Textfile-Stale, Critical-Container-Down und TLS-Cert-Expiry 21/7 Tage.- Host-Smoke 2026-05-27: Skript erzeugt
homelab.prom, alle gelisteten kritischen Container melden1, Borg-Status istcompleted_with_warningsund wird als Warning statt Critical modelliert. - Kein Monitoring-Redeploy und kein Scheduled Task in diesem Schritt. Abschluss erfolgt nach Host-Schedule, Prometheus-Reload und Testalert.
2026-05-26 - Audit F-16 und F-20 abgeschlossen (Doku-only)
- F-16:
infra/redis-Etikett auf die Realitaet abgeglichen.docs/SERVICE_CATALOG.md,docs/REPO_MAP.md,HOMELAB_ARCHITECTURE_MASTER_V2.mdSektion 13 unddocs/DISASTER_RECOVERY.mdBootstrap-Stufe 2 beschreiben Redis jetzt als "primaer Paperless-Redis (App-Cache); historisch als shared angelegt, faktisch nur von Paperless genutzt". Immich, Nextcloud, Mealie eigene Redis-Instanzen; Authelia bewusst ohne Redis. Keine Compose-Aenderung. - F-20: Restore-Wege fuer Stack-ENV-only Secrets explizit gemacht. Neuer Abschnitt
6.2.1 Restore-Quellen fuer Stack-ENV-Werteindocs/DISASTER_RECOVERY.md(Reihenfolge Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz, Komodo-Sonderfall, Paperless als Hauptanwendung). Neuer AbschnittStack-ENV-only Secrets - Restore-Wegeindocs/SECRETS_MAP.mdmit Tabelle je Stack (Paperless, Immich, Mail-Archiver, Speedtest, Komodo, Hermes, Glance). Glance-Widget-Tokens explizit als rebuildbar markiert. Konkrete Werte werden nirgendwo dokumentiert. docs/AUDIT_2026-05-25_TODO.mdSprint 6 entsprechend auf "erledigt" gestellt.- Kein Eingriff in
ops/borg-ui/scripts/gitea-bundle-mirror.sh, kein Gitea-Bundle-Trockenlauf, keine SSH-/Host-Pruefung.
2026-05-26 - FRITZ!Box-/H:/-/Family-Onboarding-Doku-Update
docs/NETWORK_INVENTORY.mdmit FRITZ!Box-Baseline gefuellt: FRITZ!Box 7590, FRITZ!OS 8.21 (Update gemeldet, nicht eingespielt), Telekom DSL ~87/36 Mbit/s, 36 aktive Heimnetz-Geraete, LAN 1-4 verbunden, WLANFritzi, Gast-WLAN inaktiv, Telefonie/DECT aktiv, Ausfallschutz nicht eingerichtet, USB nicht verbunden, 2 Portfreigaben aktiv. Soll fuer Portfreigaben: nur443/tcpund222/tcpauf192.168.178.58.docs/EXTERNAL_DEPENDENCIES.mdum Telekom-DSL und FRITZ!Box 7590 als WAN-/Router-Abhaengigkeit erweitert; Ausfall-Szenario "Telekom-DSL / FRITZ!Box gestoert" ergaenzt.docs/CAPACITY_AND_LIFECYCLE.mdum Abschnitt "H:/ als zusaetzliches lokales Backup-Ziel" ergaenzt. Bewertung: H:/ ist als zweite lokale Nearline-Kopie und Freeze-Sicherung sinnvoll, aber bewusst kein Offsite-Ersatz und kein CIFS-Hard-Mount am Unraid (STORAGE_LAYOUT §12.6). Pull-Modell vom Windows-PC bleibt der getestete Weg (vgl. Disk1 Phase 2 Freeze 2026-05-25).docs/FAMILY_ONBOARDING.mdvon Tabellen-Entwurf auf familienverstaendlichen Begruessungstext umgestellt: kurze App-Erklaerungen, konkrete Was-tun-Wenn-Anleitungen (Webseite weg, Passwort vergessen, 2FA verloren, Foto-Backup haengt, Browser-Warnung), "Was du nicht musst"-Block, Hinweis fuer geplante Wochenend-Einladung.docs/AUDIT_2026-05-25_TODO.mdLeitplanken aktualisiert: Authelia 2FA/OIDC/CrowdSec und Nextcloud-2FA-Haertung werden in diesem Zyklus nicht angefasst (Operator-Vorgabe). Hermes-Agent geparkt mit Review-Deadline 2026-07-25. USV-Risiko bewusst akzeptiert. Sprint 4 um H:/-Bewertung und FRITZ!Box-Portfreigaben-Abgleich erweitert. Neue Sprints 6 (geparkte Apps) und 7 (Off-site) ergaenzt.- Keine Live-/Compose-Aenderung in diesem Commit; nur Doku.
2026-05-26 - USV-Risiko bewusst akzeptiert
- Operator-Entscheidung: aktuell wird keine USV angeschafft.
- Der Befund bleibt technisch unveraendert: keine funktionierende USV-Abschaltung nachgewiesen. Power-Loss-Risiko fuer Docker-/DB-State und laufende Writes wird bewusst akzeptiert und bei spaeteren Reviews neu bewertet.
2026-05-26 - Borg-Passphrase offline gesichert
- Operator bestaetigt: Die Borg-Passphrase ist offline/off-system gesichert und kann ohne Host oder Vaultwarden wiederhergestellt werden.
- Doku aktualisiert nur den Sicherungsstatus; Secret-Wert und Ablageort bleiben bewusst ausserhalb des Repos.
2026-05-26 - Gitea-Bundle-Mechanik definiert
ops/borg-ui/scripts/gitea-bundle-mirror.shergaenzt: erstellt verifiziertegit bundle-Artefakte fuer alle bare Gitea-Repositories, schreibt Checksums und einen Markdown-Report.- Zielpfad ist
/mnt/user/backups/git-bundles/gitea; dieser Pfad muss in den Borg/off-site Scope aufgenommen und hostseitig geplant werden. docs/SERVICES_RECOVERY.mdunddocs/RESTORE_MATRIX.mddokumentieren Bundles jetzt als zweite Repo-Bootstrap-Schicht neben dem GitHub-Mirror.- Host-Erstlauf nach Skript-Fix erfolgreich: 4 Bundles erzeugt (
homelab-infra,homelab,homepage,smart-home-kalli), Checksums OK,homelab-infra.bundlein Restore-Lab geklont undgit fscksauber. Offen bleibt die dauerhafte Schedule-Einbindung.
2026-05-26 - Audit-Baseline-Tag gesetzt
- Der Stand nach Hardware-/Capacity-Baseline, Policy-Triage und Recovery-Doku wurde als
audit-2026-05-25-baselinemarkiert und nach Gitea gepusht.
2026-05-26 - Externe Abhaengigkeiten und Services-Recovery baseline dokumentiert
docs/EXTERNAL_DEPENDENCIES.mdvon Template auf Betreiber-Baseline angehoben: Domain, Cloudflare, Hetzner, GitHub-Mirror, Tailscale, GMX, Let's Encrypt, Registries, Plex und mobile Push-Pfade sind mit Ausfallwirkung und Notfallplan dokumentiert.docs/SERVICES_RECOVERY.mdfinalisiert den Komodo-Bootstrap-Anker:ops/komodo/docker-compose.ymlbleibt verbindlich; derkomodo-Self-Stack hat keinen aktiven Gitea-Webhook und ist nicht der Recovery-Anker.- Offene Off-Repo-Betreiberchecks bleiben Account-Besitz, 2FA-Recovery-Codes, Zahlungswege, Borg-Passphrase-Hinterlegung und Gitea-Bundle-/Mirror-Mechanik.
2026-05-26 - Policy-Warnings triagiert
- Plex
network_mode: hostwurde in den Policy-Ausnahmen als dokumentierte Discovery-Ausnahme erfasst. - Mutable Tags bei
ddns-updater,glancesundscrutinybleiben wegen vorhandener SHA256-Digests reproduzierbar gepinnt und werden im Policy-Report als Info-Ausnahmen sichtbar gehalten. monitoring-influxdb3-corebleibt als dokumentierteuser: "0"-Ausnahme bewusst eine Warning, damit der Hardening-Punkt nicht aus dem Blick faellt.
2026-05-26 - Hardware-/Capacity-Baseline abgeschlossen
- Hardware-Inventar auf Host-Befund aktualisiert: BIOS AMI F21 vom 2025-06-19, Intel Raptor Lake SATA AHCI, Samsung NVMe Controller und Realtek RTL8125 2.5GbE mit aktuellem 1G-Link.
- RAM-Baseline dokumentiert: 4x 8 GB DDR4 ohne ECC, gemischte Module, aktuell 2133 MT/s konfiguriert.
- Capacity-Baseline dokumentiert: Cache 1.9T mit 97G genutzt (6 %), Disk1/User-Shares 5.5T mit 1.8T genutzt (33 %), lokale Backups 2.2G unter
/mnt/user/backups. - USV-Befund dokumentiert:
apcupsdist vorhanden und auf USB vorkonfiguriert, laeuft aber nicht;apcaccess statusliefert Connection refused undlsusbzeigt keine erkannte USV. Power-Loss bleibt damit eine offene Betreiberentscheidung.
2026-05-26 - Komodo/Gitea-Restdrift bereinigt
- Der alte Komodo-Stack
grafanawurde als historischer Altstand inert gemacht: keine Repo-Dateipfade, kein Webhook, keine alte Stack-ENV, keinemissing_files/remote_errors. Rollback bleibt Git-Historie, nicht der alte Komodo-Stack. - Der Gitea-Hook
35fuer den altengrafana-Stack bleibt inaktiv. Der nicht sinnvollekomodo-Self-Hook11wurde deaktiviert, weil Komodo selbst nicht per Gitea-Webhook aufmasterdeployed wird. - Ein kurz sichtbarer Komodo-DB-Typfehler durch
updated_atals Float wurde im selben Kontrollfenster auf nativen MongoLongkorrigiert; danach traten keine neueninvalid type-Fehler mehr auf. - Nach der Bereinigung: aktive Gitea-Komodo-Hooks haben
0Fehlstatus;komodo-core,komodo-periphery,komodo-mongo,nextcloudund die aktuellenmonitoring-*Container laufen weiter.
2026-05-26 - Monitoring-Altstaende aus aktivem Repo entfernt
- Die abgeloesten Pfade
ops/grafana-influxdbundops/lokiwurden pergit rmaus dem aktiven Repo entfernt.monitoring/bleibt der einzige Observability-Zielstack. - Live-Check vor dem Cleanup: nur
monitoring-grafana,monitoring-promtail,monitoring-influxdb3-coreundmonitoring-lokilaufen; alte Containergrafana,influxdb3-core,lokiundalloysind nicht vorhanden. - Rollback erfolgt bei Bedarf ueber Git-Historie, nicht ueber parallel gepflegte Compose-Verzeichnisse.
- Im selben GitOps-Kontrollfenster wurde Gitea-Webhook
35fuer den altengrafana-Rollback-Stack als inaktiv bestaetigt. Der aktive Nextcloud-Hook36hatte einen Signaturfehler; sein Secret wurde ohne Ausgabe des Werts aus der Komodo-Stack-Konfiguration zurueck nach Gitea synchronisiert.
2026-05-26 - AdGuard Admin-Port auf Tailscale-Soll begrenzt
- Host-Audit per SSH gegen
Kallilabcoredurchgefuehrt: Tailscale IPv4 ist100.80.98.33, LAN-IP ist192.168.178.58/24, Gateway192.168.178.1. - Repo-Soll fuer
host-services/Adguard/docker-compose.ymlgeaendert: DNS53/tcp+udpbleibt unveraendert, die Admin-UI bindet nun auf100.80.98.33:8082:80. - Architektur, Service-Katalog, Repo-Map, Netzwerk-Inventar und AI-Kontext wurden an das neue Modell angepasst: keine Traefik-/Authelia-2FA-Umstellung, aber keine LAN-weite Admin-Bindung mehr.
- Live-Deploy wurde nach Fast-Forward des AdGuard-Workspaces auf
5cb4017mitdocker compose -p adguard ... up -dausgefuehrt. Validierung erfolgreich:ss -ltnpzeigt100.80.98.33:8082, DNS via@127.0.0.1und@192.168.178.58funktioniert,http://100.80.98.33:8082/liefert HTTP 302,http://192.168.178.58:8082/ist nicht mehr erreichbar. - Nachpruefung des GitOps-Pfads: Gitea-Hook
1zeigt auf Komodo-Stack69c7b9e26b77cd827811b9d0und lieferte HTTP 200. Komodo-Deploys fuer AdGuard scheiterten zunaechst imGit pulleinmal an.git/index.lockund danach anfatal: Cannot rebase onto multiple branches; der Workspace wurde aufgeraeumt und steht sauber auforigin/master.
2026-05-26 - Audit-Umsetzung vorbereitet
- Aus
docs/AUDIT_2026-05-25.mdwurdedocs/AUDIT_2026-05-25_TODO.mdals operative Arbeitsliste abgeleitet. Authelia-2FA/OIDC bleibt bewusst geparkt und wird erst nach finaler Policy-Entscheidung umgesetzt. - Neue Inventar- und Betriebsdokumente angelegt:
docs/HARDWARE_INVENTORY.md,docs/NETWORK_INVENTORY.md,docs/EXTERNAL_DEPENDENCIES.md,docs/CAPACITY_AND_LIFECYCLE.mdunddocs/FAMILY_ONBOARDING.md. docs/SERVICES_RECOVERY.mdbeschreibt initial die recovery-kritischen/mnt/user/services-Pfade, Gitea-Repo-Mirror-Optionen, Komodo-Bootstrap und Secret-Recovery-Reihenfolge.- Policy-Check lokal erneut ausgefuehrt: die alten SEC001-Warnings fuer
ddns-updaterundscrutinysind nicht mehr aktuell; verbleibende Warnings betreffen Host-Netz-/User-/Image-Tag-Themen und Altstaende.
2026-05-25 - Unraid Flash-Backup in Borg-Scope aufgenommen
pre-backup-dumps.sherzeugt zusaetzlich zu den DB-Dumps ein sensiblesunraid-flash-config.tar.gzaus/boot/configinklusive SHA256 und Manifest unter/mnt/user/backups/borg/dumps/latest.- Da
/local/borg-dumpsbereits Teil des Borg-Scopes ist, wird das Flash-Konfigurationsartefakt mit dem bestehenden Hetzner/Borg-Backup historisiert. Downloadbare Plugin-Paketarchive unter/boot/config/plugins/*/werden aus dem Artefakt ausgeschlossen; Restore-relevante Konfiguration bleibt enthalten. - Live-Erstlauf erfolgreich:
pre-borg.shliefertecritical_count=0, FreshnessCritical: 0,unraid-flash-config.tar.gzist 297 KiB gross,0600 root:root, SHA256-PruefungOK, 356 Archiv-Eintraege, Manifest fuer Unraid7.2.4. Der Borg-UI-JobTaegliche Sicherungist aktiv und umfasst/local/borg-dumps; der naechste planmaessige Hetzner-Lauf nimmt das neue Flash-Artefakt mit. Der Host-Repo-Clone unter/mnt/user/services/homelab-infrawurde wegen eines fehlgeschlagenen Fast-Forward-Checkouts frisch geklont; der vorherige Stand liegt archiviert unter/mnt/user/services/_archive/homelab-infra-pre-refresh-20260525-194209.
2026-05-25 - Monitoring-Zielstack finalisiert und Uptime Kuma entfernt
monitoringundglancewurden auf Commitb6bbca4deployed; Komodo zeigt fuer beidelatest_hash=deployed_hash=b6bbca4ohneremote_errors. Die zehnmonitoring-*Container laufen,monitoring.kaleschke.infoundglance.kaleschke.infoleiten anonym zu Authelia, Prometheus ist ready und Loki/readyliefertready.- Alte Monitoring-Altcontainer
grafana,influxdb3-core,lokiundalloysind in Docker nicht vorhanden;ops/grafana-influxdbundops/lokibleiben nur als Rollback-/Migrationsreferenz im Repo. Der noch aktive Gitea-Hook35des altengrafana-Rollback-Stacks wurde deaktiviert, damit zukuenftige Pushes den Altstand nicht reaktivieren. - Uptime Kuma wurde durch Blackbox/Prometheus/Grafana ersetzt: aktive Blackbox-Zielliste enthaelt 19 HTTPS-Ziele,
uptime.kaleschke.infoist dort nicht mehr enthalten und liefert nach Stack-Removal 404. Der Komodo-Stackuptime-kumawurde gestoppt/destroyed/geloescht, Gitea-Webhook23deaktiviert, Appdata nach/mnt/user/appdata/_archive/uptime-kuma-removed-2026-05-25und der alte Stack-Workspace nach/mnt/user/services/stacks/_archive/uptime-kuma-removed-2026-05-25verschoben. - Authelia-Hostconfig wurde mit Backup
configuration.yml.pre-uptime-removal-20260525-164343.bakum den totenuptime.kaleschke.info-Eintrag bereinigt, validiert und neu gestartet. Prometheus wurde wegen einesStale NFS file handleauf der gebundenen Konfigurationsdatei per Komodo-Restart neu gemountet.
2026-05-25 - AdGuard Admin-Port bewusst LAN-direkt belassen
- Strategische Option
adguard.kaleschke.infohinter Traefik/Authelia-2FA wurde bewertet, aber vom Operator bewusst verworfen, weil der Betriebsweg einfach bleiben soll. AdGuard bleibt als dokumentierte Ausnahme mit DNS53/tcp+udpund Admin8082:80LAN-direkt; keine Live-Aenderung an AdGuard, Authelia oder Traefik wurde vorgenommen.
2026-05-25 - Borg-Passphrase Host-Secret verifiziert
- Erwartete Host-Secret-Datei
/mnt/user/appdata/secrets/borg_repo_passphrase.txtaus der bestehenden Borg-UI-Repo-Konfiguration erzeugt, mitroot:rootund Modus600gesichert und perborg infogegen das Hetzner-Borg-Repo verifiziert. Analoge Offline-Hinterlegung bleibt bewusste Operator-Aufgabe; Secret-Wert wurde nicht ausgegeben oder dokumentiert.
2026-05-25 - Dashboard auf Glance konsolidiert
- Glance bleibt das einzige Homelab-Dashboard; Homepage wurde aus dem Zielbild entfernt. Authelia-Default-Redirect, Monitoring-Blackbox-Ziele, Cert-Check-Domains und Glance-Konfiguration zeigen nicht mehr auf
home.kaleschke.info; Homepage wurde via Komodo-API gestoppt/destroyed, der Komodo-Stack geloescht, der alte Gitea-Webhook deaktiviert und Appdata nach/mnt/user/appdata/_archive/homepage-removed-2026-05-25verschoben.
2026-05-25 - Jellyfin aus Zielbild entfernt
- Plex-Smoke-Test erfolgreich (
/identityHTTP 200, Container healthy,/data/moviesund/photossichtbar). Jellyfin wurde repo-seitig entfernt, aus Authelia-Baseline und Zielbild-Doku ausgetragen, via Komodo-API gestoppt/destroyed, der Komodo-Stack geloescht und Appdata nach/mnt/user/appdata/_archive/jellyfin-removed-2026-05-25verschoben; Plex bleibt einziger Medienserver.
2026-05-25 - Externer Repo-Mirror eingerichtet
- Gitea erlaubt fuer Repo-Migrationen und Mirror-Targets gezielt
github.comund nutzt explizite externe DNS-Resolver.Micha/homelab-infraspiegelt nun als privater GitHub-Push-Mirror nachmichaelkaleschke-spec/homelab-infra; erster manueller Sync erfolgreich, Giteapush_mirror.last_errorleer. Token-Werte bleiben ausschliesslich in Gitea/GitHub und werden nicht dokumentiert.
2026-05-25 - Audit-Final nachgemessen
- Audit-Restliste erneut live geprueft: runtime-relevanter Stack-Inhalt fuer
gitea,borg-uiundmonitoringseit66ee10cunveraendert; abschliessende Audit-Doku-Commits liegen in Gitea; Monitoring inklusive Loki/readygruen; Borg-Job und 15 kanonische Dump-Artefakte frisch;docs/AUDIT_2026-05-23_FINAL.mdauf den Live-Stand aktualisiert.
2026-05-25 - Disk1 Phase 2 abgeschlossen
- Disk1 wurde nach H:-Freeze-Backup und finalem Service-Freeze von NTFS/
ntfs3auf XFS migriert. - Restore verifiziert:
mediafinal 2722 Dateien und 1,800,782,188,226 Bytes mit 0 missing/extra/size mismatch; Tar-Shares und Disk1-Extras aus den H:-Freeze-Archiven wiederhergestellt. - Docker/Services nach XDG-Runtime-Fix wieder stabil: 49 Container laufend, 0 stopped, 0 unhealthy, 0 starting; Gitea, Komodo, Borg, Jellyfin und Monitoring per Smoke-Test erreichbar.
- Borg-UI meldet den letzten Backup-Job
completed;pre-backup-dumps.shwurde nach Wiederanlauf erneut ausgefuehrt und 15 kanonische Dump-Artefakte sind juenger als 24 h. posture-checkerwartet Disk1 nun standardmaessig als XFS (ALLOW_DISK1_NTFS=0).
2026-05-23 - Audit-Endstufe verifiziert
- Lokalen Hardening-Commit
cd650b1nach Gitea gepusht; Komodo-Workspaces fuergitea,borg-uiundmonitoringstehen aufcd650b1. - Live-Audit in
docs/AUDIT_2026-05-23_LIVE.mddokumentiert: Gitea-Registration geschlossen, Borg-Dumps frisch, Monitoring-Stack aktiv, alte Grafana/Loki-Altcontainer nicht mehr vorhanden. - Jellyfin und Plex in Architektur, Service-Katalog und Repo-Map nachgetragen; Plex ist jetzt als Repo-Compose-Stack mit dokumentierter Host-Netz-Ausnahme gefuehrt.
- Repo-Hygiene abgeschlossen:
.serena/ignoriert, leere Verzeichnisse entfernt, Windows-Reinstall-Helfer unterops/windows-reinstall/bewusst versioniert.
2026-05-20 - Gitea 5xx-Bursts untersucht und Signup geschlossen
- Live-Befund zu
HomelabTraefik5xx: kurze externePOST /-Bursts aufgitea@dockervon103.153.183.69und103.153.183.73, jeweils HTTP 500 in unter 10 ms; normale Gitea-Checks und Git-Reads liefen parallel mit HTTP 200. - Keine Hinweise auf erfolgreichen Zugriff: Gitea-Container ohne Restart/OOM, nur User
micha, keine neuen User der letzten 30 Tage, keine neuen Repos, SSH-Keys oder Access-Tokens im Untersuchungsfenster. - Live-Prometheus lief noch mit der alten Regel
rate(...[5m]) > 0; die bereits im Repo vorbereitete Regelincrease(...[5m]) >= 5wurde auf den Live-Mount kopiert und per Prometheus-Reload aktiviert. - Gitea-Registrierung und OpenID-Signup wurden geschlossen:
DISABLE_REGISTRATION=true,REGISTER_EMAIL_CONFIRM=true,ENABLE_OPENID_SIGNIN=false,ENABLE_OPENID_SIGNUP=false; Signup-Seite zeigt danach "Registration is disabled", OpenID-Login liefert 403.
2026-05-18 - Komodo Webhooks vollstaendig abgeglichen
- Live-Befund auf
Kallilabcore: Komodo hatte fuer mehrere aktuelle Stackswebhook_enabled: true, aber Gitea enthielt noch nicht fuer alle aktuellen Stack-IDs aktive Webhooks. - In der Gitea-Datenbank wurden aktive Webhooks fuer
monitoring(6a08d5297707b0930ab95c72),glance(6a09d7347707b0930ab96eae),grafana(69f31ecdf65eb72b757c497d) undnextcloud(69e519085fd5e8bc51f121f0) nach dem bestehenden Komodo-Hook-Muster angelegt. - Stale aktive Gitea-Hooks auf nicht mehr vorhandene bzw. alte Komodo-Stack-IDs wurden deaktiviert.
- Abgleich danach: 30 aktive Gitea-Komodo-Hooks fuer 30 Komodo-Stacks mit aktiviertem Webhook;
hermesbleibt in Komodo bewusstwebhook_enabled: false. - Netzwerkpfad aus dem
gitea-Container zukomodo-core:9120wurde erfolgreich verifiziert;last_status=0fuer neue Hooks bleibt bis zum ersten Push erwartbar.
2026-05-19 - Posture-Check Host-Version verifiziert
- Ursache fuer wiederholte ntfy-Warnings war nicht mehr die Repo-Logik allein, sondern dass auf dem Unraid-Host noch die alte Skriptversion unter
/mnt/user/services/homelab-infra/services/posture-check/posture-check.shausgefuehrt wurde. - Host-Skript wurde mit Backup ersetzt und mit
SEND_NTFY=0direkt auf dem Host verifiziert. - Ergebnis des echten Host-Laufs:
status: ok,critical_count: 0,warning_count: 0. - Betriebsregel daraus: Bei Host-User-Scripts nach Repo-Aenderungen immer den tatsaechlich ausgefuehrten Host-Pfad und den Live-Output pruefen.
2026-05-19 - Borg-Scope fuer GitOps Host Automation erweitert
- Nach den Gitea-/Komodo-Webhook- und Posture-Check-Aenderungen wurde der Backup-Scope um Host-GitOps-Pfade erweitert.
- Borg UI mountet kuenftig
/mnt/user/servicesread-only als/local/services. - In
all-important-sources.txtwurden/local/services/homelab-infra,/local/services/stacksund/local/services/posture-checkaufgenommen. pre-backup-dumps.shwurde auf dem Host ausgefuehrt; frische Dumps fuergitea.sqlite.dumpundkomodo-mongo.archive.gzliegen unter/mnt/user/backups/borg/dumps/latest.- Wirksam wird der neue
/local/services-Mount nach Redeploy/Recreate desborg-ui-Stacks.
2026-05-19 - Traefik-5xx Alert entstoert
HomelabTraefik5xxhatte auf einzelne 5xx-Antworten reagiert, weil die Regelrate(...[5m]) > 0nutzte.- Live-Befund fuer
gitea@docker: zwei kurzePOST /mit HTTP 500 von einer externen IP, danach durchgehend erfolgreiche Gitea-Checks; kein Container-Restart. - Prometheus-Regel auf
increase(...[5m]) >= 5geaendert, damit einzelne externe Fehlrequests keinen ntfy-Alarm ausloesen.
2026-05-17 - Glance Homelab-Dashboard vorbereitet
ops/glanceals geschuetztes Homelab-Dashboard unterglance.kaleschke.infovorbereitet.- Glance zeigt HTTP-Monitore fuer Core, Apps und Ops, Docker-Containergruppen, Host-Snapshot und Bookmarks.
- Docker-Status laeuft nicht ueber einen direkten Socket-Mount in Glance, sondern ueber
glance-docker-socket-proxyauf einem internenglance_socket_net. - Die HTTP-Monitore nutzen oeffentliche URLs als Klickziel und interne
check-url-Endpunkte auffrontend_net, damit Glance nicht vom externen Hairpin-/Auth-Pfad abhaengt. - Das Immich Community-Widget wurde ergaenzt. Der API-Zugriff nutzt eine interne Service-URL und ein Stack-ENV-Token. Paperless, Scrutiny und Speedtest bleiben Kandidaten fuer einen spaeteren Widget-Pass, sobald die konkrete API-Ausgabe im Glance-Kontext sauber verifiziert ist.
- Das Dashboard-Layout wurde an
ginesjunior11/glance-dashboard-configangelehnt: dunkleres blaues Theme, Zeitfortschrittsgruppe, farbige Dashboard-Icons, dichterHomelab Status, Server-Stats im Hauptbereich und eine zweite SeiteInfrastructure and Media. Die rechte Home-Spalte zeigt WAN-Infos aus Speedtest Tracker, Speedtest-Livewerte, AdGuard-DNS-Stats, DNS/Ingress-Monitore und eine separate Netzwerk-Containergruppe.
2026-05-17 - Monitoring-Zielstack konsolidiert
monitoring/als zentraler Observability-Zielstack fuer Prometheus, Loki, Promtail, Grafana, node-exporter, cAdvisor und InfluxDB 3 Core vorbereitet.monitoring-grafananutzt den Repo-Standardauthelia@file,secure-headers@fileund Secrets per Datei statt Klartext-Stack-ENV.monitoring-influxdb3-coreuebernimmt den LAN-only Writer-Endpunkt fuer Home Assistant (8181viaINFLUXDB_BIND_IP).ops/lokiundops/grafana-influxdbsind abgeloeste Altstaende und bleiben nur als Rollback-/Migrationsreferenz im Repo.
2026-05-07 - Vaultwarden Restore-Test praktisch verifiziert
- Erster echter Vaultwarden-Mini-Restore gegen das produktive Borg-Repo
hetzner_borg_appdata_criticalerfolgreich durchgefuehrt. - Restore lief isoliert nach
/mnt/user/backups/restore-lab/vaultwarden, nicht gegen produktive Pfade. - Testinstanz
restoretest-vaultwardenwurde lokal auf127.0.0.1:18080gestartet; HTTP 200 und Login-Seite wurden erfolgreich bestaetigt. - Report wurde unter
/mnt/user/backups/restore-reports/vaultwarden-2026-05-07.mdgeschrieben. - Fuer den praktischen Restore-Pfad wurden zwei hostseitige Voraussetzungen sichtbar und umgesetzt:
known_hostsfuer das Hetzner-Ziel imborg-ui-Container- Host-Secret-Datei
/mnt/user/appdata/secrets/borg_repo_passphrase.txtfuer kuenftige Restore-Tests
- Testdaten unter
/mnt/user/backups/restore-lab/vaultwarden/datawurden nach erfolgreichem Lauf wieder bereinigt.
2026-05-07 - Gitea Restore-Test praktisch verifiziert
- Erster echter Gitea-Mini-Restore gegen das produktive Borg-Repo
hetzner_borg_appdata_criticalerfolgreich durchgefuehrt. - Restore lief isoliert nach
/mnt/user/backups/restore-lab/gitea, nicht gegen produktive Pfade. - Testinstanz
restoretest-giteawurde lokal auf127.0.0.1:13000und127.0.0.1:12222gestartet. - HTTP 200, HTML-Titel und lokaler SSH-Port wurden erfolgreich bestaetigt.
- Report wurde unter
/mnt/user/backups/restore-reports/gitea-2026-05-07.mdgeschrieben. - Testdaten unter
/mnt/user/backups/restore-lab/gitea/datawurden nach erfolgreichem Lauf wieder bereinigt.
2026-05-07 - Paperless Restore-Test praktisch verifiziert
- Erster echter Paperless-Mini-Restore gegen das produktive Borg-Repo
hetzner_borg_appdata_criticalerfolgreich durchgefuehrt. - Restore umfasste sowohl die Dateipfade als auch
postgresql17-paperless.dumpaus dem Borg-Archiv. - Testinstanzen
restoretest-paperless,restoretest-paperless-postgresundrestoretest-paperless-redisliefen isoliert ohne Traefik. - Login-Seite war lokal auf
127.0.0.1:18120erreichbar. - Der Dump-Import in Test-Postgres war erfolgreich; die Test-Datenbank enthielt
25Dokumente. - Report wurde unter
/mnt/user/backups/restore-reports/paperless-2026-05-07.mdgeschrieben. - Testdaten unter
/mnt/user/backups/restore-lab/paperlesswurden nach erfolgreichem Lauf wieder bereinigt.
2026-05-06 - Komodo Webhook Secret getrennt
KOMODO_WEBHOOK_SECRETvonKOMODO_SECRET_KEYgetrennt und als eigene Stack-ENV-Variable dokumentiert.- Gitea-Komodo-Webhooks mit bisherigem Core-Secret wurden auf den neuen
KOMODO_WEBHOOK_SECRETumgestellt; bereits individuelle per-Stack-Webhook-Secrets wurden beibehalten. - Host-
.env, persistente Komodo-Compose und Gitea-Webhooks wurden als ein gemeinsamer Runtime-Schritt behandelt, damit Auto-Deploys nicht auseinanderlaufen. - Ein stale Gitea-Webhook auf eine nicht mehr vorhandene Komodo-Stack-ID wurde deaktiviert, nicht geloescht.
2026-05-06 - Authelia GMX SMTP Notifier
- Authelia-Notifier von Filesystem-Log auf GMX SMTP (
submission://mail.gmx.net:587) umgestellt. - SMTP-Passwort bleibt ausserhalb des Repos unter
/mnt/user/appdata/secrets/authelia_smtp_password.txt. - Authelia-Compose erhaelt explizite DNS-Server, weil der SMTP-Startup-Check externe Namen wie
mail.gmx.netaufloesen muss. - Repo-Baseline und Host-Config muessen bei Auth-Aenderungen weiter bewusst gemerged und vor Restart validiert werden.
2026-05-06 - Hermes DR und Mail-Archiver Authelia
- Hermes Agent in
docs/RESTORE_MATRIX.mdunddocs/DISASTER_RECOVERY.mdmit Restore-Pfaden, Secret-/ENV-Hinweisen und Smoke-Test ergaenzt. - Mail-Archiver Web-UI hinter
authelia@file,secure-headers@filegelegt; App-eigene Auth bleibt als zweite Schutzschicht bestehen. - M10/Komodo blieb unveraendert.
2026-05-05 - N-Aufraeum-Sprint
- Obsolete Compose-Top-Level-Felder
version: "3.9"aus Immich, Mail Archiver und Paperless entfernt. - Leere
env/domains.env.exampleundenv/global.env.examplemit nicht geheimen Beispielwerten gefuellt. - Veraltete
.keep-Platzhalter aus Verzeichnissen mit echten Compose-/Repo-Inhalten sowie zwei reine Geister-Verzeichnisse (host-services/plex,infra/dns) entfernt.
2026-05-16 - Backup-Konsistenz und erster Hardening-Schnitt
- SQLite-Dumps fuer Gitea, Vaultwarden, Speedtest Tracker und Filebrowser werden containerseitig als
*.sqlite.dumperzeugt und per Freshness-Check geprueft; Uptime Kuma wurde am 2026-05-25 aus dem aktiven Dump-Scope entfernt. nextcloud.dumpund die Nextcloud-Userdaten sind als Option A im Borg-Scope dokumentiert.- Filebrowser mountet keine breite
/mnt/user/appdata-Flaeche mehr, sondern nur noch Documents, Photos, Projekte sowie eigenen App-State. - Authelia Argon2id-Parameter in der Repo-Baseline auf
iterations: 3,memory: 65536,parallelism: 4gesetzt; produktive Host-Config muss kontrolliert gemerged und mit Test-User validiert werden. - Redis-Caches wurden auf
redis:7.4-alpine@sha256:...vereinheitlicht; Nextcloud wurde mit Registry-validiertem Digest gepinnt. - Eindeutig aufloesbare
latest@sha256-Images wurden auf konkrete Tags umgestellt: Homepagev1.12.3, code-server4.116.0, Filebrowserv2.63.2, Speedtest Tracker1.13.12.
2026-05-05 - M3b versionierte App-Images digest-gepinnt
- Versionierte Nicht-Komodo-Images fuer BentoPDF, Mealie, Paperless, Paperless-GPT, AdGuard Home, Grafana, InfluxDB 3 Core und Traefik auf die am Host laufenden, manifest-validierten Digests gepinnt.
nextcloud:33.0.2-apachewurde bewusst nicht in diesem Schritt gepinnt, weil der lokal gelistete Digest nicht als Registry-Manifest fuertag@sha256validierbar war.- Redis-Caches und Komodo/M10 blieben unveraendert.
2026-05-05 - M6/M7/M8 Doku-Konsolidierung
hermes.kaleschke.infoals produktive Hermes-Dashboard-Route hinter Traefik + Authelia in Architektur, Repo-Map und Service-Katalog ergaenzt.grafanaundinfluxdb3-corelaufen weiterhin alsuser: "0"; das wurde als Host-Appdata-Permissions-Ausnahme dokumentiert und nicht nebenbei geaendert.- Tailscale-Ausnahme um
NET_ADMIN,NET_RAWund/dev/net/tunergaenzt. - Komodo-Secret-/Webhook-Themen wurden bewusst nicht geaendert; Komodo-Aenderungen erfolgen nur gemeinsam mit dem Betreiber.
2026-05-05 - M3a stateful Digest-Pinning
- PostgreSQL 17 Datenhalter auf
postgres:17.9@sha256:5b96f1a16bd9768b060dd2ffe55cb6225c4d9ef4d214a8b21eb08134869a97e4gepinnt (postgresql17,mealie-postgres,nextcloud-postgres). - Immich pgvector-Postgres auf
tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52gepinnt. - Komodo Mongo auf
mongo:7.0.32@sha256:32979a1189dfdc44da3f5ed40d910495f5ad8f6f7f77556646f890a30b2d3f56sowie Komodo Core/Periphery und Gitea auf die am Host laufenden Digests gepinnt. - Redis-Caches wurden am 2026-05-16 auf
redis:7.4-alpine@sha256:...vereinheitlicht; Redeploys erfolgen stackweise mit Smoke-Test, nicht parallel.
2026-05-04 - Komodo Self-Stack Drift auf persistenten Pfad zurueckgefuehrt
- Drift-Befund:
komodo-coreundkomodo-peripheryliefen aus/tmp/komodo-core-repair.ymlbzw./tmp/komodo-periphery-repair.yml;komodo-mongoverwies auf/mnt/user/services/stacks/komodo/compose.yaml, obwohl dieser Pfad fehlte. - Vor Eingriff wurden die Repair-Dateien und zugehoerigen
/tmp/*.env-Dateien unter/mnt/user/appdata/komodo/_drift_backup_2026-05-04/gesichert. - Zusaetzlich wurde eine geschuetzte Recovery-ENV unter
/mnt/user/appdata/secrets/_komodo_stack_env_recovery_2026-05-04.envabgelegt; diese Datei enthaelt Tier-1-Secret-Material und ist kein Dauerzustand. - Vor dem Reconcile wurde das host-seitige Dump-Skript ausgefuehrt;
komodo-mongo.archive.gzwurde frisch unter/mnt/user/backups/borg/dumps/latest/erzeugt. - Persistenter Self-Stack wurde unter
/mnt/user/services/stacks/komodo/compose.yamlausops/komodo/docker-compose.ymlwiederhergestellt;.envwurde hostseitig aus der bestehenden Runtime-ENV abgeleitet. - Der vollstaendige Dry-run haette auch
komodo-mongorecreated und wurde daher nicht ausgefuehrt. Stattdessen wurden nurkomodo-coreundkomodo-peripherygezielt mit--no-deps --force-recreateaus dem persistenten Pfad neu erstellt;komodo-mongoblieb unveraendert healthy. - Smoke-Tests:
docker compose lszeigt fuerkomodonur noch/mnt/user/services/stacks/komodo/compose.yaml, Mongo pingt{ ok: 1 },https://komodo.kaleschke.infoliefert HTTP 200, und Periphery meldet sich am Core an. - Die
/tmp/*repair.yml-Dateien bleiben vorerst als Altlast erhalten und duerfen erst nach stabiler Laufzeit bewusst entfernt oder ins Drift-Backup verschoben werden.
2026-05-04 - Authelia ACL-Drift hostseitig gemerged
- Die produktive Authelia-Config ist groesser als die Repo-Datei, weil sie hostseitige OIDC-/Secret-Konfiguration enthaelt. Die Repo-Datei wurde daher als nicht geheime Baseline eingeordnet und nicht blind auf den Host kopiert.
- Host-Backup vor Aenderung:
/mnt/user/appdata/authelia/config/configuration.yml.bak-20260504-acl-sync. - Minimaler Host-Merge:
homepage.kaleschke.infowurde aus der bypass-Liste entfernt,komodo.kaleschke.infoaus der 2FA-Liste entfernt, unddefault_redirection_urlwurde aufhttps://home.kaleschke.infogesetzt. authelia validate-configwar erfolgreich; Authelia wurde neu gestartet und war danach healthy.- Smoke-Tests:
home.kaleschke.infoliefert fuer anonyme Requests eine Authelia-Weiterleitung,komodo.kaleschke.infobleibt ueber native Komodo-Auth erreichbar.
2026-05-04 - Home Assistant InfluxDB LAN-Port und Drift-Runbook
influxdb3-corefuer Home-Assistant-Writer auf LAN-Port8181vorbereitet und deployed.- InfluxDB bleibt ohne Traefik-/Public-Route und haengt nicht im
frontend_net. - Fuer aktives Docker Host-Port-Publishing wurde zusaetzlich zum internen
grafana_influx_internaldas Compose-Netzgrafana_influx_lanergaenzt. - Komodo Periphery dauerhaft um
/mnt/user/services:/mnt/user/servicesundfrontend_netergaenzt, damit Stack-Workspaces und Gitea-Zugriff reproduzierbar funktionieren. docs/GITOPS_DRIFT_RUNBOOK.mdangelegt, um lokale Git-Kopie, Gitea, Komodo Workspace, Docker Runtime und Host-Listener getrennt zu pruefen.
2026-03-28 - GitOps-Konsolidierung
- Komodo als primaeren Stack-Manager eingefuehrt.
- Portainer aus dem Zielbild herausgenommen.
- Traefik auf 100% Docker-Labels konsolidiert.
diunentfernt; Update-Monitoring wird ueber Komodo abgedeckt.
2026-03-29 - Portainer abgeschaltet
- Portainer CE aus dem produktiven Betrieb entfernt.
- Komodo als alleinigen Stack-Manager festgezogen.
2026-04-13 bis 2026-04-15 - Borg-Rollout abgeschlossen
critical_infraerfolgreich nach Borg gesichert.- Pre-Backup-Dumps host-seitig ueber Unraid User Scripts etabliert.
- Dump-Zielpfad auf
/mnt/user/backups/borg/dumpsumgestellt. - Restore-Smoke-Test fuer
postgresql17-globals.sqlundgitea.dberfolgreich nachgewiesen. - Monitoring fuer Borg war historisch ueber
ntfyund Uptime Kuma eingerichtet; seit 2026-05-25 ersetzt durchntfy, Blackbox/Prometheus und Monitoring Grafana.
2026-04-15 - Repo- und Betriebsbereinigung
- Firefly, Firefly-Fints und Semaphore aus Repo und Homelab entfernt.
- GitHub Desktop als Standard-Workflow fuer den lokalen Sync festgelegt.
2026-04-17 - Sicherheits- und Doku-Abgleich
code-serverhinterauthelia@file,secure-headers@fileabgesichert.- Traefik-Dashboard von
dashboard-auth@fileaufauthelia@file,secure-headers@fileumgestellt; BasicAuth-Hash aus dem Repo entfernt. - Redis von Klartext in der Compose auf Secret-Datei unter
/mnt/user/appdata/secrets/redis_password.txtumgestellt. - Redis-Passwort bewusst nicht rotiert; Live-Passwort bleibt vorerst unveraendert.
mail-archiverin der Architektur-Doku an den realen Traefik-Betrieb angepasst.paperless-gptvonLOG_LEVEL=debugaufinfoumgestellt.speedtest-trackervonAPP_DEBUG=trueauffalseumgestellt.- Mutable Image-Tags fuer produktive Stacks auf die aktuell laufenden Digests eingefroren, um Deployments reproduzierbar zu machen.
paperless-ngxbleibt fuerPAPERLESS_DBPASSundPAPERLESS_REDISvorerst bewusst bei Stack Environment Variables; keine Live-Migration auf_FILE, solange der aktuelle Stand stabil laeuft.- Disaster-Recovery-Runbook und Restore-Matrix fuer den Totalausfall-/Wiederanlauf-Fall neu dokumentiert.
2026-04-19 - paperless-gpt Digest-Pin zurueckgenommen
- Der fuer
paperless-gpteingetragene Digest war syntaktisch ungueltig (63 statt 64 Hex-Zeichen) und wurde daher wieder auficereed/paperless-gpt:latestzurueckgesetzt. - Diese Ruecknahme ist bewusst eng auf einen einzelnen defekten Pin begrenzt und aendert keine anderen Digest-Festschreibungen.
- Die zwischenzeitlichen OCR-/Versions-Experimente fuer
paperless-gptwurden wieder auf den einfachen vorherigen Stand zurueckgenommen (icereed/paperless-gpt:latest,VISION_LLM_MODEL=cnshenyang/qwen3-nothink:14b), um den letzten bekannten Alltagszustand wiederherzustellen.
2026-04-19 - Nextcloud und Stirling-PDF vorbereitet
apps/nextcloud/docker-compose.ymlals offizieller Docker-Microservice-Stack mitnextcloud:apache, eigener PostgreSQL-Datenbank und eigenem Redis vorbereitet.- Nextcloud folgt dem Repo-Standard
frontend_net+ app-internes Netz, nutzt_FILE-Secrets fuer Admin- und DB-Passwort und ist bewusst nicht hinter zentraler ForwardAuth, damit WebDAV/CardDAV und native Clients sauber funktionieren. apps/stirling-pdf/docker-compose.ymlals geschuetzter Tool-Stack hinterauthelia@file,secure-headers@filevorbereitet.- Stirling-PDF nutzt persistente Pfade fuer
/configs,/logs,/pipeline,/customFilesund/usr/share/tessdata; interne Stirling-Login-Funktion bleibt zugunsten des zentralen Traefik-/Authelia-Zugangs deaktiviert.
2026-04-30 - BentoPDF und Grafana/InfluxDB vorbereitet
stirling-pdfrepo-seitig durchbentopdfersetzt; Domainpdf.kaleschke.infobleibt erhalten.- BentoPDF laeuft als geschuetztes browserseitiges PDF-Tool hinter
authelia@file,secure-headers@fileund setzt zusaetzlich COOP/COEP-Header fuer SharedArrayBuffer-basierte Office-Konvertierung. ops/grafana-influxdbals neuer Monitoring-Stack vorbereitet und spaeter in Betrieb genommen.- Grafana laeuft hinter Traefik + Authelia unter
grafana.kaleschke.info. - InfluxDB 3 Core bleibt ohne Public Route und wird ueber eine provisionierte Grafana-Datenquelle angebunden.
- Secrets fuer Grafana-Admin-Passwort, InfluxDB-Admin-Token und Grafana-Datasource-Token sind als Host-Dateien unter
/mnt/user/appdata/secrets/dokumentiert.
Dauerhafte Learnings
- Kein Live-Editing in Komodo; Git gewinnt immer gegen manuelle Drift.
- Webhooks koennen nach einem Push sofort einen Deploy ausloesen.
- Rollback soll bevorzugt ueber saubere Git-Commits und bekannte Good States erfolgen, nicht ueber History-Rewrites auf
master. - Doku soll Endzustaende beschreiben, nicht veraltete Zwischenstaende konservieren.