From 05347e6206a71592b064de2b2d8433d5446a7b95 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sat, 22 Aug 2026 10:54:30 -0400 Subject: [PATCH] architecture : la sauvegarde sort du cluster, et Dovecot quitte le plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DEUX DECISIONS DE L'EXPLOITANT, prises en regardant ce que patient 0 doit survivre. 1. LA SAUVEGARDE POINTE HORS CLUSTER (eregion). Le defaut du role poserait un backup-01 sur le MEME cluster : on sauvegarderait le genome a cote du genome, et la perte du cluster emporterait les deux. Patient 0 existe pour survivre a la perte du reste. Une seule cle a surcharger — client_backup_cible — parce que le transport est du SFTP sur SSH, pas une derivation du plan. CE QUI PART EST PETIT, et c'est le raisonnement qui compte : les quatre depots du genome sont des MIROIRS (le poste de l'exploitant, eregion, chaque enfant en portent une copie) — on les repousse depuis n'importe quel survivant. Reste l'irremplacable : les cles de l'AC, et la base de la forge le jour ou elle portera autre chose que des miroirs. DEFAUT ASSUME, ecrit dans le fichier : eregion n'est pas geree par Set-OPS, donc ni prouvee ni reconstructible. C'est un domaine de panne DIFFERENT d'asgard — le point — pas un domaine sur. A revoir quand une troisieme machine existera. 2. DOVECOT RETIRE. Une boite aux lettres sans MTA pour l'alimenter ne servait rien ici. Patient 0 passe de six a cinq machines : moins de surface a defendre sur la machine dont tout descend, et une sauvegarde de moins a surveiller. L'application, la machine et la fonction orpheline partent ensemble — une nomenclature qui place une machine inexistante est un mensonge en attente. Les quatre registres valident, l'inventaire est regenere. RESTE UNE ACTION HUMAINE, sur eregion : creer le compte restic et y poser cle-publique-sauvegarde.txt. La commande exacte est dans 20-sauvegarde.yml. Co-Authored-By: Claude Opus 5 --- .../group_vars/all/20-sauvegarde.yml | 23 +++++++++++++++++++ inventories/production/hosts.yml | 23 ------------------- plan/applications.yml | 1 - plan/nomenclature.yml | 1 - plan/serveurs.yml | 1 - 5 files changed, 23 insertions(+), 26 deletions(-) create mode 100644 inventories/production/group_vars/all/20-sauvegarde.yml diff --git a/inventories/production/group_vars/all/20-sauvegarde.yml b/inventories/production/group_vars/all/20-sauvegarde.yml new file mode 100644 index 0000000..80deab6 --- /dev/null +++ b/inventories/production/group_vars/all/20-sauvegarde.yml @@ -0,0 +1,23 @@ +--- +# LA SAUVEGARDE DE PATIENT 0 SORT DU CLUSTER, ET C'EST TOUT L'INTERET. +# +# Le defaut du role (`backup-01.`) poserait une VM de plus SUR LE MEME CLUSTER : +# on sauvegarderait le genome a cote du genome, et la perte du cluster emporterait les +# deux. Patient 0 existe precisement pour survivre a la perte du reste. +# +# CE QUI PART ICI EST PETIT, et c'est voulu. Les quatre depots du genome sont des +# MIROIRS : ton poste, eregion et chaque ecosysteme enfant en portent une copie, donc on +# les repousse depuis n'importe quel survivant. Ce qui est vraiment irremplacable tient en +# deux choses : les cles de l'autorite de certification (les perdre invalide toute la +# confiance) et la base de la forge le jour ou elle portera autre chose que des miroirs. +# +# CE QUE CETTE CIBLE EXIGE, sur eregion, une fois : +# sudo adduser --disabled-password --gecos "" restic +# sudo -u restic mkdir -p ~restic/.ssh && sudo -u restic chmod 700 ~restic/.ssh +# # y coller le contenu de cle-publique-sauvegarde.txt : +# sudo -u restic tee -a ~restic/.ssh/authorized_keys < cle-publique-sauvegarde.txt +# +# ET SON DEFAUT ASSUME : eregion n'est pas geree par Set-OPS. Elle n'est ni prouvee, ni +# reconstructible par le moteur. C'est un domaine de panne DIFFERENT d'asgard — ce qui est +# le point — mais pas un domaine sur. A revoir le jour ou une troisieme machine existe. +client_backup_cible: eregion.chezlepro.ca diff --git a/inventories/production/hosts.yml b/inventories/production/hosts.yml index 292167f..c66092b 100644 --- a/inventories/production/hosts.yml +++ b/inventories/production/hosts.yml @@ -7,7 +7,6 @@ all: hosts: data-sql-01: null forge-01: null - infra-mail-01: null infra-pki-01: null client_journal: hosts: @@ -15,7 +14,6 @@ all: forge-01: null infra-dns-01: null infra-edge-01: null - infra-mail-01: null infra-pki-01: null client_metrique: hosts: @@ -23,7 +21,6 @@ all: forge-01: null infra-dns-01: null infra-edge-01: null - infra-mail-01: null infra-pki-01: null client_pki: hosts: @@ -31,14 +28,12 @@ all: forge-01: null infra-dns-01: null infra-edge-01: null - infra-mail-01: null infra-pki-01: null client_unbound: hosts: data-sql-01: null forge-01: null infra-edge-01: null - infra-mail-01: null infra-pki-01: null hotes_actifs: hosts: {} @@ -98,19 +93,6 @@ all: sans_exposition: - forge.genese.internal setops_supernet: 10.29.0.0/16 - infra-mail-01: - ansible_host: 10.29.19.31 - ansible_user: ansible - proxmox_cidr: 24 - proxmox_coeurs: 1 - proxmox_disque_taille: 20G - proxmox_etiquette_vlan: '' - proxmox_memoire: 1536 - proxmox_passerelle: 10.29.19.1 - proxmox_pont: t29serv - proxmox_vlan: 1294 - proxmox_vmid: 129403101 - setops_supernet: 10.29.0.0/16 infra-pki-01: ansible_host: 10.29.19.21 ansible_user: ansible @@ -132,18 +114,13 @@ all: forge-01: null infra-dns-01: null infra-edge-01: null - infra-mail-01: null infra-pki-01: null - serveur_dovecot: - hosts: - infra-mail-01: null serveur_durci: hosts: data-sql-01: null forge-01: null infra-dns-01: null infra-edge-01: null - infra-mail-01: null infra-pki-01: null serveur_forgejo: hosts: diff --git a/plan/applications.yml b/plan/applications.yml index d7b9146..03834bf 100644 --- a/plan/applications.yml +++ b/plan/applications.yml @@ -3,7 +3,6 @@ applications: step_ca: { groupe: serveur_step_ca, hote: infra-pki-01 } nginx: { groupe: serveur_nginx, hote: infra-edge-01 } powerdns: { groupe: serveur_powerdns, hote: infra-dns-01 } - dovecot: { groupe: serveur_dovecot, hote: infra-mail-01 } postgresql: { groupe: serveur_postgresql, hote: data-sql-01 } redis: { groupe: serveur_redis, hote: data-sql-01 } forgejo: { groupe: serveur_forgejo, hote: forge-01, port: 3000, expose: [forge.genese.internal] } diff --git a/plan/nomenclature.yml b/plan/nomenclature.yml index 5a2b6df..506bc06 100644 --- a/plan/nomenclature.yml +++ b/plan/nomenclature.yml @@ -39,5 +39,4 @@ fonctions: forge: { categorie: 6, service: 1 } infra-dns: { categorie: 4, service: 1 } infra-edge: { categorie: 1, service: 1 } - infra-mail: { categorie: 4, service: 3 } infra-pki: { categorie: 4, service: 2 } diff --git a/plan/serveurs.yml b/plan/serveurs.yml index d8716e6..e13a122 100644 --- a/plan/serveurs.yml +++ b/plan/serveurs.yml @@ -5,7 +5,6 @@ serveurs: infra-pki-01: { fonction: infra-pki, etat: planifie, disque: 32G, integrations: [client_backup] } infra-edge-01: { fonction: infra-edge, etat: planifie } - infra-mail-01: { fonction: infra-mail, etat: planifie, integrations: [client_backup] } infra-dns-01: { fonction: infra-dns, etat: planifie, disque: 40G } data-sql-01: { fonction: data-sql, etat: planifie, integrations: [client_backup] } # PAS DE `client_smtp` ICI, ni ailleurs dans ce plan : patient 0 n'a pas de MTA, et la