diff --git a/HOMELAB_ARCHITECTURE_MASTER_V2.md b/HOMELAB_ARCHITECTURE_MASTER_V2.md index 3bbcb1b..cb1c53c 100644 --- a/HOMELAB_ARCHITECTURE_MASTER_V2.md +++ b/HOMELAB_ARCHITECTURE_MASTER_V2.md @@ -60,7 +60,7 @@ Es gibt **keine künstlichen globalen Zusatznetze** wie `admin_net`, `monitoring Postgres, Redis und ähnliche Dienste laufen ausschließlich in `backend_net` oder einem eigenen internen Compose-Netz. ### P4 — Admin-UIs sind nicht öffentlich -filebrowser, scrutiny, UptimeKuma, code-server, Traefik-Dashboard, backrest und borg-ui sind standardmaessig **Tailscale-only** oder hinter Traefik **mit zentraler Middleware** abgesichert. `Komodo` ist die dokumentierte Ausnahme und bleibt bewusst bei nativer Authentifizierung ohne pauschal vorgeschaltete ForwardAuth-Middleware. +filebrowser, scrutiny, UptimeKuma, code-server, Traefik-Dashboard und borg-ui sind standardmaessig **Tailscale-only** oder hinter Traefik **mit zentraler Middleware** abgesichert. `Komodo` ist die dokumentierte Ausnahme und bleibt bewusst bei nativer Authentifizierung ohne pauschal vorgeschaltete ForwardAuth-Middleware. ### P5 — Compose-first Alle produktiven Container werden als Compose verwaltet. Bestehende Dockerman-/Ad-hoc-Container werden schrittweise migriert. @@ -103,7 +103,7 @@ traefik (80/443) │ └── frontend_net ├── öffentliche Apps (vaultwarden, mealie, paperless, immich, gitea, ntfy, mail-archiver, nextcloud) - ├── geschützte UIs mit Middleware (homepage, paperless-gpt, uptime-kuma, filebrowser, scrutiny, code-server, backrest, borg-ui, glances, speedtest, bentopdf, grafana) + ├── geschützte UIs mit Middleware (homepage, paperless-gpt, uptime-kuma, filebrowser, scrutiny, code-server, borg-ui, glances, speedtest, bentopdf, grafana) ├── Admin-UI mit nativer Auth (komodo) └── Dienste mit Internetbedarf ohne öffentliche UI (ddns-updater) @@ -153,7 +153,6 @@ Diese Dienste sind **keine Public Apps**: - `filebrowser` — files.kaleschke.info (Middleware) - `scrutiny` — scrutiny.kaleschke.info (Middleware) - `code-server` — Traefik + Middleware -- `backrest` — Traefik + Middleware - `borg-ui` — borg.kaleschke.info (Middleware) - `homepage` — home.kaleschke.info (Middleware) - `paperless-gpt` — paperless-gpt.kaleschke.info (Middleware) @@ -240,7 +239,6 @@ Legende Status: | `unbound` | ✅ | `dns_net` | intern | Upstream-Resolver für AdGuard, isoliert | — | | `ddns-updater` | ✅ | `frontend_net` | intern | Cloudflare DNS API; bleibt in `frontend_net` | Dokumentierte Ausnahme | | `tailscale` | ✅ | `host` | VPN-Zugang | Git-Stack (`host-services/tailscale/`) | nutzt `NET_ADMIN`, `NET_RAW` und `/dev/net/tun` als dokumentierte VPN-Ausnahme | -| `backrest` | ✅ | `frontend_net`, `backend_net` | Traefik + Middleware | produktiver Backup-Admin-Dienst | breite Mounts bewusst dokumentieren | | `homepage` | ✅ | `frontend_net` | Traefik + Middleware | geschuetztes Start-Dashboard via `home.kaleschke.info` | — | ### 7.2 Sicherheit / Identity @@ -319,7 +317,8 @@ Legende Status: | `dashdot` | 2026-03-28 | nicht mehr aktiv | | `netdata` | 2026-03-28 | nicht mehr aktiv | | `netalertx` | 2026-03-28 | nicht mehr aktiv | -| `luckyBackup` | 2026-03-28 | nicht mehr aktiv; Backup via backrest | +| `luckyBackup` | 2026-03-28 | nicht mehr aktiv; Backup via Borg | +| `backrest` | 2026-05-15 | entfernt; Borg ist die alleinige Backup-Technologie, WD MyBookLive ist kein Backup-Ziel mehr | | `Stash` | 2026-03-28 | nicht mehr aktiv | | `PortainerCE` | 2026-03-29 | abgeschaltet; Komodo ist alleiniger Stack-Manager | | `beszel` | nicht dokumentiert | bereits entfernt; nicht mehr Teil des Zielbilds | diff --git a/apps/homepage/docker-compose.yml b/apps/homepage/docker-compose.yml index 8e5d603..b3a3374 100644 --- a/apps/homepage/docker-compose.yml +++ b/apps/homepage/docker-compose.yml @@ -10,8 +10,6 @@ services: HOMEPAGE_VAR_ADGUARD_PASSWORD: ${HOMEPAGE_VAR_ADGUARD_PASSWORD} HOMEPAGE_VAR_KOMODO_API_KEY: ${HOMEPAGE_VAR_KOMODO_API_KEY} HOMEPAGE_VAR_KOMODO_API_SECRET: ${HOMEPAGE_VAR_KOMODO_API_SECRET} - HOMEPAGE_VAR_BACKREST_USERNAME: ${HOMEPAGE_VAR_BACKREST_USERNAME} - HOMEPAGE_VAR_BACKREST_PASSWORD: ${HOMEPAGE_VAR_BACKREST_PASSWORD} HOMEPAGE_VAR_SPEEDTEST_API_KEY: ${HOMEPAGE_VAR_SPEEDTEST_API_KEY} HOMEPAGE_VAR_PAPERLESS_TOKEN: ${HOMEPAGE_VAR_PAPERLESS_TOKEN} HOMEPAGE_VAR_FILEBROWSER_USERNAME: ${HOMEPAGE_VAR_FILEBROWSER_USERNAME} diff --git a/apps/unbound/docker-compose.yml b/apps/unbound/docker-compose.yml index 9bdbc74..b6b8aef 100644 --- a/apps/unbound/docker-compose.yml +++ b/apps/unbound/docker-compose.yml @@ -1,6 +1,6 @@ services: unbound: - image: shaanmajid/unbound:latest@sha256:0a163e92e55698ddc45c0265884a86c7363da245ab4a909a8e5cb0f541aeeb4d + image: shaanmajid/unbound:1.24.2@sha256:d278b71c592b2555cc802911bb0757a6a24f4a8ad7f5848720296c04876eeb63 container_name: unbound restart: unless-stopped volumes: diff --git a/docs/AI_CONTEXT.md b/docs/AI_CONTEXT.md index 92751ca..bcf00ba 100644 --- a/docs/AI_CONTEXT.md +++ b/docs/AI_CONTEXT.md @@ -50,7 +50,7 @@ Traefik ist der zentrale Web-Einstieg fuer HTTP(S). Admin-/Ops-UIs liegen entwed ### Apps -Wichtige Apps sind Paperless, Immich, Mealie, Mail Archiver, Nextcloud, ntfy, Vaultwarden und Gitea. Admin-/Ops-Tools sind u. a. Homepage, Komodo, Borg UI, Backrest, Uptime Kuma, Filebrowser, code-server, Glances, Scrutiny, Speedtest, Grafana und Hermes Agent. +Wichtige Apps sind Paperless, Immich, Mealie, Mail Archiver, Nextcloud, ntfy, Vaultwarden und Gitea. Admin-/Ops-Tools sind u. a. Homepage, Komodo, Borg UI, Uptime Kuma, Filebrowser, code-server, Glances, Scrutiny, Speedtest, Grafana und Hermes Agent. ### Hermes Agent — Architektur und Ops-Monitor @@ -184,7 +184,7 @@ KI-Agenten sollen konservativ arbeiten: keine indirekten Live-Aenderungen, keine - Authelia-Notifier ist SMTP; bei Auth-Aenderungen Host-Config backupen, `authelia validate-config` ausfuehren und erst danach neu starten. - `paperless-ngx` nutzt fuer DB/Redis bewusst Stack ENV statt `_FILE`. - `homepage`, `glances` und `komodo-periphery` nutzen Docker-Socket-Mounts; Zugriff bewusst behandeln. -- `backrest`, `borg-ui` und `filebrowser` haben breite Mounts; bei Hardening nicht ad hoc, sondern gezielt vorgehen. +- `borg-ui` und `filebrowser` haben breite Mounts; bei Hardening nicht ad hoc, sondern gezielt vorgehen. - `scrutiny` ist privilegiert und hat Device-Mounts. - `Plex-Media-Server` ist im Architekturziel als Host-Sonderfall dokumentiert, aber nicht als Repo-Compose-Stack enthalten. - Echte `stack.env`- und `.env`-Dateien gehoeren nicht ins Repo; fuer Hermes liegt nur `ops/hermes-agent/stack.env.example` im Git. diff --git a/docs/DISASTER_RECOVERY.md b/docs/DISASTER_RECOVERY.md index 863f548..f118e3a 100644 --- a/docs/DISASTER_RECOVERY.md +++ b/docs/DISASTER_RECOVERY.md @@ -269,14 +269,13 @@ Ziel: 18. `apps/bentopdf/` 19. `ops/uptime-kuma/` 20. `ops/borg-ui/` -21. `ops/backrest/` -22. `ops/filebrowser/` -23. `ops/glances/` -24. `ops/scrutiny/` -25. `ops/speedtest/` -26. `ops/grafana-influxdb/` -27. `ops/hermes-agent/` -28. `infra/ddns-updater/` +21. `ops/filebrowser/` +22. `ops/glances/` +23. `ops/scrutiny/` +24. `ops/speedtest/` +25. `ops/grafana-influxdb/` +26. `ops/hermes-agent/` +27. `infra/ddns-updater/` **Regel:** Nach jeder Stufe kurz pruefen, bevor die naechste beginnt. diff --git a/docs/RECOVERY_HANDOFF_2026-05-15.md b/docs/RECOVERY_HANDOFF_2026-05-15.md new file mode 100644 index 0000000..ec5798a --- /dev/null +++ b/docs/RECOVERY_HANDOFF_2026-05-15.md @@ -0,0 +1,89 @@ +# Recovery Handoff - KalliLab CORE - 2026-05-15 + +Zweck: Startpunkt fuer einen neuen Chat, ohne das komplette Repo erneut zu lesen. + +## Kontext + +- Incident: NTFS-Cache-Vorfall ab 2026-05-11. +- Host: Unraid `Kallilabcore`, SSH `root@192.168.178.58`. +- Root Cause: Cache war NTFS/ntfs3; Disk1 ist noch NTFS/ntfs3 und wird spaeter separat migriert. +- Recovery-Prinzip: `docs/STORAGE_LAYOUT.draft.md` ist fuer diesen Restore bindend, obwohl die Datei noch `.draft` heisst. +- Keine Stacks starten, wenn ein Pfad/Setting gegen Storage Layout, Restore Matrix oder Architecture Master verstoesst. + +## Host-Zustand + +- Cache wurde erfolgreich von NTFS auf XFS neu formatiert. +- Verifiziert: `/mnt/cache` ist XFS auf `/dev/nvme0n1p1`. +- Disk1 bleibt vorerst NTFS auf `/mnt/disk1`; Migration ist Phase 2 nach stabilem Cache-Betrieb. +- Docker und Libvirt wurden nach dem Format wieder gestoppt. +- `/mnt/user/appdata` ist leer bzw. nur Basisverzeichnis; produktive Appdaten sind noch nicht restored. +- Share-Settings wurden nach Storage Layout korrigiert: + - `appdata`, `system`, `domains`: cache `only` + - `services`, `documents`, `photos`, `backups`, `media`, `finance`, `projekte`: cache `no`, include `disk1` + - `isos`: cache `yes` +- Backup alter Share-Configs: `/boot/config/shares.bak-20260515-pre-storage-layout` + +## Image und Backups + +- Full NVMe image liegt auf Windows `H:\kallilab-recovery\2026-05-14\nvme0n1-full-20260514.img`. +- `dd` exit code war `0`; Image-Groesse/Padding geprueft; Source-Raw-Hash war fertig. +- Image-Data-Hash wurde aus Zeitgruenden bewusst abgebrochen. Risiko wurde als ca. 1-3 Prozent eingeschaetzt. +- Hetzner-Borg-Archiv `Taegliche-Sicherung-2026-05-10T04:30:52.050` wurde als lesbare Recovery-Quelle verifiziert. +- Verifiziert wurden u. a. Vaultwarden SQLite, Gitea SQLite, Postgres-Dumps und Komodo Mongo-Archiv-Header. +- Lokaler Verify-Auszug liegt unter `H:\kallilab-recovery\2026-05-14\borg-verify-may10`. + +## Entscheidungen seit dem Cache-Rebuild + +- WD MyBookLive Duo wird komplett aus dem Setup entfernt. +- Backrest wird komplett aus dem aktiven Setup entfernt. +- Borg ist alleinige Backup-Technologie. +- Appdata Backup Plugin bleibt deaktiviert; WD-Ziele wurden aus aktiver Host-Konfiguration geleert. +- Unassigned Devices SMB-Remote fuer `//MYBOOKLIVEDUO/Public` wurde aus aktiver Host-Konfiguration entfernt. +- Backrest User Script `check_backrest_hetzner` wurde aus Schedule/Cron entfernt. +- Host-Konfig-Backup fuer diese Bereinigung: `/boot/config/cleanup-backup-20260515-remove-wd-backrest` + +## Repo-Aenderungen im aktuellen Arbeitsbaum + +Backrest wurde aus dem aktiven Zielbild entfernt: + +- `ops/backrest/docker-compose.yml` geloescht +- `HOMELAB_ARCHITECTURE_MASTER_V2.md` aktualisiert +- `docs/REPO_MAP.md` aktualisiert +- `docs/SERVICE_CATALOG.md` aktualisiert +- `docs/RESTORE_MATRIX.md` aktualisiert +- `docs/AI_CONTEXT.md` aktualisiert +- `docs/DISASTER_RECOVERY.md` aktualisiert +- `ops/borg-ui/BACKUP_SCOPE.md` aktualisiert +- `ops/hermes-agent/services.json` aktualisiert +- `ops/hermes-agent/services.yaml` aktualisiert +- `ops/policy-checks/last-report.md` aktualisiert + +Verifikation: + +- `rg "/mnt/(cache|disk1|disks|remotes)" -g docker-compose.yml -g compose.yaml -g *.yml -g *.yaml` findet keine aktiven Compose/YAML-Treffer. +- `rg "ops/backrest|backrest.kaleschke|/mnt/user/appdata/backrest|192.168.178.86|MYBOOKLIVEDUO|WD-DUO"` findet nur historische/gewollte Hinweise. +- `python -m json.tool ops/hermes-agent/services.json` ok. +- `ops/hermes-agent/services.yaml` YAML ok. +- `ops/policy-checks/check_repo.ps1` ok: 29 Compose-Dateien, 0 Critical, 4 Warnings. + +## Wichtigste Stop-Regeln + +- Keine Container starten, solange Core-Pfade oder Share-Settings nicht gegen Storage Layout geprueft sind. +- Keine Backrest-/WD-Referenzen reaktivieren. +- Keine Bind-Mounts auf `/mnt/cache`, `/mnt/disk1`, `/mnt/disks`, `/mnt/remotes`. +- Keine Schreibaktionen auf Disk1 ausser bewusst noetig; Disk1 ist noch NTFS. +- Komodo nur gemeinsam und explizit anfassen. +- Erst Daten/Secrets restoren, dann Stacks einzeln starten und smoke-testen. + +## Naechster sinnvoller Schritt + +1. Repo-Aenderungen kurz reviewen und committen/pushen, bevor Komodo wieder produktiv wird. +2. DNS-Basis wiederherstellen: + - AdGuard: `/mnt/user/appdata/adguard/conf` aus Borg oder Image restoren; `work` kann frisch sein. + - Unbound: `/mnt/user/appdata/unbound/config` aus Borg oder Image restoren. + - Danach nur AdGuard + Unbound starten und DNS testen. +3. Danach Traefik + Authelia + Gitea/Vaultwarden in kleinen Schritten. + +## Startprompt fuer neuen Chat + +Lies zuerst `docs/RECOVERY_HANDOFF_2026-05-15.md`, dann `docs/STORAGE_LAYOUT.draft.md`, `docs/RESTORE_MATRIX.md` und nur die Compose-Dateien des naechsten betroffenen Stacks. Fuehre den KalliLab-CORE-Restore token-sparend fort. Nichts erfinden, keine Container starten, wenn etwas gegen Storage Layout verstoesst. Backrest und WD MyBookLive Duo sind entfernt und duerfen nicht wieder ins Setup. diff --git a/docs/REPO_MAP.md b/docs/REPO_MAP.md index eec71b4..d6dfa51 100644 --- a/docs/REPO_MAP.md +++ b/docs/REPO_MAP.md @@ -91,7 +91,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Stack | Compose | Services / Images | Traefik Hosts | Networks | Ports | Abhaengigkeiten | |---|---|---|---|---|---|---| -| Backrest | `ops/backrest/docker-compose.yml` | `backrest` -> `ghcr.io/garethgeorge/backrest:latest@sha256:...` | `backrest.kaleschke.info` | `frontend_net`, `backend_net` | keine | breite Backup-Mounts, SSH/Repo-Creds im Appdata | | Borg UI | `ops/borg-ui/docker-compose.yml` | `borg-ui` -> `ainullcode/borg-ui:latest@sha256:...` | `borg.kaleschke.info` | `frontend_net` | keine | Borg repo, Dump-Scope, Restore-Ziel | | code-server | `ops/code-server/docker-compose.yml` | `code-server` -> `lscr.io/linuxserver/code-server:latest@sha256:...` | `code.kaleschke.info` | `frontend_net` | keine | Passwort-Datei, Workspace-Mounts | | Filebrowser | `ops/filebrowser/docker-compose.yml` | `filebrowser` -> `filebrowser/filebrowser:latest@sha256:...` | `files.kaleschke.info` | `frontend_net` | keine | Appdata-Mount, Admin-UI hinter Authelia | @@ -114,7 +113,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Host | Service | Zugriff | |---|---|---| | `auth.kaleschke.info` | Authelia | Auth provider / bypass fuer eigene Domain | -| `backrest.kaleschke.info` | Backrest | Traefik + Authelia | | `borg.kaleschke.info` | Borg UI | Traefik + Authelia | | `cloud.kaleschke.info` | Nextcloud | Traefik, native App-Auth | | `code.kaleschke.info` | code-server | Traefik + Authelia | @@ -174,7 +172,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Paperless-GPT | `/mnt/user/appdata/paperless-gpt/data`, `/mnt/user/appdata/paperless-gpt/prompts` | | AdGuard | `/mnt/user/appdata/adguard/work`, `/mnt/user/appdata/adguard/conf` | | Tailscale | `/mnt/user/appdata/tailscale` | -| Backrest | `/mnt/user/appdata/backrest/*`, broad `/mnt/user/...` source mounts, remote repo mount | | Borg UI | `/mnt/user/appdata/borg-ui/data`, `/mnt/user/appdata/borg-ui/cache`, `/mnt/user/backups/borg/dumps`, selected restore/source mounts | | code-server | `/mnt/user/appdata/code-server`, `/mnt/user/services/dev`, Homepage production mount | | Filebrowser | `/mnt/user/appdata`, Filebrowser database/config paths | diff --git a/docs/RESTORE_MATRIX.md b/docs/RESTORE_MATRIX.md index 78e54de..9e5472a 100644 --- a/docs/RESTORE_MATRIX.md +++ b/docs/RESTORE_MATRIX.md @@ -58,7 +58,6 @@ Sie ist die fachliche Ergaenzung zu `docs/DISASTER_RECOVERY.md`. | Dienst | Fuehrende Quelle | Datei-Restore | Dump / DB | Secrets / ENV | Abhaengigkeiten | Smoke-Test | |---|---|---|---|---|---|---| | Borg UI | Borg / Share | `/mnt/user/appdata/borg-ui/data` | keine eigene DB | Borg-Repo-Creds in `/data` | Traefik | UI startet, Repo-Verbindung bekannt | -| Backrest | Share | `/mnt/user/appdata/backrest/*` | keine | SSH-/Repo-Creds im Mount | Traefik | UI startet | | Uptime Kuma | Share | `/mnt/user/appdata/uptime-kuma` | keine | keine besonderen Secret-Dateien dokumentiert | Traefik, Authelia | Monitore vorhanden | | Filebrowser | Share | `/mnt/user/appdata/filebrowser` | keine | keine separaten Secret-Dateien dokumentiert | Traefik, Authelia | UI startet | | Glances | Rebuildbar | kein kritischer Zustand | keine | keine | Traefik, Authelia | UI startet | diff --git a/docs/SERVICE_CATALOG.md b/docs/SERVICE_CATALOG.md index fa6b5c2..b249950 100644 --- a/docs/SERVICE_CATALOG.md +++ b/docs/SERVICE_CATALOG.md @@ -59,7 +59,6 @@ Secret-Werte sind nicht enthalten. Es werden nur Secret-Namen, Env-Key-Namen und | `komodo-mongo` | Komodo Datenbank | `ops/komodo/docker-compose.yml` | intern | `komodo_net` | `/mnt/user/appdata/komodo/mongo`, `komodo_mongo_password.txt` | Tier 1, `komodo-mongo.archive.gz` | nein | Dump am 2026-05-04 bestaetigt; nach Major-Upgrades pruefen | | `komodo-periphery` | Komodo Host-Agent | `ops/komodo/docker-compose.yml` | intern Core -> Periphery | Docker socket, `/mnt/user/services`, `frontend_net`, `komodo_net` | `/mnt/user/appdata/komodo/periphery`, `komodo_keys` | Tier 1 | nein | Docker-Socket-Ausnahme; `/mnt/user/services` Mount fuer Stack-Workspaces | | `borg-ui` | Borg Backup-/Restore UI | `ops/borg-ui/docker-compose.yml` | `https://borg.kaleschke.info` | Traefik + Authelia, Borg repo credentials | `/mnt/user/appdata/borg-ui/data`, `/mnt/user/backups/borg/dumps`, Restore-Ziel | Tier 3 / Backup kritisch | ja + Authelia | breite Mounts bewusst; `/local/secrets` im DR-Scope | -| `backrest` | Backup-Admin-Dienst / Legacy-Backup-Ebene | `ops/backrest/docker-compose.yml` | `https://backrest.kaleschke.info` | Traefik + Authelia, Repo/SSH-Mounts | `/mnt/user/appdata/backrest/*`, broad source mounts | Tier 3 | ja + Authelia | breite Mounts bewusst dokumentieren | | `uptime-kuma` | Monitoring / Uptime Checks | `ops/uptime-kuma/docker-compose.yml` | `https://uptime.kaleschke.info` | Traefik + Authelia | `/mnt/user/appdata/uptime-kuma` | Tier 3 | ja + Authelia | Monitore nach Restore pruefen | | `glances` | System-/Container-Monitoring | `ops/glances/docker-compose.yml` | `https://glances.kaleschke.info` | Docker socket, rootfs, Traefik + Authelia | kein kritischer Zustand | Tier 3, rebuildbar | ja + Authelia | Rootfs und Docker-Socket Mounts | | `scrutiny` | Laufwerks-/SMART-Monitoring | `ops/scrutiny/docker-compose.yml` | `https://scrutiny.kaleschke.info` | Device mounts, Traefik + Authelia | `/mnt/user/appdata/scrutiny/config`, `/mnt/user/appdata/scrutiny/influxdb` | Tier 3, Metrics nicht kritisch | ja + Authelia | `privileged: true` dokumentierte Ausnahme | @@ -82,6 +81,6 @@ Secret-Werte sind nicht enthalten. Es werden nur Secret-Namen, Env-Key-Namen und ## Bekannte offene Fragen - Authelia Repo-Baseline, Host-Config und Compose-Middlewares sollten bei Auth-Aenderungen explizit abgeglichen werden. -- Filebrowser- und Backrest-Mounts sind breit und bewusst, aber bei zukuenftigen Hardening-Sprints Kandidaten. +- Filebrowser-Mounts sind breit und bewusst, aber bei zukuenftigen Hardening-Sprints Kandidaten. - Scrutiny bleibt privilegiert; nur mit klarer Begruendung aendern. - BentoPDF kann je nach Live-Stand vorbereitet statt produktiv sein. Hermes Dashboard ist produktiv unter `hermes.kaleschke.info`, aber noch nicht vollstaendig in Restore Matrix / DR Bootstrap eingeordnet. diff --git a/ops/backrest/docker-compose.yml b/ops/backrest/docker-compose.yml deleted file mode 100644 index eb9ba88..0000000 --- a/ops/backrest/docker-compose.yml +++ /dev/null @@ -1,48 +0,0 @@ -services: - backrest: - image: ghcr.io/garethgeorge/backrest:latest@sha256:f4d34bd6fa985d13bdb6c01c5d8727e07708899afa9567d800808357d77b9fb0 - container_name: backrest - restart: unless-stopped - environment: - - TZ=Europe/Berlin - - BACKREST_DATA=/data - - BACKREST_CONFIG=/config/config.json - - XDG_CACHE_HOME=/cache - - TMPDIR=/tmp - - volumes: - - /mnt/user/appdata/backrest/data:/data - - /mnt/user/appdata/backrest/config:/config - - /mnt/user/appdata/backrest/cache:/cache - - /mnt/user/appdata/backrest/tmp:/tmp - - /mnt/user/appdata/backrest/ssh:/root/.ssh - - /mnt/user/appdata:/source/appdata:ro - - /mnt/remotes/192.168.178.86/Public/backrest-repos:/repos/wd - - /mnt/user/documents:/source/user/documents:ro - - /mnt/user/finance:/source/user/finance:ro - - /mnt/user/photos:/source/user/photos:ro - - /mnt/user/services:/source/user/services:ro - - dns: - - 1.1.1.1 - - 8.8.8.8 - - networks: - - backend_net - - frontend_net - - labels: - - traefik.enable=true - - traefik.docker.network=frontend_net - - traefik.http.routers.backrest.rule=Host(`backrest.kaleschke.info`) - - traefik.http.routers.backrest.entrypoints=websecure - - traefik.http.routers.backrest.tls=true - - traefik.http.routers.backrest.tls.certresolver=le - - traefik.http.routers.backrest.middlewares=authelia@file,secure-headers@file - - traefik.http.services.backrest.loadbalancer.server.port=9898 - -networks: - backend_net: - external: true - frontend_net: - external: true diff --git a/ops/borg-ui/BACKUP_SCOPE.md b/ops/borg-ui/BACKUP_SCOPE.md index 1770015..2edb082 100644 --- a/ops/borg-ui/BACKUP_SCOPE.md +++ b/ops/borg-ui/BACKUP_SCOPE.md @@ -45,7 +45,6 @@ The inclusion of `/local/secrets` is intentional: Borg is expected to cover disa | Grafana | file data | `/local/appdata/grafana` | | InfluxDB 3 Core | file data | `/local/appdata/influxdb3/data`, `/local/appdata/influxdb3/plugins` | | Hermes Agent | file data + SSH key | `/local/appdata/hermes-agent/data`, `/local/secrets/hermes_runner_id_ed25519` | -| Backrest | file data | `/local/appdata/backrest/data`, `/local/appdata/backrest/config` | | BentoPDF | rebuildable | no critical persistence in compose | ## Open Decisions and Coverage Gaps diff --git a/ops/hermes-agent/services.json b/ops/hermes-agent/services.json index 76aeef1..03f3cd9 100644 --- a/ops/hermes-agent/services.json +++ b/ops/hermes-agent/services.json @@ -408,18 +408,6 @@ "first_check": "Borg-Repo-Credentials vorhanden? Backup-Mounts erreichbar? Traefik healthy?", "notes": "breite Mounts bewusst dokumentiert; /local/secrets im DR-Scope" }, - "backrest": { - "description": "Backup-Admin-Dienst", - "tier": 3, - "category": "ops", - "container_name": "backrest", - "dependencies": ["traefik"], - "url": "https://backrest.kaleschke.info", - "dump_file": null, - "data_paths": ["/mnt/user/appdata/backrest"], - "first_check": "Repo/SSH-Mounts erreichbar? Traefik healthy?", - "notes": "breite Mounts bewusst dokumentiert" - }, "hermes-gateway": { "description": "Hermes Agent Gateway / AI Ops Assistant", "tier": 3, diff --git a/ops/hermes-agent/services.yaml b/ops/hermes-agent/services.yaml index b36cef5..692dea0 100644 --- a/ops/hermes-agent/services.yaml +++ b/ops/hermes-agent/services.yaml @@ -495,20 +495,6 @@ services: first_check: "Borg-Repo-Credentials vorhanden? Backup-Mounts erreichbar? Traefik healthy?" notes: "breite Mounts bewusst dokumentiert; /local/secrets im DR-Scope" - backrest: - description: Backup-Admin-Dienst (Legacy-Backup-Ebene) - tier: 3 - category: ops - container_name: backrest - dependencies: - - traefik - url: https://backrest.kaleschke.info - dump_file: null - data_paths: - - /mnt/user/appdata/backrest - first_check: "Repo/SSH-Mounts erreichbar? Traefik healthy?" - notes: "breite Mounts bewusst dokumentiert" - hermes-gateway: description: Hermes Agent Gateway / AI Ops Assistant tier: 3 diff --git a/ops/policy-checks/last-report.md b/ops/policy-checks/last-report.md index 2a6ef5d..22e5db1 100644 --- a/ops/policy-checks/last-report.md +++ b/ops/policy-checks/last-report.md @@ -1,9 +1,9 @@ # Policy Check Report ## Summary -- Compose files checked: 30 +- Compose files checked: 29 - Critical findings: 0 -- Warnings: 5 +- Warnings: 4 - Info findings: 9 ## Critical @@ -11,7 +11,6 @@ ## Warnings - [SEC001] infra\ddns-updater\docker-compose.yml :: ddns-updater: Missing security_opt no-new-privileges:true. -- [SEC001] ops\backrest\docker-compose.yml :: backrest: Missing security_opt no-new-privileges:true. - [USER001] ops\grafana-influxdb\docker-compose.yml :: grafana: Runs as user 0. Documented exception, keep visible for hardening. - [USER001] ops\grafana-influxdb\docker-compose.yml :: influxdb3-core: Runs as user 0. Documented exception, keep visible for hardening. - [SEC001] ops\scrutiny\docker-compose.yml :: scrutiny: Missing security_opt no-new-privileges:true.