Aller au contenu

Décisions d'architecture (ADR)

Journal des choix structurants et de leur pourquoi. Format léger : Contexte → Décision → Conséquences.

ADR-001 — Projet compose unique (include:) au lieu d'un Makefile

  • Contexte : ancien monolithe docker-compose.yml + wrapper Makefile/--env-file.
  • Décision : un seul compose.yaml (projet tichnou) qui include: un compose par domaine, chacun avec son env_file.
  • Conséquences : docker compose up -d pilote tout ; IP/secrets résolus par stack ; plus de make. Limite : depends_on inter-stacks impossible → dépendances retirées (cf. ADR-003).

ADR-002 — Adressage IP centralisé (network.env)

  • Décision : toutes les IP dans network.env (IP_<SERVICE>), référencées ${...}.
  • Conséquences : une seule source de vérité ; changer une IP = 1 ligne + up. Interdit d'écrire une IP en dur (sauf exception actions-manager, cf. Pièges).

ADR-003 — Pas d'ordre de démarrage global

  • Décision : s'appuyer sur restart: (reconnexion auto) + depends_on intra-stack.
  • Conséquences : démarrage robuste sans orchestrateur d'ordre ; les services doivent tolérer l'indisponibilité temporaire de leurs dépendances.

ADR-004 — TimescaleDB pour l'historique HA

  • Décision : PostgreSQL+Timescale pour le recorder/LTSS (compression, perfs séries-temps).

ADR-005 — RAID1 pour les photos, mais backup séparé

  • Décision : library Immich sur RAID1 (md0) ; base sur / (sauvegardée) ; cache ML exclu.
  • Conséquences : tolérance à une panne disque, mais RAID1 ≠ sauvegarde → backup média à part.

ADR-006 — Démon Docker indépendant des disques secondaires

  • Décision : /var/lib/docker sur / ; montages secondaires en nofail ; supprimer tout RequiresMountsFor couplant Docker à un disque. Un disque absent ne doit pas bloquer Docker.

ADR-007 — Wiki = MkDocs Material (markdown pur, git)

  • Contexte : besoin d'une mémoire infra double usage (humain + Claude).
  • Décision : MkDocs Material — source .md sur disque (lisible Claude), git + remote, statique, léger ; pages volatiles auto-générées séparées du rédigé. Alternatives écartées : Wiki.js (Postgres + synchro git délicate), BookStack (stockage en base, pas de .md).
  • Conséquences : édition via fichiers/code-server/git (pas de WYSIWYG navigateur) ; accès interne direct sans friction pour l'agent.