From 366c5ca7a744a5592352754df4a61ab874252f82 Mon Sep 17 00:00:00 2001 From: Effi Date: Sun, 11 Oct 2026 14:13:07 +0200 Subject: [PATCH] =?UTF-8?q?Phase=204=20cl=C3=B4ture=20:=20PHASE4-RECOLLEME?= =?UTF-8?q?NT=20=C2=A70=20consolid=C3=A9=20(briques/versions/incidents/.25?= =?UTF-8?q?),=20README=20(07e=20+=20edge=20+=20jellyfin=20T4.5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g9-migration/PHASE4-RECOLLEMENT.md | 45 ++++++++++++++++++++++++++++++ g9-migration/README.md | 6 ++-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/g9-migration/PHASE4-RECOLLEMENT.md b/g9-migration/PHASE4-RECOLLEMENT.md index 2fe1fde..68d5161 100644 --- a/g9-migration/PHASE4-RECOLLEMENT.md +++ b/g9-migration/PHASE4-RECOLLEMENT.md @@ -1,5 +1,50 @@ # Phase 4 — récupération du thread supprimé +> **Ce fichier a deux objets** : §0 = état consolidé de la Phase 4 (briques, versions, +> incidents, .25) ; §1-5 = rapport de récupération du thread de session supprimé (07:20 UTC). + +## 0. État consolidé de la Phase 4 (2026-10-11) + +### 0.1 Briques déployées sur G9 (.24) et versions épinglées + +| Brique | Image épinglée | État | Watchtower | +|---|---|---|---| +| Vaultwarden (T4.1) | `vaultwarden/server:1.37.4` | healthy, coffre importé (953 ciphers, 2FA), ADMIN_TOKEN argon2 | false | +| Nextcloud (T4.2) | `nextcloud:35.0.1` (35.0.1.1 = version source) | healthy, `occ status` installed, 8 users, 1522 fichiers (scan 0 erreur), 67 apps activées = liste source | false | +| — MariaDB | `mariadb:10.11` (utf8mb4_bin, import en une transaction) | up | false | +| — Redis | `redis:7` | up | false | +| — Collabora (remplace OnlyOffice .25) | `collabora/code:26.04.5.1.1` | healthy, discovery 200, wopi_url posé | false | +| Gitea (T4.4) | `gitea/gitea:1.27.3` + `postgres:16` | healthy, 15 repos / 4 users importés, push-create actif | false | +| Jellyfin (T4.5) | `jellyfin/jellyfin:10.9` (10.9.11) | healthy, média par RÉFÉRENCE (`/mnt/usb-media` → `/media:ro`, aucune copie), 1 médiathèque = `/media/films`, Items Movie = 1 | false | +| edge (T4.6) | `caddy:2` (digest `f2a1290d…`) | healthy, HTTPS interne (CA interne), 443 seul port exposé WAN | **true** (stateless) | +| Watchtower (T4.7) | `nickfedor/watchtower@sha256:45b54f6d…` | healthy, scope label-enable : dry-run `scanned=2` (edge + watchtower), 14 stateful ignorés | true | +| PhotoPrism (T4.3) | — | **non déployée** : `07d-migrate-photoprism.sh` écrit/testé, exécution reportée (coût = copie 530 Go ; média servi par Jellyfin) | — | + +### 0.2 Incidents rencontrés et correctifs (détail = journal.md) + +1. **Collabora TLS** : l'image 26.04 sert **TLS par défaut** (discovery http = 000) ; env `extra_features`/`O:ssl.enable` non appliqués → fix `command: ["--o:ssl.enable=false"]` (CMD appendu à l'entrypoint). +2. **Collabora healthcheck** : image **minimale** (ni `sh` ni `curl`) → `CMD curl` = unhealthy permanent → healthcheck retiré du compose (sonde externe `curl :9980/hosting/discovery`). +3. **Jellyfin auth** : le wizard laisse `Users.EnableLocalPassword=0` → « Invalid username or password » ; fix = UPDATE sqlite + restart (hash PBKDF2-SHA512 vérifié == secret) ; API = en-tête combiné **X-Emby-Authorization** requis (sinon 400 « Value cannot be null »). +4. **Caddy** : snippet `(name)` inutilisable comme adresse (« ambiguous site definition ») → `import` ; `request_id` n'est pas un directive site (validate KO) ; Caddy logue les en-têtes **reçus du client**, pas ceux envoyés en amont. +5. **Nextcloud / edge** : le dépôt d'un second `*.config.php` monté n'a pas été retenu (merge `array_replace_recursive` + config.php déjà porteur des clés) → résolu en écrivant **`g9-double-run.config.php` = source de vérité du kit**, monté `:ro` : `overwritehost=cloud.folzocorp.fr`, `overwriteprotocol=https`, `trusted_proxies=[192.168.1.0/24, 172.16.0.0/12]`, `trusted_domains += cloud.folzocorp.fr`. +6. **Watchtower** : fork nickfedor = `SCHEDULE` XOR `POLL`, pas de `--once` (⇒ `-R`) ; notification alignée `generic+http://n8n:5678/webhook/watchtower` (webhook testé **200** depuis le réseau Docker ; l'edge n'écoute que 443). + +### 0.3 Alignement proxy (TRUSTED_PROXIES) + +- Nextcloud : `trusted_proxies = [192.168.1.0/24, 172.16.0.0/12]` (bridge Docker de l'edge) + `overwrite*` https/host — **preuve côté app** : redirect `https://cloud.folzocorp.fr/` → `Location: https://cloud.folzocorp.fr/index.php/login`. +- Vaultwarden : `TRUSTED_HOSTS=192.168.1.0/24,172.16.0.0/12` (même réseau de confiance). +- Caddy : `X-Forwarded-Proto/Host/Port/For` posés par défaut sur tous les `reverse_proxy`. +- ufw : **443/tcp = seul port exposé WAN** (+ 80 redirect ACME) ; ports briques (3000/2222/3100/5678/5984/8008/8009/8080/8081/8096/9980) = `ALLOW IN 192.168.1.0/24` + default deny incoming. + +### 0.4 État du xpenology .25 (double-run G4, rien de destructif) + +- `nextcloud_app`, `nextcloud_db`, `nextcloud_redis`, `vaultwarden-server-1`, `gitea` **relancés et up** après les exports ; dumps/transitaires supprimés sur .25, pilot et G9. +- Aucun partage, aucune donnée, aucun conteneur .25 supprimé ; transports .25→pilot = `ssh 'sudo tar cz'`/`mysqldump` en lecture seule (sshd DSM refuse `rsync --server` et scp). + +--- + +# Rapport de récupération (thread supprimé) + **Session** : `e67f1166-d70c-42cd-a295-79513757233e` (tâche Kanban `8e3e7f073a6806cd` — PHASE 4) **Suppression** : 2026-10-11 07:20:04 UTC (trace systemd : `Runner error FOREIGN KEY constraint failed, sessionId=e67f1166…`) **Méthode** : suppression = `DELETE` sur `sessions` + cascade sur `events`. Les pages SQLite libérées gardent leur contenu tant qu'elles ne sont pas réallouées → caravage des pages libres de `sessions.db` (snapshot), reconstruction des enregistrements. diff --git a/g9-migration/README.md b/g9-migration/README.md index 9ad3493..61411fa 100644 --- a/g9-migration/README.md +++ b/g9-migration/README.md @@ -59,6 +59,7 @@ g9-migration/ │ ├── 07b-migrate-vaultwarden.sh ← T4.1 : Vaultwarden (coffre + 2FA + ADMIN_TOKEN) │ ├── 07c-migrate-nextcloud.sh ← T4.2 : Nextcloud + MariaDB + Collabora │ ├── 07d-migrate-photoprism.sh ← T4.3 : PhotoPrism (copie 530 Go + indexation) +│ ├── 07e-deploy-edge.sh ← T4.6 : edge Caddy (validate → up → ufw 443 → vérifs HTTPS/SNI) │ ├── restic-notify.sh ← alerte Matrix des jobs restic (posée par 06) │ └── 08-decommission.sh ← T6.4 : décommissionnement xpenology [DESTRUCTIF] ├── compose/ ← docker-compose.yml versionnés (stockés aussi dans Gitea) @@ -67,7 +68,8 @@ g9-migration/ │ ├── photoprism/ ← T4.3 │ ├── gitea/ ← T4.4 │ ├── n8n/ ← T4.5 -│ ├── jellyfin/ ← T6.2 +│ ├── jellyfin/ ← T4.5 (média par référence, /media:ro) +│ ├── edge/ ← T4.6 : Caddy (Caddyfile versionné = config) │ └── watchtower/ ← S11.4 : Watchtower sélectif └── configs/ ├── fail2ban.local.conf ← config fail2ban (T2.1) @@ -81,7 +83,7 @@ g9-migration/ | 1 | (xpenology) exclure stateful de Watchtower + inventaire | G4 | | 2 | `01-hardening.sh` → `02-data.sh` → `03-docker.sh` → `03b-secrets.sh` → `04-smb.sh` → `05-beszel.sh` | — | | 3 | `06-restic-backup.sh` (backup + test restauration) | G2 | -| 4 | **par brique, dans l'ordre** — **après** `03b-secrets.sh` : `07b-migrate-vaultwarden.sh` (T4.1) → `07c-migrate-nextcloud.sh` (T4.2) → `07d-migrate-photoprism.sh` (T4.3) → `07a-migrate-gitea.sh` (T4.4) → n8n (T4.5) → DNS/TLS (T4.6). `07-migrate-stateful.sh` = script **générique rsync**, inopérant sur le DSM (sshd refuse `rsync --server`/scp) ; transport réel des 07a–07d = **tar sur SSH** | G4 | +| 4 | **par brique, dans l'ordre** — **après** `03b-secrets.sh` : `07b-migrate-vaultwarden.sh` (T4.1) → `07c-migrate-nextcloud.sh` (T4.2) → `07d-migrate-photoprism.sh` (T4.3, **reporté**) → `07a-migrate-gitea.sh` (T4.4) → Jellyfin (T4.5, frais) → `07e-deploy-edge.sh` (T4.6, Caddy TLS interne) → Watchtower (T4.7, scope stateless). `07-migrate-stateful.sh` = script **générique rsync**, inopérant sur le DSM (sshd refuse `rsync --server`/scp) ; transport réel des 07a–07d = **tar sur SSH** | G4 | | 5 | restic 3-2-1 complet (G9 + PC IA → Freebox → 218play) | G2 | | 6 | `06b-usb-media.sh` (T6.1) → Jellyfin (T6.2) → IP .24→.25 → `08-decommission.sh` | G3, G4, G5 | | 7 | (G7) wipe DSM + Ubuntu neuf + boot test | G3, G10 |