Set-OPS-Public/docs/setup.md
Daniel Allaire aab1bcc83a doc : rangee par lecteur, trois portes d'entree (architecture, setup, usage) et un index
README reduit au role du projet et au demarrage rapide. docs/architecture.md (schemas
Mermaid), docs/setup.md, docs/usage.md (154 cibles en 13 familles), docs/README.md (index).
Documents ranges en conception/, exploitation/, hebergement/, projet/ ; 598 chemins suivis.
QUICKSTART.md, SOLUTION.md, architecture-set-ops.md et la carte fondus puis retires.

Preuves : P48 lit l'index et conception/mecanismes.md ; les gardes parcourent docs/ sous-
dossiers compris (_documents) ; usage.md suit le Makefile dans les deux sens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:01:54 -04:00

152 lines
6.4 KiB
Markdown

# Installation et configuration
> **Pour qui :** l'exploitant qui monte son premier écosystème sur une grappe Proxmox. Le
> résumé est dans le [README](../README.md) ; ce document donne chaque étape, ses fichiers
> et ses pièges. Préparer le matériel d'un hébergeur est un autre parcours :
> [`hebergement/preparer-un-site-hebergeur.md`](hebergement/preparer-un-site-hebergeur.md).
## Prérequis
| Quoi | Détail |
|---|---|
| Grappe Proxmox | droits d'administration, API joignable depuis le poste |
| Jeton d'API Proxmox | utilisateur `ansible@pve` ou équivalent |
| Poste de pilotage | Linux, Python 3, Ansible, `make`, `git` ; `node` optionnel (garde JS du GUI) |
| Paire de clés SSH | la publique est injectée dans les VM par cloud-init |
| Phrase de passe de voûte | une par écosystème |
## 1. Cloner le moteur
```bash
git clone <url-de-Set-OPS> Set-OPS && cd Set-OPS
```
## 2. Créer l'instance
Une instance est un dépôt frère du moteur, créé depuis un modèle. Le dépôt public fournit
`socle` : PKI (step-ca), DNS interne (PowerDNS), edge TLS (nginx), magasin de courriel
(Dovecot). Les modèles assemblés par offre sont dans le dépôt privé `Set-OPS-modeles`
(`SETOPS_MODELES` les rend visibles).
```bash
make instance-modeles # modèles disponibles
make instance-creer NOM=OPS-MonOrg MODELE=socle # crée ../OPS-MonOrg ; INDEX=<n> fixe le seed
ln -s ../OPS-MonOrg instance # l'instance active (ou : make instance-utiliser NOM=OPS-MonOrg)
make instances # écosystèmes découverts, collisions d'index
```
`instance-creer` refuse un `index` déjà pris par un écosystème voisin : tout l'adressage en
dérive. Il ne bascule pas le lien `instance/` et ne fait pas `git init`.
## 3. Renseigner l'instance
`<inventaire>` est `principal` ou, à défaut, `production` (le nom que porte le modèle).
| Fichier | Valeur |
|---|---|
| `instance/inventories/<inventaire>/group_vars/all/10-intrants.yml` | `domaine_interne` (ex. `monorg.internal`) |
| `instance/plan/nomenclature.yml` | `index` (seed) et supernet |
| `instance/plan/domaines.yml` | domaine public, `autorite`, `edge` |
| `instance/plan/serveurs.yml` | placement Proxmox : nœud, stockage, disque, mémoire, cœurs |
Le GUI (`make inventaire-ui`) édite les mêmes registres. Valeurs communes :
[`conception/intrants-communs.md`](conception/intrants-communs.md).
## 4. Proxmox
```bash
make config # API, nœud, stockage, VMID et nom du gabarit
```
Chaque paramètre : [`exploitation/config-proxmox.md`](exploitation/config-proxmox.md).
Les identifiants Proxmox appartiennent à l'hébergeur : ils vivent dans **sa** voûte (celle
de l'underlay), pas dans celle du locataire.
## 5. Voûtes et clés
Une voûte par dépôt, chiffrée par `ansible-vault`, depuis le gabarit
[`exemples/vault.exemple.yml`](../exemples/vault.exemple.yml) :
`instance/inventories/<inventaire>/group_vars/all/vault.yml`.
Une clé par voûte, dans un fichier nommé d'après le dossier de l'écosystème, en minuscules :
```bash
install -m 600 /dev/null ~/.config/setops-vault-ops-monorg
$EDITOR ~/.config/setops-vault-ops-monorg # la phrase de passe, une ligne
python3 scripts/voutes.py etat # le moteur trouve-t-il chaque clé ?
```
Rien à exporter : le `Makefile` construit `ANSIBLE_VAULT_IDENTITY_LIST` avec
`scripts/voutes.py`. Créer une VM ouvre deux voûtes dans la même exécution (locataire et
hébergeur) : un seul `ANSIBLE_VAULT_PASSWORD_FILE` ne suffit pas.
Les clés n'existent que sur le poste. Les sortir sur un support chiffré :
[`exploitation/sortir-les-cles-du-poste.md`](exploitation/sortir-les-cles-du-poste.md).
## 6. Gabarit Debian 13 (une fois par grappe)
Créer une VM Debian 13 minimale, joignable par SSH avec clé, puis :
```bash
make preparer-modele
make verifier-modele
make nettoyer-modele CONFIRMER=true
```
Convertir la VM en gabarit Proxmox sous le nom enregistré par `make config`
(`proxmox_clone_source_nom`, `modeleSetOPS` par défaut). Un autre nom fait échouer le
clonage. Machine **q35/OVMF** : ne jamais convertir depuis i440fx.
Procédure : [`exploitation/procedure-template-debian13-proxmox.md`](exploitation/procedure-template-debian13-proxmox.md) ;
contenu justifié : [`exploitation/gabarit-debian13-justification.md`](exploitation/gabarit-debian13-justification.md).
## 7. Générer l'inventaire
```bash
make instancier # ce que le plan produit, en diff
make instancier-appliquer FORCE=1 # première génération seulement
make serveurs # VMID / IP dérivés
```
Les hôtes naissent en `etat: planifie`.
## 8. Créer et déployer
```bash
make creer-vm HOTE=infra-dns-01 # clone + cloud-init, attend que la VM réponde
# passer l'hôte en etat: actif dans instance/plan/serveurs.yml, puis :
make instancier-appliquer
make deployer HOTE=infra-dns-01 # couche par couche, dans l'ordre du graphe
```
Toute la flotte : `make flotte-creer CONFIRMER=true` puis `make deployer-tout CONFIRMER=true`,
ou `make reconstruire CONFIRMER=true` (créer puis déployer). Les déploiements ne visent que
les hôtes actifs.
## 9. Vérifier
```bash
make inventaire-verifier # registres, inventaire, gardes
make verifier # lint, tests, inventaire, ordre, flux, syntaxe, puis les preuves
make valider # recette sur la flotte déployée
```
## Configuration de référence
| Élément | Rôle | Défaut |
|---|---|---|
| `instance/` | lien vers le dépôt du locataire actif | — |
| `underlay.yml` | lien vers l'underlay du site actif | `underlay.yml` à la racine |
| `ansible.cfg` | configuration Ansible du moteur | dans le dépôt |
| `.ansible/` | répertoires temporaires d'Ansible | créé par `make` |
Variables d'environnement et de `make` : [`usage.md`](usage.md).
## Pannes connues au premier montage
| Symptôme | Cause | Remède |
|---|---|---|
| `Attempting to decrypt but no vault secrets found` | clé de voûte absente ou mal nommée | étape 5, `python3 scripts/voutes.py etat` |
| `make instancier-appliquer` refuse d'écrire | diff non vide, première génération | `FORCE=1` la première fois seulement |
| le clonage ne trouve pas sa source | nom du gabarit ≠ `proxmox_clone_source_nom` | renommer le gabarit ou refaire `make config` |
| une sortie d'Ansible vide, sans erreur | Ansible exige un tube sur sa sortie | `set -o pipefail; make … < /dev/null 2>&1 \| cat` |