Ce plan couvre 9 phases sur ~11 semaines. L'approche est incrémentale et chaque phase construit sur la précédente. Les nouvelles exigences (14 revampée : mises à jour par vagues + GPU + NUC tampon + watchdog, et 17 : documentation auto-générée par IA) sont intégrées à leur place logique dans l'ordre des dépendances.
Principe fondamental : ne jamais déployer un système de mise à jour automatique (exigence 14) avant d'avoir le monitoring (phase 2), les alertes (phase 3), et les sauvegardes (phase 7) en place et validés.
1. Phase 1 — Fondations (Ansible + SSH + GitHub)
1.1 Créer la structure du projet Ansible et le dépôt Git
Arborescence Ansible : inventory/, playbooks/, roles/, group_vars/, scripts/
Fichier ansible.cfg (timeout SSH, retry, forks)
Connecter au repo GitHub privé
Exigences: 13.1, 12.1
1.2 Créer l'inventaire Ansible complet
inventory/hosts.yml avec groupes : proxmox_hosts, backup_servers, lxc, vms, storage, network
group_vars/all.yml avec variables globales
Documenter chaque machine avec IP, rôle, dépendances, vague de mise à jour (14.A)
Exigences: 1.1, 1.4, 8.3, 14.A.1
1.3 Écrire le rôle Ansible ssh-keys
Déploiement clé publique, désactivation mot de passe SSH, MaxAuthTries 3
Handler restart sshd
Exigences: 3.1, 3.3
1.4 Écrire le playbook bootstrap 00-bootstrap.yml
Appliquer ssh-keys sur toutes les machines
Retry (3 tentatives × 2 min), machines injoignables → statut "en attente"
Exigences: 3.1, 3.2, 3.4, 3.6
1.5 Écrire le playbook de base 01-base.yml
NTP, DNS, locale, timezone, packages de base (nano, curl, htop, git, jq)
Exigences: 1.1
1.6 Créer le hook pour nouvelles machines
Script new-machine-hook.sh + playbook 04-new-machine.yml
Registre SSH (YAML) avec statut par machine
Exigences: 3.2, 3.5, 3.6
1.7 Pousser vers GitHub
.gitignore (vault passwords, fichiers temp)
Premier commit structuré + hooks Git pour auto-commit
Exigences: 13.1, 13.2
[x]* 1.8 Valider Phase 1
Dry-run, test SSH par clé, vérifier mot de passe désactivé, commit GitHub OK
Exigences: 3.1, 3.3, 13.1
2. Phase 2 — Monitoring (Prometheus + Grafana + Uptime Kuma)
2.1 Déployer node-exporter sur toutes les machines
Rôle Ansible node-exporter + playbook 02-monitoring.yml
Exigences: 4.1
2.2 Déployer gpu-exporter sur le LXC LLM
nvidia_gpu_exporter port 9835, conditionné à gpu_enabled: true
Exigences: 4.6
2.3 Installer Prometheus + Alertmanager
Scrape configs pour tous les groupes, rétention 30j
Alertmanager avec webhook vers N8N
Exigences: 4.1, 4.5, 4.6
2.4 Créer les règles d'alerte Prometheus
HighCPU, HighMemory, DiskSpaceLow, GPUHighTemp, TargetDown
Exigences: 4.7, 5.2, 5.3
2.5 Installer Grafana + dashboards
Datasource Prometheus, dashboards JSON (vue d'ensemble, GPU, par machine)
Exigences: 4.4
2.6 Installer Uptime Kuma
Monitors HTTP/TCP/Ping pour tous les services (60s)
Webhooks vers N8N
Exigences: 4.2, 4.3, 11.6
[x]* 2.7 Valider Phase 2
Métriques exposées, Prometheus scrape OK, Uptime Kuma détecte < 120s
Exigences: 4.1, 4.2, 4.3
3. Phase 3 — Mail et Alertes (HestiaCP + N8N + NetBox)
3.1 Configurer DNS HestiaCP (MX, SPF, DKIM, DMARC)
Créer boîtes mail : alertes@, acces@, rapports@, perso@
Exigences: 11.1, 11.2, 11.3
3.2 Configurer SMTP dans N8N + relay de secours
Credentials SMTP (mail.scijoly.fr:587 , STARTTLS)
Gmail App Password en fallback
Exigences: 11.1, 11.5
3.3 Créer le workflow N8N d'alerte email
Webhook Alertmanager + Uptime Kuma → anti-spam 15min → format → envoi
Retry 3× + email de résolution
Exigences: 5.1, 5.5, 5.6, 5.7, 5.8
3.4 Configurer Alertmanager → N8N webhooks
Routes par sévérité, mapping labels
Exigences: 5.1, 5.2, 5.3
3.5 Configurer le chemin d'alerte secondaire (indépendant de pve-main)
Script sur pve-nuc : relay SMTP externe (Gmail) + webhook push (Ntfy/Pushover/Telegram)
Tester que l'alerte part SANS dépendre d'aucune VM de pve-main
Exigences: 14.I.36, 5.8
3.6 Installer NetBox + importer inventaire
API REST, custom fields (statut sauvegarde, dépendances)
Exigences: 1.1, 2.1, 2.2, 2.4
3.7 Créer le workflow N8N de mise à jour inventaire
Webhook Proxmox → Ansible bootstrap → NetBox update → email
Exigences: 1.2, 1.5, 2.3
[ ]* 3.8 Valider Phase 3
Email test (pas en spam), SPF/DKIM/DMARC score > 8/10
Alerte Prometheus → email reçu < 5 min
Chemin secondaire (NUC) → alerte reçue indépendamment
Exigences: 5.1, 5.6, 11.2, 14.I.36
4. Phase 3.5 — Routeur IA + Notifications Intelligentes + Validation (Exigence 19)
4.1 Déployer LiteLLM sur infra-mgmt (Docker)
Docker compose avec SQLite, port 4000, variables d'environnement pour clés API
Config YAML : modèles local (Ollama), gratuit (Groq, Gemini Flash), payant (OpenRouter/Claude)
Test endpoint /health et /chat/completions avec modèle local
Exigences: 19.A.1, 19.A.2
4.2 Configurer le routage intelligent LiteLLM
Fallbacks : local → Groq → Claude
Budget cap 20€/mois avec alertes 50%/80%/100%
Règle de confidentialité : requêtes avec données sensibles → local uniquement
Test : requête simple → local, requête complexe → fallback Groq, rate limit → Claude
Exigences: 19.A.2, 19.A.3, 19.A.4
4.3 Configurer les clés API gratuites (Groq + Google AI Studio + OpenRouter)
Créer comptes et récupérer clés API
Stocker dans Ansible Vault → déployer en variables d'environnement Docker
Tester chaque backend individuellement via LiteLLM
Exigences: 19.A.2, 19.A.5
4.4 Exposer métriques LiteLLM vers Prometheus + dashboard Grafana
Endpoint /metrics ou exporter custom
Dashboard "AI Router" : requêtes par niveau, coût cumulé, latence, erreurs
Alertes : erreurs > 20%, latence > 30s, LLM local injoignable
Exigences: 19.B.8, 19.B.9
4.5 Créer le workflow N8N "Alertes Intelligentes" (Alertmanager → IA → email enrichi)
Webhook Alertmanager reçu par N8N
Appel LiteLLM (local/qwen2.5) pour classifier : "action requise" / "information" / "bruit"
Si "action requise" → email enrichi immédiat (résumé IA + contexte + recommandation)
Si "information" → stocké pour résumé quotidien
Si "bruit" → journalisé, ignoré
Exigences: 6.B.8, 6.B.9, 19.A.1
4.6 Créer le système de validation par email (webhooks interactifs)
Workflow N8N "send-validation" : génère token UUID, stocke en BDD, envoie email HTML
Template email avec boutons cliquables (liens GET vers webhook N8N)
Workflow N8N "receive-validation" : vérifie token, exécute action, confirme par email
Gestion expiration (cron N8N toutes les 15 min nettoie les tokens expirés)
Exigences: 19.C.10, 19.C.11, 19.C.12, 19.C.13, 19.C.14
4.7 Intégrer la validation dans les workflows existants
Workflow "Service Restart" : si service critique → validation avant restart
Workflow futur "Auto-Update" : validation pour packages à risque
Classification des actions (Informationnel/Standard/Critique)
Exigences: 19.C.15, 19.D.16, 19.D.17, 19.D.18
4.8 Créer le workflow "Résumé Quotidien IA" (cron 06h)
Agrège : alertes "information" des 24h, état de l'infra (Prometheus API), tâches IA nocturnes
Appel LiteLLM pour rédiger un résumé lisible
Envoi email à lpascalin@scijoly.fr
Exigences: 6.B.10
4.9 Créer le rapport hebdomadaire de consommation IA
Cron dimanche soir : requêtes par niveau, coût total, économie estimée
Comparaison "si tout avait été Claude" vs coût réel
Exigences: 19.B.7, 6.6
4.10 Migrer les workflows N8N existants vers LiteLLM
Email Sorter IA : remplacer appel direct Ollama par LiteLLM endpoint
Mail Assistant : idem
Tout futur workflow utilise LiteLLM comme point d'entrée unique
Exigences: 19.A.1
[ ]* 4.11 Valider Phase 3.5
Test routage : requête sensible → reste local, requête complexe → Groq/Claude
Test budget : simuler dépassement → alerte + blocage Niveau 3
Test validation email : envoyer action → cliquer bouton → action exécutée
Test expiration : ne pas cliquer → action annulée après timeout
Test résumé quotidien : recevoir email à 06h avec contenu pertinent
Dashboard Grafana : métriques affichées correctement
Exigences: 19 (toutes sections)
5. Checkpoint 1 — Fondations + Monitoring + Alertes + Routeur IA validés
Vérifier que le socle fonctionne avant d'aller plus loin.
5b. Phase 3.7 — Deep Anomaly Detection (supervision avancée)
Design: docs/design-deep-anomaly-detection.md
Spec: .kiro/specs/deep-anomaly-detection/
5b.1 Déployer collecteur Linux + moteur sur pve-main seul (Phase 1)
Script anomaly-collector.sh (bash, boucle 5s, systemd)
anomaly-engine.py (daemon Python, spike + absence detection)
Service systemd anomaly-engine sur infra-mgmt (port 8895)
Stockage /data/anomaly/ sur ZFS
REQ: 1, 3
5b.2 Déployer collecteurs sur toutes les machines Linux (Phase 2)
Playbook Ansible 07-anomaly-detection.yml (tag: linux)
Template Jinja2 avec ping_targets par machine
Crons rsync vers infra-mgmt
REQ: 1, 9
5b.3 Centralisation des logs applicatifs (Phase 3)
Collecte journald prio 0-4, Docker logs erreurs
Pattern matching (crash loops, retry storms, OOM)
Rétention 30 jours puis purge
REQ: 5
5b.4 Collecte Windows — toutes les machines (Phase 4)
windows_exporter (MSI) sur PC fixe + VMs Windows
Script PowerShell pings + Windows Event Log
Intégration Prometheus (scrape Windows targets)
REQ: 2
5b.5 Corrélation + drift + scoring santé (Phase 5)
Corrélation multi-sources (fenêtre ±30s)
Drift detection (régression linéaire 24h-7j)
Scoring par domaine (réseau/DNS/stockage/services/puissance/architecture)
REQ: 4, 7
5b.6 Intégration alertes + digest + rapport hebdo IA (Phase 6)
3 niveaux alertes (ntfy push, digest, rapport hebdo)
Section anomalies dans daily-digest.py
Rapport hebdo LLM avec recommandations priorisées
REQ: 6, 11
5b.7 Réseau avancé — SNMP Cisco + API pfSense + tests nocturnes (Phase 7)
SNMP switch Cisco (erreurs par port, link status)
API pfSense polling (gateway latency, state table)
Tests nocturnes (iperf, DNS bulk, traceroute, MTU)
REQ: 10
5b.8 Alertes Prometheus avancées + dashboard Grafana (Phase 8)
Règles anomaly-alerts.yml (flap, disk latency, memory leak, throttling)
Dashboard "Infrastructure Health" (timeline, heatmap, scores)
REQ: 12, 13
5b.9 SMART + nettoyage auto + base incidents (Phase 9)
smartctl_exporter sur pve-main + pve-nuc
Nettoyage automatique (90j brut → agrégé → purge)
Base de connaissance incidents (SQLite)
REQ: 8, 14
6. Phase 4 — Réseau (pfSense VLANs + Segmentation)
5.1 Configurer les VLANs dans pfSense
4 VLANs : Gestion (10), Services (20), IoT (30), Invités (40)
Exigences: 8.1
5.2 Installer le package pfSense API
Auth token, stocker dans Ansible Vault, test GET /api/v1/firewall/rule
Exigences: 9.3
5.3 Réservations DHCP + migration IP
Mettre à jour Ansible, Prometheus, NetBox avec nouvelles IPs
Exigences: 8.3, 8.5
5.4 Règles pare-feu inter-VLAN
Deny all par défaut + exceptions explicites
Exigences: 8.1, 8.7
5.5 Documenter la config réseau
Doc VLANs, plan IP, diagramme Mermaid
Exigences: 8.2, 8.5, 8.6
[ ]* 5.6 Valider Phase 4
Tests isolation inter-VLAN, connectivité maintenue, API pfSense OK
Exigences: 8.1, 8.7
6. Phase 5 — Automatisation Intelligente (N8N + Ollama + Claude)
6.1 Configurer Ollama + modèle LLM
GPU passthrough vérifié, modèle téléchargé, API testée
Exigences: 6.1
6.2 Créer le workflow de routage LLM (local → Claude)
Timeout 60s → escalade Claude, circuit-breaker 10/jour, file d'attente
Exigences: 6.1, 6.2, 6.3, 6.7
6.3 Workflows de maintenance quotidienne
Backup Check (7h), Log Cleanup (3h), Restart services down
Exigences: 6.4, 7.1, 7.2
6.4 Workflow rapport hebdomadaire
6.5 Intégration Home Assistant → N8N
Webhook HA → N8N < 30s
Exigences: 6.5
6.6 Workflow tri des emails
IMAP 5min → Ollama classifie → déplace dans dossiers IMAP
Exigences: 10.1, 10.2, 10.4, 10.7
6.7 Workflow extraction factures
PDF → LLM fournisseur/montant → renommer → stocker → registre
Exigences: 10.3, 10.5, 10.6
6.8 Workflow rapport mensuel factures
[ ]* 6.9 Valider Phase 5
Ollama répond < 60s, escalade Claude OK, facture extraite correctement
Exigences: 6.1, 6.2, 10.3
7. Checkpoint 2 — Monitoring + Alertes + Réseau + Automatisation validés
Vérifier que tout est stable avant les phases critiques (DR, updates).
8. Phase 6 — Disaster Recovery et Sauvegardes (PBS + NUC + Git)
⚠️ Cette phase DOIT être terminée AVANT la Phase 7 (mises à jour auto).
On ne peut pas automatiser des updates sans filet de sécurité validé.
8.1 Configurer la synchronisation PBS → NUC (PBS secondaire)
Sync quotidien VMs critiques vers NUC
Vérification intégrité hebdomadaire
Exigences: 7.4, 7.7, 12.5
8.2 Créer le workflow N8N d'export hebdomadaire des configs
Backup XML pfSense, YAML AdGuard, JSON N8N, snapshot NetBox → Git push
Exigences: 12.2, 12.5
8.3 Configurer le backup du disque boot Proxmox (dd → NAS)
Script : dd if=/dev/sdc | gzip | ssh synology "cat > /backups/proxmox-os/pve-main-boot-$(date).img.gz"
Rotation 3 images, déclenché manuellement ou avant update kernel/NVIDIA
Tester la restauration sur un disque de test (vérifier que l'image est bootable)
Exigences: 14.I.33
8.4 Préparer la clé USB Clonezilla de restauration
Clonezilla Live sur clé USB branchée en permanence sur pve-main
Pré-configurer : restauration depuis NFS Synology (non-interactive si possible)
Documenter la procédure : "Boot USB → sélectionner restore → attendre"
Vérifier ordre de boot BIOS (SSD → USB → PXE)
Exigences: 14.I.34, 14.I.38
8.5 Configurer le watchdog sur pve-nuc
Script systemd/cron sur le NUC : ping + check API Proxmox pve-main toutes les 60s
Si pve-main down > 10 min : séquence WoL → failover VMs → alerte secondaire
Indépendant de N8N/Ansible (script bash autonome sur le NUC)
Exigences: 14.I.32, 14.I.35
8.6 Configurer le failover automatique des VMs critiques sur NUC
Script sur NUC : restore depuis PBS les VMs critiques (NPM, HestiaCP, AdGuard)
Vérifier que les VMs démarrent et sont fonctionnelles sur le NUC
Script de re-migration (NUC → pve-main) une fois l'hyperviseur restauré
Exigences: 14.I.35, 14.D.13, 14.D.15
8.7 Documenter la procédure de reprise (Runbook DR)
docs/runbooks/disaster-recovery.md : pas-à-pas complet
RTO 4h critiques, 8h complet, max 5 commandes manuelles
Exigences: 12.3, 12.4
8.8 Créer l'alerte indisponibilité prolongée
Si Proxmox principal down > 30 min → alerte + instructions + statut backups
Exigences: 12.7, 14.I.35
[ ]* 8.9 Valider Phase 6
Tester restore VM depuis PBS sur NUC
Tester watchdog (couper pve-main → alerte reçue < 15 min)
Tester image boot Clonezilla (restauration sur disque de test)
Dry-run playbooks sur VM vierge
Exigences: 12.6, 14.I.35, 14.I.33
9. Phase 7 — Mises à jour automatiques (Exigence 14 complète)
⚠️ Prérequis : Phase 6 validée (backups + watchdog + failover fonctionnels).
Sans filet de sécurité, on n'automatise PAS les updates.
9.1 Installer Loki + Promtail (centralisation logs)
Loki sur infra-mgmt, Promtail sur toutes les VMs/LXCs
Rétention 30j, intégration Grafana
Exigences: 15.1, 15.2, 15.3
9.2 Créer le workflow d'évaluation pré-update quotidien
Scanner apt list --upgradable sur chaque machine
Classifier : sécurité critique, sécurité, fonctionnelle, kernel, driver, optionnelle
Identifier les packages à risque (kernel, DKMS, systemd, grub, nvidia)
Exigences: 14.B.5, 15.4
9.3 Créer le module de vérification de compatibilité GPU/NVIDIA
Récupérer version driver (nvidia-smi), version kernel cible
Consulter matrice NVIDIA (web fetch ou cache local)
Vérifier DKMS build en dry-run si possible
Soumettre au LLM pour analyse GO/HOLD/REVIEW
Exigences: 14.C.9, 14.C.10
9.4 Créer le playbook 06-auto-update.yml avec vagues hiérarchisées
Vague 1 (non-critiques) → Vague 2 (services) → Vague 3 (infra critique) → Vague 4 (N8N/Ansible) → Vague 5 (hyperviseur)
Chaque vague : snapshot → update → reboot si nécessaire → vérifications post-update spécifiques par machine → cleanup snapshot
Stop complet si une vague échoue
Exigences: 14.A.1, 14.A.2, 14.A.3, 14.E.17-22
9.5 Implémenter les vérifications post-update par machine
Toutes : ping + SSH
Docker hosts : docker ps tous running 2 min
lxc-llm : nvidia-smi + Ollama port 11434
vm-hestiacp : SMTP 587 + IMAP 993
nginx-proxy-manager : test proxy host
vm-adguard : dig @192.168.202.24 google.com
wireguard : wg0 up + handshake
Exigences: 14.E.20
9.6 Implémenter la migration tampon NUC pour Vague 5 (hyperviseur)
Avant update pve-main : migrer VMs critiques (NPM, HestiaCP) vers NUC
Vérifier fonctionnement sur NUC avant de toucher à pve-main
Après update : re-migrer + cleanup
Exigences: 14.D.13, 14.D.14, 14.D.15
9.7 Implémenter la vérification GPU complète post-update hyperviseur
Séquence : Proxmox API OK → nvidia module chargé → nvidia-smi OK → GPU visible → LXC LLM démarre → Ollama répond
Si échec : rollback snapshot immédiat + alerte critique
Exigences: 14.C.11, 14.C.12
9.8 Implémenter les updates Docker (post-OS)
Comparer digests avant pull, snapshot VM hôte, docker-compose pull + up
Vérifier containers "running" 2 min consécutives
Exigences: 14.F.23, 14.F.24, 14.F.25
9.9 Créer le workflow N8N de déclenchement (cron dimanche 3h)
Estimation durée, alerte si dépasse fenêtre
Mode dry-run disponible
Exigences: 14.H.29, 14.H.30, 14.H.31
9.10 Créer le rapport hebdomadaire de maintenance
Par vague : packages, redémarrages, rollbacks, machines bloquées
État GPU, espace PBS snapshots, prochaine fenêtre
Exigences: 14.G.26, 14.G.27
9.11 Implémenter les alertes sur patterns de logs
10 erreurs identiques en 1h → reporter les updates sur cette machine
Exigences: 15.10
9.12 Configurer l'éligibilité et la validation admin
Check : pas d'erreurs critiques logs 24h, CPU < 50%, pas de backup en cours
Updates non-critiques : rapport + validation admin par email
Exigences: 15.5, 15.7, 15.8, 15.9
[ ]* 9.13 Valider Phase 7
Dry-run complet (toutes les vagues, pas d'application réelle)
Update réelle sur Vague 1 (non-critiques) → vérifier le flux complet
Simuler échec (arrêter un service post-update) → vérifier rollback
Tester le blocage GPU (simuler kernel incompatible) → vérifier HOLD
Tester migration tampon NUC → update pve-main → re-migration
Exigences: 14 (toutes sections)
10. Phase 8 — Contrôle Parental + WoL + Sécurité
10.1 Configurer AdGuard avec profils enfants
Clients par IP/MAC, filtrage strict par défaut
Exigences: 9.1
10.2 Créer la base de profils et codes (parental/profiles.yml)
Profils, codes → services, quotas, durée par défaut
Exigences: 9.1, 9.4
10.3 Workflow N8N contrôle parental (demande d'accès)
IMAP 2min → parse code → pfSense API + AdGuard API → timer → email admin
Exigences: 9.2, 9.3, 9.6, 9.7, 9.8
10.4 Workflow expiration d'accès
Timer → DELETE pfSense rule → réactiver AdGuard → email
Exigences: 9.5
10.5 Configurer Wake-on-LAN automatisé
Registre WoL, workflows N8N (démarrage/extinction planifiés)
Déclenchement par email/HA/manuel
Exigences: 16.1-16.7
10.6 Déployer le rôle base-security
Fail2ban, UFW, unattended-upgrades sécurité
Exigences: 3.3
10.7 Configurer la surveillance PBS + alertes backup
Espace disque PBS < 20% → alerte, backup échoué → alerte
Exigences: 7.5, 7.6, 5.4
10.8 Configurer la topologie réseau interactive (NetBox)
Carte visuelle, zoom, statut temps réel, panneau contextuel
Exigences: 2.1, 2.2, 2.4, 2.5, 2.6, 2.7
[ ]* 10.9 Valider Phase 8
Test contrôle parental bout en bout (code valide → accès → expiration)
Test WoL (démarrage + extinction planifiée)
Test isolation réseau enfants
Exigences: 9.2, 9.5, 16.3
11. Phase 9 — Documentation Auto-Générée + CI/CD + Polissage (Exigence 17)
11.1 Créer le workflow de génération automatique de runbooks
Trigger : modification Git (playbook, workflow, config)
LLM génère/met à jour le runbook impacté en Markdown + Mermaid
Push dans docs/runbooks/
Exigences: 17.A.1, 17.A.2, 17.A.3, 17.A.4
11.2 Configurer les rappels trimestriels
Email résumé infra + runbooks dispos + mini-quiz procédures critiques
Exigences: 17.B.5
11.3 Configurer les notifications post-update critique
Email "Ce qui a changé" après chaque update kernel/NVIDIA/Proxmox
Exigences: 17.B.6
11.4 Maintenir docs/etat-infra.md (mise à jour hebdo auto)
Photo synthétique : machines, statuts, dernières MAJ, incidents récents
Exigences: 17.B.7
11.5 Générer les tutoriels par fonctionnalité
Chaque nouveau service/workflow → tutoriel auto "ce qui a été ajouté"
Exigences: 17.C.8
11.6 Maintenir l'index chronologique (changelog détaillé)
docs/changelog-detaille.md : date, résumé, lien runbook, commit
Exigences: 17.C.9
11.7 Générer le PDF "Guide de survie infrastructure"
Export mensuel des 5 runbooks critiques en PDF
Stocker sur NAS Synology (ShadowDrive sync) + GitHub
Optimisé lecture smartphone (gros texte, étapes courtes)
Exigences: 17.D.11, 17.D.12
11.8 Validation de cohérence des runbooks
Vérifier IPs/ports/scripts mentionnés correspondent à l'inventaire réel
Marquer "⚠️ Potentiellement obsolète" si incohérence détectée
Exigences: 17.D.14
11.9 Installer GitLab self-hosted + CI/CD
LXC dédié (4 vCPU, 8 Go RAM), miroir GitHub ↔ GitLab
GitLab Runner, pipeline validate (--check) + deploy
Push mirror GitLab → GitHub
Exigences: 13.3, 13.4, 13.6, 13.7
11.10 Créer le système de CHANGELOG automatique
11.11 Test trimestriel de disaster recovery
Playbook 99-verify-all.yml + workflow N8N trimestriel
Restore VM critique + dry-run sur VM test
Exigences: 12.6, 14.I.38
[ ]* 11.12 Valider Phase 9
Modifier un playbook → runbook régénéré automatiquement
Vérifier PDF Guide de survie sur smartphone
Pipeline CI/CD déclenché sur commit
Push mirror GitLab → GitHub OK
Exigences: 17.A.2, 17.D.12, 13.4, 13.7
12. Checkpoint final — Validation complète de l'infrastructure autonome
Test de bout en bout : alerte → email → résolution
Cycle complet update : dry-run → vagues → rollback si échec
Failover NUC : couper pve-main → VMs critiques sur NUC < 15 min
Restauration Clonezilla : boot USB → restore image
Documentation : runbooks à jour, PDF accessible, rappels configurés
Exigences: toutes
Les tâches marquées * sont les validations — reportables pour un MVP mais fortement recommandées
Ordre critique : Phase 6 (DR/backups) DOIT précéder Phase 7 (updates auto). On ne lance pas d'updates automatiques sans filet.
La Phase 7 est la plus complexe et la plus risquée — prévoir 2-3 semaines avec des tests progressifs
Le watchdog NUC (tâche 8.5) doit être un script AUTONOME (bash + cron), pas un workflow N8N — il doit fonctionner même si pve-main est down
L'exigence 17 (doc auto) peut être déployée progressivement : commencer par les runbooks critiques (DR, restauration GPU) puis étendre
Phase 1 (Ansible + SSH + Git)
│
├──→ Phase 2 (Monitoring)
│ │
│ └──→ Phase 3 (Mail + Alertes + Chemin secondaire NUC)
│ │
│ └──→ Phase 3.5 (Routeur IA + Validation + Résumé quotidien) ← NOUVEAU
│ │
│ └──→ Phase 4 (Réseau/VLANs)
│ │
│ └──→ Phase 5 (LLM workflows complets)
│ │
│ ├──→ Phase 6 (DR + Backups + Watchdog) ⚠️ AVANT updates
│ │ │
│ │ └──→ Phase 7 (Mises à jour auto)
│ │
│ └──→ Phase 8 (Parental + WoL + Sécurité)
│
└──→ Phase 9 (Doc auto + CI/CD + Polissage) — peut démarrer dès Phase 5 stable
Phase
Durée estimée
Prérequis
Phase 1 — Fondations
1 semaine
Rien
Phase 2 — Monitoring
1 semaine
Phase 1
Phase 3 — Mail/Alertes
1 semaine
Phase 2
Phase 3.5 — Routeur IA + Validation
1 semaine
Phase 3
Phase 4 — Réseau
1 semaine
Phase 3.5
Phase 5 — Automatisation complète
1.5 semaines
Phase 3.5
Phase 6 — Disaster Recovery
1.5 semaines
Phase 5
Phase 7 — Updates auto
2-3 semaines
Phase 6 ⚠️
Phase 8 — Parental/WoL/Sécu
1 semaine
Phase 4 + 5
Phase 9 — Doc auto/CI/CD
1.5 semaines
Phase 5+
Total
~12-14 semaines
{
"waves": [
{ "id": 0, "tasks": ["1.1", "1.2"], "phase": 1 },
{ "id": 1, "tasks": ["1.3", "1.5"], "phase": 1 },
{ "id": 2, "tasks": ["1.4", "1.6"], "phase": 1 },
{ "id": 3, "tasks": ["1.7", "1.8"], "phase": 1 },
{ "id": 4, "tasks": ["2.1", "2.2", "3.1"], "phase": "2+3" },
{ "id": 5, "tasks": ["2.3", "2.5", "3.2"], "phase": "2+3" },
{ "id": 6, "tasks": ["2.4", "2.6", "3.4", "3.5"], "phase": "2+3" },
{ "id": 7, "tasks": ["3.3", "3.6"], "phase": 3 },
{ "id": 8, "tasks": ["3.7", "3.8"], "phase": 3 },
{ "id": 9, "tasks": ["4.1", "4.3"], "phase": "3.5", "note": "Routeur IA — déploiement LiteLLM + clés API" },
{ "id": 10, "tasks": ["4.2", "4.4"], "phase": "3.5", "note": "Config routage + métriques Prometheus" },
{ "id": 11, "tasks": ["4.5", "4.6"], "phase": "3.5", "note": "Alertes intelligentes + validation email" },
{ "id": 12, "tasks": ["4.7", "4.8", "4.9"], "phase": "3.5", "note": "Intégration + résumé quotidien + rapport" },
{ "id": 13, "tasks": ["4.10", "4.11"], "phase": "3.5", "note": "Migration workflows + validation" },
{ "id": 14, "tasks": ["5.1", "5.2"], "phase": 4 },
{ "id": 15, "tasks": ["5.3"], "phase": 4 },
{ "id": 16, "tasks": ["5.4", "5.5", "5.6"], "phase": 4 },
{ "id": 17, "tasks": ["6.1", "6.2"], "phase": 5 },
{ "id": 18, "tasks": ["6.3", "6.4", "6.5"], "phase": 5 },
{ "id": 19, "tasks": ["6.6", "6.7", "6.8"], "phase": 5 },
{ "id": 20, "tasks": ["6.9"], "phase": 5 },
{ "id": 21, "tasks": ["8.1", "8.2", "8.3"], "phase": 6, "note": "DR - AVANT updates" },
{ "id": 22, "tasks": ["8.4", "8.5", "8.6"], "phase": 6 },
{ "id": 23, "tasks": ["8.7", "8.8", "8.9"], "phase": 6 },
{ "id": 24, "tasks": ["9.1", "9.2"], "phase": 7, "note": "Updates auto - APRÈS DR validé" },
{ "id": 25, "tasks": ["9.3", "9.4", "9.5"], "phase": 7 },
{ "id": 26, "tasks": ["9.6", "9.7", "9.8"], "phase": 7 },
{ "id": 27, "tasks": ["9.9", "9.10", "9.11", "9.12"], "phase": 7 },
{ "id": 28, "tasks": ["9.13"], "phase": 7 },
{ "id": 29, "tasks": ["10.1", "10.2", "10.5", "10.6"], "phase": 8 },
{ "id": 30, "tasks": ["10.3", "10.4", "10.7", "10.8"], "phase": 8 },
{ "id": 31, "tasks": ["10.9"], "phase": 8 },
{ "id": 32, "tasks": ["11.1", "11.2", "11.3", "11.4"], "phase": 9 },
{ "id": 33, "tasks": ["11.5", "11.6", "11.7", "11.8"], "phase": 9 },
{ "id": 34, "tasks": ["11.9", "11.10", "11.11"], "phase": 9 },
{ "id": 35, "tasks": ["11.12"], "phase": 9 }
]
}