2026-06-24 11:56:20 -04:00
# Set-OPS — moteur d'écosystèmes numériques souverains
2026-06-19 18:05:01 -04:00
2026-06-24 11:56:20 -04:00
**Set-OPS est un moteur Ansible générique** qui permet à un hébergeur de **construire et exploiter un écosystème numérique souverain** — DNS interne, AC/PKI, identité (LDAP + SSO), relais courriel, bases de données, observabilité, applications — sur sa propre grappe **Proxmox** , à partir d'un **plan déclaratif** .
2026-06-19 23:31:49 -04:00
Neutraliser le moteur pour partage public (100% neutre)
Suppression de toute trace Chezlepro de l'outil (roles, scripts, docs
publiques, exemples, LICENSE). Prouve par scan exhaustif : git grep vide
pour chezlepro, asgard/TrueNAS, supernet reel 10.1.x.
Corrige 5 defauts de genericite fonctionnels (motd, app.ini Forgejo,
organisation openldap, nom AC step-ca, et IP reelles codees en dur dans
les defaults de roles -> plage d'exemple 10.0.x). LICENSE -> Alliance
Boreale. Fichiers mainteneur + CHANGELOG conserves (par decision).
La separation moteur/instance tient : OPS-Chezlepro surcharge deja ses
vraies valeurs de topologie. Verifie : make verifier exit 0 (4 tests).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:58:00 -04:00
Le dépôt est le **moteur** (générique, partageable). Chaque déploiement réel est une **instance** (le plan + l'inventaire d'un hébergeur, dans son propre dépôt). Tu crées la tienne à partir d'un **modèle prêt à déployer** (`exemples/modeles/`).
2026-06-24 11:56:20 -04:00
> 👉 **Tu débarques avec une grappe Proxmox et tu veux monter ton écosystème ? Commence par [`QUICKSTART.md`](QUICKSTART.md).**
2026-06-24 12:46:08 -04:00
**Souveraineté jusqu'au bout : Set-OPS s'exploite entièrement à la main** — la doc, `make` et le GUI suffisent, **sans aucune IA** . L'outil libère de la dépendance aux géants ; il ne la remplace pas par une dépendance à une IA.
2026-06-24 11:56:20 -04:00
---
## Mission (la vision derrière l'outil)
2026-06-19 23:31:49 -04:00
Neutraliser le moteur pour partage public (100% neutre)
Suppression de toute trace Chezlepro de l'outil (roles, scripts, docs
publiques, exemples, LICENSE). Prouve par scan exhaustif : git grep vide
pour chezlepro, asgard/TrueNAS, supernet reel 10.1.x.
Corrige 5 defauts de genericite fonctionnels (motd, app.ini Forgejo,
organisation openldap, nom AC step-ca, et IP reelles codees en dur dans
les defaults de roles -> plage d'exemple 10.0.x). LICENSE -> Alliance
Boreale. Fichiers mainteneur + CHANGELOG conserves (par decision).
La separation moteur/instance tient : OPS-Chezlepro surcharge deja ses
vraies valeurs de topologie. Verifie : make verifier exit 0 (4 tests).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:58:00 -04:00
`Set-OPS` ne se limite plus à l'exploitation : il **définit et construit un écosystème numérique souverain** — une infrastructure interne auto-suffisante, sans dépendance SaaS, décrite en code et pilotée par des registres machine-lisibles qui font office de **source unique de vérité** (`instance/plan/serveurs.yml`, `instance/plan/applications.yml` , `instance/plan/bases-donnees.yml` , `instance/plan/domaines.yml` , `instance/plan/nomenclature.yml` , `docs/dependances-groupes.yml` ).
2026-06-22 19:58:44 -04:00
Piliers de l'écosystème :
- **identité** — machines (PKI / certificats) et utilisateurs (annuaire + SSO) ;
- **confiance** — autorité de certification interne (ACME) ;
- **nommage et adressage** — DNS interne et nomenclature dérivable ;
- **données** — bases relationnelles et cache, avec registre des connexions ;
- **communication** — relais courriel interne ;
- **observabilité et supervision** — métriques, journaux, tableaux de bord, supervision active ;
- **applicatif** — services internes (forge, etc.) et couche web.
L'état voulu est **déclaratif et convergent** (appliqué par les groupes Ansible), **souverain** par conception, mais **piloté par l'opérateur** (pas d'auto-remédiation : la boucle n'est pas fermée). Une grande partie est aujourd'hui *définie et validée* avant d'être déployée sur des VM réelles ; le template Debian 13 reste la fondation, pas la finalité.
Cadre et règles d'autorité : voir `AGENTS.md` (section « Mission et identité »).
2026-06-23 22:46:48 -04:00
## Le plan : on édite, l'inventaire se génère
`Set-OPS` se pilote par un **plan** , pas par l'édition directe de l'inventaire.
2026-06-24 09:16:18 -04:00
`instance/inventories/production/hosts.yml` est **généré** depuis le plan — **ne pas l'éditer à la main** .
2026-06-23 22:46:48 -04:00
```
éditer le PLAN → make instancier (revoir le diff) → make instancier-appliquer → make deployer
```
2026-06-24 09:16:18 -04:00
- **Plan** : `instance/plan/serveurs.yml` (les VM), `instance/plan/applications.yml` (les services et leurs liens), `instance/plan/bases-donnees.yml` , `instance/plan/domaines.yml` , dérivés via `instance/plan/nomenclature.yml` .
2026-06-23 22:46:48 -04:00
- **GUI** (`make inventaire-ui`) : vues **Serveurs** et **Applications** pour éditer, puis « Appliquer le plan » ; la vue **Inventaire** est en lecture seule.
- VMID / IP / VLAN sont **dérivés** de la `fonction` ; les groupes d'une VM sont dérivés des applications qui y tournent.
Guide complet : ** `docs/plan-et-generation.md` **.
2026-06-22 19:58:44 -04:00
## Portée transverse
Au-delà des piliers ci-dessus, le dépôt couvre des préoccupations transverses, communes à toutes les VM :
- templates de VM Proxmox (la fondation) ;
- groupes de conformité et durcissement ;
2026-06-20 15:17:46 -04:00
- maintenance ;
2026-06-22 19:58:44 -04:00
- sauvegardes.
2026-06-19 23:31:49 -04:00
2026-06-20 15:17:46 -04:00
## Premier chantier
2026-06-19 23:31:49 -04:00
2026-06-20 15:17:46 -04:00
Template Debian 13 Proxmox :
2026-06-19 23:31:49 -04:00
```text
2026-06-21 15:13:45 -04:00
playbooks/modeles_vm/debian13_proxmox_preparer.yml
playbooks/modeles_vm/debian13_proxmox_verifier.yml
playbooks/modeles_vm/debian13_proxmox_nettoyer.yml
2026-06-19 23:31:49 -04:00
```
2026-06-20 15:17:46 -04:00
## Principe
2026-06-19 23:31:49 -04:00
2026-06-20 15:17:46 -04:00
Le template contient seulement le socle commun.
2026-06-19 23:31:49 -04:00
2026-06-20 15:17:46 -04:00
Les services spécialisés seront installés ensuite sur les clones :
2026-06-19 23:31:49 -04:00
2026-06-20 15:17:46 -04:00
- NGINX ;
- PostgreSQL ;
- MariaDB ;
- Docker/Podman ;
- monitoring complet ;
- applications métier.
2026-06-21 15:13:45 -04:00
## Exploitation courante
Un `Makefile` fournit les commandes d'exploitation principales.
Afficher l'aide :
```bash
make
```
Valider le dépôt :
```bash
make verifier
```
Inspecter les inventaires :
```bash
make inventaire
Construire l'ecosysteme de services et outiller l'inventaire
Registres (source unique):
- docs/nomenclature.yml: domaines, VMID, plan d'adressage 10.1.0.0/16 segmente.
- docs/bases-donnees.yml: bases applicatives (1 appli -> 1 base -> 1 owner -> 1 DSN).
Roles de service:
- Reseau/edge/PKI/mail: nginx, step_ca, sendmail.
- Donnees/identite: postgresql (consommateur du registre BD), redis, openldap, keycloak.
- Observabilite: prometheus, loki, grafana.
- Supervision: icinga (coeur; Icinga Web 2 differe). Forge: forgejo.
Integrations clientes:
- clients_metriques, clients_journaux, clients_pki, clients_ldap, clients_smtp.
Inventaire et outillage:
- make inventaire-ui: refonte (cartes, theme sombre, onglets, vue Chaine VM->groupes->
playbooks->roles), saisie du provisioning, auto-proposition depuis la nomenclature,
deploiement securise (verifier/deployer, jeton anti-CSRF, verrou, mot de passe vault),
robustesse reseau (connexions fermees, favicon).
- Makefile: cible verifier-deploiement; detection d'un group_vars de production chiffre.
- Scission serveurs_web -> serveurs_web_frontaux/dorsaux; migration de l'adressage vers
10.1.x; retrait des hotes de test; planification des hotes; requirements.yml.
Chaque role valide en --syntax-check et ansible-lint (profil production).
Secrets references depuis Ansible Vault (jamais en clair); roles non testes live.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 18:06:11 -04:00
make hote-afficher HOTE=web-frontal-01
2026-06-21 15:13:45 -04:00
```
2026-06-21 20:35:03 -04:00
Ouvrir l'interface locale de gestion d'inventaire :
```bash
make inventaire-ui
```
2026-06-23 22:46:48 -04:00
Planifier une VM passe désormais par le **plan** , pas par l'édition de l'inventaire :
2026-06-21 20:47:44 -04:00
2026-06-24 09:16:18 -04:00
1. déclarer la VM dans `instance/plan/serveurs.yml` (vue **Serveurs** du GUI, ou `make serveurs` ) — `fonction` , `etat` , placement ; VMID/IP/VLAN sont dérivés ;
2. déclarer les services qui y tournent dans `instance/plan/applications.yml` (vue **Applications** ) ;
2026-06-23 22:46:48 -04:00
3. régénérer l'inventaire :
2026-06-21 15:13:45 -04:00
```bash
2026-06-23 22:46:48 -04:00
make instancier # génère + diff sémantique (que va-t-il changer ?)
2026-06-24 09:16:18 -04:00
make instancier-appliquer # régénère instance/inventories/production/hosts.yml
2026-06-21 15:13:45 -04:00
```
2026-06-23 22:46:48 -04:00
Les anciennes commandes `make hote-planifier` / `hote-ajouter` / `hote-groupes` éditaient l'inventaire **directement** ; elles sont **supplantées** par le plan (l'inventaire est généré, ne pas l'éditer à la main).
2026-06-21 15:13:45 -04:00
Chaque groupe opérationnel doit avoir son playbook homonyme dans `playbooks/groupes/` .
Mettre les noms de roles et playbooks au singulier
serveurs_* -> serveur_, clients_ -> client_, suffixes pluriels au
singulier (serveur_web_dorsal/frontal, client_metrique, client_journal).
Renommage par tokens exacts : repertoires de roles, playbooks de groupes,
group_vars, variables internes des roles (serveur_nginx_*, conformite
ansible-lint), groupes du plan, constantes de code, docs. Faux-amis
preserves (serveurs_bd, scripts/serveurs.py, fonctions Python). Groupes
d'etat gardes au pluriel (hotes_actifs/planifies, modeles_vm).
Valide : ansible-lint 0 echec (0 var-naming), diff vide de la generation,
node --check, tous les registres. Ajout de .ansible-lint excluant docs/
(registres de donnees, pas du contenu Ansible).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 23:18:52 -04:00
La conformité normale des VM passe par ces playbooks de groupes. Les rôles de socle et de durcissement sont appliqués par `serveur_debian` et `serveur_durci` , pas par des playbooks de couches séparés.
2026-06-21 15:13:45 -04:00
Mettre les noms de roles et playbooks au singulier
serveurs_* -> serveur_, clients_ -> client_, suffixes pluriels au
singulier (serveur_web_dorsal/frontal, client_metrique, client_journal).
Renommage par tokens exacts : repertoires de roles, playbooks de groupes,
group_vars, variables internes des roles (serveur_nginx_*, conformite
ansible-lint), groupes du plan, constantes de code, docs. Faux-amis
preserves (serveurs_bd, scripts/serveurs.py, fonctions Python). Groupes
d'etat gardes au pluriel (hotes_actifs/planifies, modeles_vm).
Valide : ansible-lint 0 echec (0 var-naming), diff vide de la generation,
node --check, tous les registres. Ajout de .ansible-lint excluant docs/
(registres de donnees, pas du contenu Ansible).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 23:18:52 -04:00
Les groupes opérationnels avec des hôtes, comme `serveur_web_frontal` ou `client_dns` , sont validés contre `playbooks/groupes/` par les commandes d'inventaire.
2026-06-21 20:35:03 -04:00
Le catalogue des services et intégrations prévus est dans `docs/catalogue-services.md` .
2026-06-21 21:31:03 -04:00
Les dépendances causales entre groupes sont dans `docs/dependances-groupes.yml` .
2026-06-21 21:56:28 -04:00
Le runbook du DNS interne initial est dans `docs/dns-interne.md` .
2026-06-21 20:35:03 -04:00
La nomenclature des noms de VM et des VMID est dans `docs/nomenclature-vm.md` .
2026-06-21 15:13:45 -04:00
Créer un clone depuis le modèle Debian 13 via l'API Proxmox :
```bash
make config
2026-06-24 18:52:04 -04:00
make creer-vm HOTE=web-frontal-01 # VMID/IP/VLAN/passerelle lus dans le plan
Construire l'ecosysteme de services et outiller l'inventaire
Registres (source unique):
- docs/nomenclature.yml: domaines, VMID, plan d'adressage 10.1.0.0/16 segmente.
- docs/bases-donnees.yml: bases applicatives (1 appli -> 1 base -> 1 owner -> 1 DSN).
Roles de service:
- Reseau/edge/PKI/mail: nginx, step_ca, sendmail.
- Donnees/identite: postgresql (consommateur du registre BD), redis, openldap, keycloak.
- Observabilite: prometheus, loki, grafana.
- Supervision: icinga (coeur; Icinga Web 2 differe). Forge: forgejo.
Integrations clientes:
- clients_metriques, clients_journaux, clients_pki, clients_ldap, clients_smtp.
Inventaire et outillage:
- make inventaire-ui: refonte (cartes, theme sombre, onglets, vue Chaine VM->groupes->
playbooks->roles), saisie du provisioning, auto-proposition depuis la nomenclature,
deploiement securise (verifier/deployer, jeton anti-CSRF, verrou, mot de passe vault),
robustesse reseau (connexions fermees, favicon).
- Makefile: cible verifier-deploiement; detection d'un group_vars de production chiffre.
- Scission serveurs_web -> serveurs_web_frontaux/dorsaux; migration de l'adressage vers
10.1.x; retrait des hotes de test; planification des hotes; requirements.yml.
Chaque role valide en --syntax-check et ansible-lint (profil production).
Secrets references depuis Ansible Vault (jamais en clair); roles non testes live.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 18:06:11 -04:00
make deployer HOTE=web-frontal-01
2026-06-21 15:13:45 -04:00
```
2026-06-24 18:52:04 -04:00
L'hôte doit d'abord être déclaré dans `instance/plan/serveurs.yml` et l'inventaire régénéré (`make instancier-appliquer`) : `creer-vm` ne prend que `HOTE` , le reste est dérivé.
2026-06-21 15:13:45 -04:00
Les valeurs Cloud-Init communes déjà présentes dans le modèle Proxmox sont héritées par les clones.
Préparer le golden template Debian 13 Proxmox :
```bash
make preparer-modele
make verifier-modele
```
Le nettoyage final du template est protégé :
```bash
make nettoyer-modele CONFIRMER=true
```
Déployer ou remettre en conformité une VM Debian clonée depuis le template :
```bash
Construire l'ecosysteme de services et outiller l'inventaire
Registres (source unique):
- docs/nomenclature.yml: domaines, VMID, plan d'adressage 10.1.0.0/16 segmente.
- docs/bases-donnees.yml: bases applicatives (1 appli -> 1 base -> 1 owner -> 1 DSN).
Roles de service:
- Reseau/edge/PKI/mail: nginx, step_ca, sendmail.
- Donnees/identite: postgresql (consommateur du registre BD), redis, openldap, keycloak.
- Observabilite: prometheus, loki, grafana.
- Supervision: icinga (coeur; Icinga Web 2 differe). Forge: forgejo.
Integrations clientes:
- clients_metriques, clients_journaux, clients_pki, clients_ldap, clients_smtp.
Inventaire et outillage:
- make inventaire-ui: refonte (cartes, theme sombre, onglets, vue Chaine VM->groupes->
playbooks->roles), saisie du provisioning, auto-proposition depuis la nomenclature,
deploiement securise (verifier/deployer, jeton anti-CSRF, verrou, mot de passe vault),
robustesse reseau (connexions fermees, favicon).
- Makefile: cible verifier-deploiement; detection d'un group_vars de production chiffre.
- Scission serveurs_web -> serveurs_web_frontaux/dorsaux; migration de l'adressage vers
10.1.x; retrait des hotes de test; planification des hotes; requirements.yml.
Chaque role valide en --syntax-check et ansible-lint (profil production).
Secrets references depuis Ansible Vault (jamais en clair); roles non testes live.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 18:06:11 -04:00
make deployer HOTE=web-frontal-01
2026-06-21 15:13:45 -04:00
```
Déployer ou remettre en conformité un groupe :
```bash
Mettre les noms de roles et playbooks au singulier
serveurs_* -> serveur_, clients_ -> client_, suffixes pluriels au
singulier (serveur_web_dorsal/frontal, client_metrique, client_journal).
Renommage par tokens exacts : repertoires de roles, playbooks de groupes,
group_vars, variables internes des roles (serveur_nginx_*, conformite
ansible-lint), groupes du plan, constantes de code, docs. Faux-amis
preserves (serveurs_bd, scripts/serveurs.py, fonctions Python). Groupes
d'etat gardes au pluriel (hotes_actifs/planifies, modeles_vm).
Valide : ansible-lint 0 echec (0 var-naming), diff vide de la generation,
node --check, tous les registres. Ajout de .ansible-lint excluant docs/
(registres de donnees, pas du contenu Ansible).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 23:18:52 -04:00
make deployer-groupe GROUPE=serveur_debian
2026-06-21 15:13:45 -04:00
```
2026-06-21 20:47:44 -04:00
Les déploiements de groupes ciblent automatiquement les hôtes actifs seulement.