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
|
||||
|
||||
Patient 0 est le **plus petit écosystème complet** : PKI, DNS, edge, courriel,
|
||||
PostgreSQL, et une **forge**. Six machines. Sa raison d'être tient en une phrase :
|
||||
Patient 0 est le **plus petit écosystème complet** : une PKI, un DNS, un edge, une
|
||||
**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.
|
||||
|
||||
Aujourd'hui, ce rôle est tenu par `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. Tout ce
|
||||
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
|
||||
unique de défaillance : on l'élimine.
|
||||
Un tenant ordinaire existe pour ses gens : Chezlepro héberge de l'identité, du courriel,
|
||||
de la collaboration. Patient 0 n'héberge que **la lignée**.
|
||||
|
||||
## Ce qu'il remplace
|
||||
|
||||
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
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
## É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
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| `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/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
|
||||
|
||||
**`index: 29`** — tout l'adressage en dérive (`10.29.0.0/16`, VLAN 1291-1296). Choisi
|
||||
libre : 13 est le lab, 17 Chezlepro, 23 Technolibre. Les index bas (1, 11) ont déjà forcé
|
||||
deux renumérotages, ils tombaient dans des plages occupées par du matériel.
|
||||
**`index: 29`** — tout l'adressage en dérive. Choisi libre : 13 est le lab, 17 Chezlepro,
|
||||
23 Technolibre. Les index bas (1, 11) ont déjà forcé deux renumérotages, ils tombaient
|
||||
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
|
||||
matérialisé : ni la frontière, ni le SDN, ni le pare-feu de l'hyperviseur ne lui réservent
|
||||
quoi que ce soit. C'est délibéré et temporaire. À basculer à `true` le jour où on le
|
||||
déploie, **avant** `make sdn-appliquer` — sinon ses zones n'existeront nulle part.
|
||||
**`federe: true`** — patient 0 est pris en compte par les devis du site : la frontière,
|
||||
le SDN et le pare-feu de l'hyperviseur lui réservent ses zones. Il est resté à `false`
|
||||
tant qu'il n'était qu'un plan, et a été basculé **avant** `make sdn-appliquer` — sinon
|
||||
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*
|
||||
Chezlepro d'un coup. Ailleurs, la famille survit à la perte du cluster.
|
||||
Le déménagement tient en quatre valeurs (`group_vars/proxmox.yml`) et un symlink.
|
||||
- [ ] **Créer la voûte réelle** :
|
||||
`ansible-vault create inventories/production/group_vars/all/vault.yml`,
|
||||
en couvrant les noms du gabarit (`vault.yml.example`).
|
||||
- [ ] **Basculer `federe: true`**, puis `make instancier` → `make instancier-appliquer`.
|
||||
- [ ] `make placement-plan` — confronter les quatre valeurs au cluster **avant** de
|
||||
cloner quoi que ce soit : quarante minutes de déploiement ne se rattrapent pas.
|
||||
- [ ] 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.
|
||||
Chezlepro d'un coup. Ailleurs, la famille survit à la perte du cluster. Le
|
||||
déménagement tient en quatre valeurs (`group_vars/proxmox.yml`) et un symlink.
|
||||
- [ ] **Une source d'artefacts.** Sa forge héberge du code, pas des binaires. Les
|
||||
collections Ansible sont réglées (cache du contrôleur, poussé par SSH) ; Forgejo,
|
||||
step-ca et les autres viennent encore du dehors. Un enfant coupé de l'internet ne
|
||||
se construit pas.
|
||||
- [ ] **Son propre résolveur.** Les hôtes interrogent Quad9 et non `infra-dns-01` :
|
||||
l'écosystème fait tourner un DNS que personne n'utilise.
|
||||
|
|
|
|||
Loading…
Reference in a new issue