cd650b19ac
Operational hardening across several services after live incident analysis between 2026-05-18 and 2026-05-20: - Gitea: disable public registration and OpenID signup/signin to stop the external POST / 5xx bursts that triggered availability alerts. New repo-wide policy requires every productive Micha/homelab-infra Komodo stack to ship with an active Gitea->Komodo webhook on the current stack ID (documented in CLAUDE.md, AI_CONTEXT.md, WORKFLOW.md). - posture-check: extract the Disk1 fstype check into its own function so the documented Disk1 NTFS exception no longer raises ntfy warnings, skip POSIX inode checks on NTFS, and dedup ntfy alerts via a fingerprint state file with ALERT_REPEAT_SECONDS (default 24h). Repeat-spam on the same cause now suppressed. - docker-critical-events: parse the event JSON for container name, action, exit code and signal; drop `die exit=0` events (clean stops); ship a structured ntfy message instead of the raw event line. - Borg UI: mount /mnt/user/services into the backup container as /local/services:ro and include homelab-infra, stacks and posture-check in all-important-sources.txt. RESTORE_MATRIX and DISASTER_RECOVERY updated accordingly. - Unraid user scripts: document the new homelab-operations-report-daily cron job and the SMTP password file it expects on the host. - MIGRATION_LOG: capture the four live events from this window - Gitea 5xx burst + signup closure, Komodo webhook reconciliation, posture-check host-version verification, Borg scope extension, and Traefik 5xx alert detuning. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
21 KiB
21 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.
- 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-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, Uptime Kuma, Speedtest Tracker und Filebrowser werden containerseitig als
*.sqlite.dumperzeugt und per Freshness-Check geprueft. 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 ueber
ntfyund Uptime Kuma eingerichtet.
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.