Phase 4 clôture : PHASE4-RECOLLEMENT §0 consolidé (briques/versions/incidents/.25), README (07e + edge + jellyfin T4.5)
This commit is contained in:
@@ -1,5 +1,50 @@
|
|||||||
# Phase 4 — récupération du thread supprimé
|
# 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)
|
**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…`)
|
**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.
|
**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.
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ g9-migration/
|
|||||||
│ ├── 07b-migrate-vaultwarden.sh ← T4.1 : Vaultwarden (coffre + 2FA + ADMIN_TOKEN)
|
│ ├── 07b-migrate-vaultwarden.sh ← T4.1 : Vaultwarden (coffre + 2FA + ADMIN_TOKEN)
|
||||||
│ ├── 07c-migrate-nextcloud.sh ← T4.2 : Nextcloud + MariaDB + Collabora
|
│ ├── 07c-migrate-nextcloud.sh ← T4.2 : Nextcloud + MariaDB + Collabora
|
||||||
│ ├── 07d-migrate-photoprism.sh ← T4.3 : PhotoPrism (copie 530 Go + indexation)
|
│ ├── 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)
|
│ ├── restic-notify.sh ← alerte Matrix des jobs restic (posée par 06)
|
||||||
│ └── 08-decommission.sh ← T6.4 : décommissionnement xpenology [DESTRUCTIF]
|
│ └── 08-decommission.sh ← T6.4 : décommissionnement xpenology [DESTRUCTIF]
|
||||||
├── compose/ ← docker-compose.yml versionnés (stockés aussi dans Gitea)
|
├── compose/ ← docker-compose.yml versionnés (stockés aussi dans Gitea)
|
||||||
@@ -67,7 +68,8 @@ g9-migration/
|
|||||||
│ ├── photoprism/ ← T4.3
|
│ ├── photoprism/ ← T4.3
|
||||||
│ ├── gitea/ ← T4.4
|
│ ├── gitea/ ← T4.4
|
||||||
│ ├── n8n/ ← T4.5
|
│ ├── 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
|
│ └── watchtower/ ← S11.4 : Watchtower sélectif
|
||||||
└── configs/
|
└── configs/
|
||||||
├── fail2ban.local.conf ← config fail2ban (T2.1)
|
├── fail2ban.local.conf ← config fail2ban (T2.1)
|
||||||
@@ -81,7 +83,7 @@ g9-migration/
|
|||||||
| 1 | (xpenology) exclure stateful de Watchtower + inventaire | G4 |
|
| 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` | — |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 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 |
|
| 7 | (G7) wipe DSM + Ubuntu neuf + boot test | G3, G10 |
|
||||||
|
|||||||
Reference in New Issue
Block a user