README : remettre le texte en phase avec la machine
Le document decrivait six machines dont un courriel et un PostgreSQL, et federe: false. Le plan en declare cinq -- pki, dns, edge, forge, ops -- sans courriel, Forgejo sur SQLite, et la federation basculee au deploiement. Toute la liste "ce qui reste a faire" etait faite. Ajoute ce qui n'existait pas quand il a ete ecrit : le poste d'exploitation et ses deux symlinks, l'etat des cinq depots du genome (deux miroirs, trois figes), et la ligne entre ce que le poste reproduit seul et ce qui exige une cle humaine. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
c6035a2d57
commit
d9ed37cc47
1 changed files with 114 additions and 27 deletions
141
README.md
141
README.md
|
|
@ -5,16 +5,24 @@
|
||||||
|
|
||||||
## Ce qu'il est
|
## Ce qu'il est
|
||||||
|
|
||||||
Patient 0 est le **plus petit écosystème complet** : PKI, DNS, edge, courriel,
|
Patient 0 est le **plus petit écosystème complet** : une PKI, un DNS, un edge, une
|
||||||
PostgreSQL, et une **forge**. Six machines. Sa raison d'être tient en une phrase :
|
**forge**, et un **poste d'exploitation**. Cinq machines. Sa raison d'être tient en une
|
||||||
|
phrase :
|
||||||
|
|
||||||
> porter les dépôts qui fabriquent les écosystèmes, et les servir à ses enfants.
|
> porter les dépôts qui fabriquent les écosystèmes, et les servir à ses enfants.
|
||||||
|
|
||||||
Aujourd'hui, ce rôle est tenu par `eregion.chezlepro.ca` — une machine **hors flotte**,
|
Un tenant ordinaire existe pour ses gens : Chezlepro héberge de l'identité, du courriel,
|
||||||
montée à la main, que Set-OPS ne déploie pas, ne sauvegarde pas et ne prouve pas. Tout ce
|
de la collaboration. Patient 0 n'héberge que **la lignée**.
|
||||||
qui fabrique Chezlepro dépend d'elle. Patient 0 la remplace par un écosystème **bâti par
|
|
||||||
le moteur, sauvegardé par le moteur, vérifié par le harnais**. On ne déplace pas le point
|
## Ce qu'il remplace
|
||||||
unique de défaillance : on l'élimine.
|
|
||||||
|
Aujourd'hui encore, tout ce qui fabrique Chezlepro dépend de `eregion.chezlepro.ca` — une
|
||||||
|
machine **hors flotte**, montée à la main, que Set-OPS ne déploie pas, ne sauvegarde pas
|
||||||
|
et ne prouve pas. C'est un point unique de défaillance, situé exactement là où il fait le
|
||||||
|
plus mal : à la racine.
|
||||||
|
|
||||||
|
Patient 0 le remplace par un écosystème **bâti par le moteur, sauvegardé par le moteur,
|
||||||
|
vérifié par le harnais**. On ne déplace pas le point unique de défaillance : on l'élimine.
|
||||||
|
|
||||||
## La boucle, et comment elle se casse
|
## La boucle, et comment elle se casse
|
||||||
|
|
||||||
|
|
@ -29,36 +37,115 @@ patient 0 (la forge mère) · le poste de l'exploitant · restic hors cluste
|
||||||
|
|
||||||
N'importe quel survivant réamorce les autres. Une famille, pas un maître.
|
N'importe quel survivant réamorce les autres. Une famille, pas un maître.
|
||||||
|
|
||||||
|
## État au 2026-08-23 : matérialisé
|
||||||
|
|
||||||
|
Les cinq machines tournent. L'adressage dérive du seul seed `index: 29` — supernet
|
||||||
|
`10.29.0.0/16`, zones en `10.29.(15+zone).0/24`, VLAN `1290+zone`.
|
||||||
|
|
||||||
|
| machine | fonction | adresse | ce qu'elle porte |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `infra-edge-01` | infra-edge | `10.29.16.11` | nginx — publie `forge.genese.internal` |
|
||||||
|
| `infra-dns-01` | infra-dns | `10.29.19.11` | PowerDNS autoritatif |
|
||||||
|
| `infra-pki-01` | infra-pki | `10.29.19.21` | step-ca — l'autorité interne |
|
||||||
|
| `ops-01` | ops | `10.29.19.41` | le **poste d'exploitation** |
|
||||||
|
| `forge-01` | forge | `10.29.21.11` | Forgejo — le génome |
|
||||||
|
|
||||||
|
**Forgejo tourne sur SQLite**, pas sur une VM PostgreSQL dédiée : une base qu'une
|
||||||
|
poignée de personnes sollicite ne justifie pas un serveur, une zone, un secret et une
|
||||||
|
sauvegarde de plus. Moins de surface sur la machine dont tout descend.
|
||||||
|
|
||||||
|
**Ni courriel ni base de données centrale.** Le plan en a porté au stade projet ; ils ont
|
||||||
|
été retirés. Patient 0 n'a pas d'usagers à notifier.
|
||||||
|
|
||||||
|
**Sauvegarde** : `infra-pki-01` et `forge-01` poussent leur état vers
|
||||||
|
`eregion.chezlepro.ca` — les deux seules machines qui détiennent quelque chose
|
||||||
|
d'irremplaçable (les clés de l'AC, les dépôts).
|
||||||
|
|
||||||
|
**Il est hébergé par la fabric de Chezlepro** (`SITE-Chezlepro`), au même titre qu'un
|
||||||
|
autre tenant. Il n'a pas d'underlay à lui.
|
||||||
|
|
||||||
|
## Le génome, sur sa forge
|
||||||
|
|
||||||
|
Les dépôts vivent sous l'organisation `genome` :
|
||||||
|
|
||||||
|
| dépôt | miroir de l'amont |
|
||||||
|
|---|---|
|
||||||
|
| `set-ops-public` | **oui** — toutes les 8 h |
|
||||||
|
| `ops-patient0` | **oui** — toutes les 8 h |
|
||||||
|
| `site-chezlepro` | non — figé au poussage |
|
||||||
|
| `set-ops-modeles` | non — figé au poussage |
|
||||||
|
| `ops-chezlepro` | non, et privé — le plan d'un tenant voisin, sans usage ici |
|
||||||
|
|
||||||
|
Les deux miroirs suivent `forge.alliance-boreale.ca`. Les trois autres attendent un jeton
|
||||||
|
amont en **lecture seule** : un jeton capable d'écrire chez le parent inverserait le sens
|
||||||
|
de la filiation, et ne sera pas posé ici.
|
||||||
|
|
||||||
|
L'étiquette signée `v2026.08.21` a traversé le miroir intacte — la provenance reste
|
||||||
|
vérifiable depuis l'enfant.
|
||||||
|
|
||||||
|
## Le poste d'exploitation
|
||||||
|
|
||||||
|
`ops-01` porte `/opt/setops` : Ansible épinglé (core 2.18), le génome cloné **depuis sa
|
||||||
|
propre forge**, et les deux symlinks de D-80.
|
||||||
|
|
||||||
|
```
|
||||||
|
Set-OPS-public/instance -> OPS-Patient0 quel tenant on pilote
|
||||||
|
Set-OPS-public/underlay.yml -> SITE-Chezlepro/… sur quelle fabric il repose
|
||||||
|
```
|
||||||
|
|
||||||
|
Ce qu'il **n'a pas**, et n'aura jamais : le mot de passe de la voûte, saisi à
|
||||||
|
l'exécution ; le fichier de voûte lui-même, hors dépôt ; `underlay.vault.yml`, les
|
||||||
|
secrets du monde physique. Il lit la **carte** de la fabric, jamais ses **clés**.
|
||||||
|
|
||||||
|
D'où une ligne nette, mesurée depuis la machine :
|
||||||
|
|
||||||
|
```
|
||||||
|
make instancier DIFF VIDE : le plan reproduit exactement l'inventaire actuel
|
||||||
|
make underlay-plan refusé — aucune voûte
|
||||||
|
```
|
||||||
|
|
||||||
|
Il reproduit sa propre structure sans aucun secret. Il ne touche pas à la fabric sans
|
||||||
|
qu'un humain apporte la clé.
|
||||||
|
|
||||||
## Ce que ce dépôt contient, et ce qu'il ne contiendra jamais
|
## Ce que ce dépôt contient, et ce qu'il ne contiendra jamais
|
||||||
|
|
||||||
| | |
|
| | |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `plan/` | les six machines, leurs zones, leurs applications |
|
| `plan/` | les cinq machines, leurs zones, leurs applications |
|
||||||
| `inventories/production/group_vars/` | les intrants, le placement Proxmox, le **gabarit** de voûte |
|
| `inventories/production/group_vars/` | les intrants, le placement Proxmox, le **gabarit** de voûte |
|
||||||
| `inventories/production/hosts.yml` | **généré** depuis le plan — ne jamais l'éditer à la main |
|
| `inventories/production/hosts.yml` | **généré** depuis le plan — ne jamais l'éditer à la main |
|
||||||
| le mot de passe de la voûte | **jamais**. Ni ici, ni dans aucun dépôt : c'est le seul objet que la reproduction exige d'un humain |
|
| `parente.yml` | de quels dépôts, à quels commits, cet écosystème descend |
|
||||||
|
| la voûte et son mot de passe | **jamais**. Ni ici, ni dans aucun dépôt : c'est le seul objet que la reproduction exige d'un humain |
|
||||||
|
|
||||||
|
Conséquence à connaître, et qui n'est pas un défaut :
|
||||||
|
|
||||||
|
```
|
||||||
|
la STRUCTURE se reconstruit depuis la forge
|
||||||
|
les SECRETS se restaurent depuis la sauvegarde (restic)
|
||||||
|
```
|
||||||
|
|
||||||
|
Deux sources distinctes, qu'un même incident n'atteint pas ensemble.
|
||||||
|
|
||||||
## Deux réglages à connaître
|
## Deux réglages à connaître
|
||||||
|
|
||||||
**`index: 29`** — tout l'adressage en dérive (`10.29.0.0/16`, VLAN 1291-1296). Choisi
|
**`index: 29`** — tout l'adressage en dérive. Choisi libre : 13 est le lab, 17 Chezlepro,
|
||||||
libre : 13 est le lab, 17 Chezlepro, 23 Technolibre. Les index bas (1, 11) ont déjà forcé
|
23 Technolibre. Les index bas (1, 11) ont déjà forcé deux renumérotages, ils tombaient
|
||||||
deux renumérotages, ils tombaient dans des plages occupées par du matériel.
|
dans des plages occupées par du matériel.
|
||||||
|
|
||||||
**`federe: false`** — patient 0 est **exclu des devis du site** tant qu'il n'est pas
|
**`federe: true`** — patient 0 est pris en compte par les devis du site : la frontière,
|
||||||
matérialisé : ni la frontière, ni le SDN, ni le pare-feu de l'hyperviseur ne lui réservent
|
le SDN et le pare-feu de l'hyperviseur lui réservent ses zones. Il est resté à `false`
|
||||||
quoi que ce soit. C'est délibéré et temporaire. À basculer à `true` le jour où on le
|
tant qu'il n'était qu'un plan, et a été basculé **avant** `make sdn-appliquer` — sinon
|
||||||
déploie, **avant** `make sdn-appliquer` — sinon ses zones n'existeront nulle part.
|
ses VLAN n'auraient existé nulle part.
|
||||||
|
|
||||||
## Ce qui reste à faire avant de le matérialiser
|
## Ce qui reste devant
|
||||||
|
|
||||||
|
- [ ] **Les trois miroirs privés**, dès qu'un jeton amont en lecture seule existe.
|
||||||
- [ ] **Décider où il vit.** Sur `asgard`, la perte du cluster emporte patient 0 *et*
|
- [ ] **Décider où il vit.** Sur `asgard`, la perte du cluster emporte patient 0 *et*
|
||||||
Chezlepro d'un coup. Ailleurs, la famille survit à la perte du cluster.
|
Chezlepro d'un coup. Ailleurs, la famille survit à la perte du cluster. Le
|
||||||
Le déménagement tient en quatre valeurs (`group_vars/proxmox.yml`) et un symlink.
|
déménagement tient en quatre valeurs (`group_vars/proxmox.yml`) et un symlink.
|
||||||
- [ ] **Créer la voûte réelle** :
|
- [ ] **Une source d'artefacts.** Sa forge héberge du code, pas des binaires. Les
|
||||||
`ansible-vault create inventories/production/group_vars/all/vault.yml`,
|
collections Ansible sont réglées (cache du contrôleur, poussé par SSH) ; Forgejo,
|
||||||
en couvrant les noms du gabarit (`vault.yml.example`).
|
step-ca et les autres viennent encore du dehors. Un enfant coupé de l'internet ne
|
||||||
- [ ] **Basculer `federe: true`**, puis `make instancier` → `make instancier-appliquer`.
|
se construit pas.
|
||||||
- [ ] `make placement-plan` — confronter les quatre valeurs au cluster **avant** de
|
- [ ] **Son propre résolveur.** Les hôtes interrogent Quad9 et non `infra-dns-01` :
|
||||||
cloner quoi que ce soit : quarante minutes de déploiement ne se rattrapent pas.
|
l'écosystème fait tourner un DNS que personne n'utilise.
|
||||||
- [ ] Déployer, puis y **pousser les quatre dépôts** du génome (moteur, instances,
|
|
||||||
hébergeur, modèles) et inscrire la parenté de chacun.
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue