Modèles : extraire les modèles assemblés vers un dépôt privé (Set-OPS-modeles)
Le public ne garde que le modèle générique 'socle' (preuve libre reproductible). Les modèles assemblés (identite/observabilite/forge/collaboration/presence-web/ integral) = actif commercial, déplacés dans Set-OPS-modeles (privé). Le moteur (rôles, machinerie) reste libre. NB : ces modèles restent dans l'HISTORIQUE git de ce dépôt — mettre Set-OPS-Public en visibilité privée sur le Forgejo, ou réécrire l'historique (git filter-repo). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
61a6526ffb
commit
a1cfe77b4a
47 changed files with 13 additions and 802 deletions
|
|
@ -1,11 +1,12 @@
|
||||||
# Modèles d'écosystèmes numériques
|
# Modèles d'écosystèmes numériques
|
||||||
|
|
||||||
Des **instances prêtes à déployer** : un hébergeur copie le modèle qui colle à son
|
Un **modèle générique prêt à déployer** : copier `socle`, le renseigner à ses
|
||||||
offre, le renseigne à ses couleurs (ou celles de son client), et instancie.
|
couleurs, instancier. Le socle souverain minimal — DNS interne, AC/PKI, edge TLS,
|
||||||
|
relais courriel — sur lequel on ajoute des modules.
|
||||||
|
|
||||||
## Utilisation
|
## Utilisation
|
||||||
```bash
|
```bash
|
||||||
cp -r exemples/modeles/<modele> ../mon-instance
|
cp -r exemples/modeles/socle ../mon-instance
|
||||||
# éditer mon-instance : intrants (domaine_interne, fuseau_horaire, organisation,
|
# éditer mon-instance : intrants (domaine_interne, fuseau_horaire, organisation,
|
||||||
# identite_realm), plan/nomenclature.yml (index de fédération + zones), domaines
|
# identite_realm), plan/nomenclature.yml (index de fédération + zones), domaines
|
||||||
cd <moteur Set-OPS>
|
cd <moteur Set-OPS>
|
||||||
|
|
@ -13,16 +14,14 @@ ln -s ../mon-instance instance # ou export SETOPS_INSTANCE=../mon-instanc
|
||||||
make instancier-appliquer FORCE=1 # première génération de l'inventaire
|
make instancier-appliquer FORCE=1 # première génération de l'inventaire
|
||||||
```
|
```
|
||||||
|
|
||||||
## Structure : socle + modules
|
## Modèles assemblés (dépôt privé)
|
||||||
Tout modèle part d'un **socle souverain** (DNS interne, AC/PKI, edge TLS, relais
|
Les modèles **assemblés** — combinaisons de modules prêtes pour des offres
|
||||||
courriel) et ajoute des **modules** selon l'offre.
|
(`identite`, `observabilite`, `forge`, `collaboration`, `presence-web`, `integral`) —
|
||||||
|
ne sont pas ici. Ils constituent un **actif à part**, dans un dépôt privé
|
||||||
|
(`Set-OPS-modeles`). Le **moteur** (rôles, machinerie) reste libre ; `socle` en est
|
||||||
|
la preuve reproductible.
|
||||||
|
|
||||||
| Modèle | = socle + | État |
|
| Modèle | = socle + | Où |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `socle` | (rien) | ✅ |
|
| `socle` | (rien) — le socle générique | ✅ public (ici) |
|
||||||
| `presence-web` | web (frontal statique + dorsal dynamique) + données | ✅ |
|
| identite · observabilite · forge · collaboration · presence-web · integral | modules assemblés | 🔒 privé |
|
||||||
| `forge` | Forgejo + données | ✅ |
|
|
||||||
| `identite` | LDAP + Keycloak (SSO) | ✅ |
|
|
||||||
| `observabilite` | Prometheus/Loki/Grafana + Icinga | ✅ |
|
|
||||||
| `collaboration` | identité + Nextcloud + Collabora | ✅ |
|
|
||||||
| `integral` | tout | ✅ |
|
|
||||||
|
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
# Modèle : collaboration
|
|
||||||
|
|
||||||
Socle + identité + **collaboration** — **8 VM** : le modèle `identite`
|
|
||||||
(socle infra + PostgreSQL/Redis + OpenLDAP + Keycloak) **+ un nœud `collab`**
|
|
||||||
exécutant **Nextcloud** (fichiers, documents, agendas, contacts) et **Collabora
|
|
||||||
Online** (édition de documents, WOPI). SSO Keycloak, PG chiffré, exposés via l'edge.
|
|
||||||
|
|
||||||
C'est le cœur des offres **maison-obnl** (OBNL/coops) et **cabinet** (PME de
|
|
||||||
professionnels) : le remplaçant souverain de Google Workspace / Microsoft 365.
|
|
||||||
|
|
||||||
Zones : Frontière (16) · Identité (17) · Données (18) · Services-infra (19) ·
|
|
||||||
**Collaboration (20)**. VMID `ip-miroir`.
|
|
||||||
|
|
||||||
## Exposé
|
|
||||||
- `cloud.<domaine>` → Nextcloud (collab-01:80)
|
|
||||||
- `bureau.<domaine>` → Collabora (collab-01:9980, **WebSocket** auto)
|
|
||||||
|
|
||||||
Les SAN du cert edge et le plancher /etc/hosts sont **dérivés du plan** (aucune
|
|
||||||
liste manuelle) ; le vhost Collabora est WebSocket-aware via `websocket: true`.
|
|
||||||
|
|
||||||
## Secrets de voûte requis (Ansible Vault)
|
|
||||||
```yaml
|
|
||||||
vault_bd_nextcloud: "..." # mot de passe BD de l'utilisateur nextcloud
|
|
||||||
vault_nextcloud_admin: "..." # mot de passe admin Nextcloud initial
|
|
||||||
vault_nextcloud_oidc: "..." # secret du client OIDC 'nextcloud' (= côté Keycloak)
|
|
||||||
```
|
|
||||||
(plus ceux du modèle `identite` : vault_bd_keycloak, vault_keycloak_admin, PKI…)
|
|
||||||
|
|
||||||
## Utilisation
|
|
||||||
```bash
|
|
||||||
cp -r exemples/modeles/collaboration ../OPS-<tenant>
|
|
||||||
# éditer : intrants (domaine_interne, organisation, identite_realm),
|
|
||||||
# nomenclature.yml (index unique + supernet du tenant), domaines
|
|
||||||
ln -s ../OPS-<tenant> instance
|
|
||||||
make instancier-appliquer FORCE=1
|
|
||||||
```
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
domaine_interne: "exemple.internal"
|
|
||||||
fuseau_horaire: "America/Toronto"
|
|
||||||
organisation: "Exemple"
|
|
||||||
identite_realm: "exemple"
|
|
||||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
---
|
|
||||||
# Client OIDC 'nextcloud' enregistre dans le realm par le role serveur_keycloak.
|
|
||||||
# Le secret reference la meme variable de voute que l'app (vault_nextcloud_oidc).
|
|
||||||
serveur_keycloak_clients:
|
|
||||||
- clientId: nextcloud
|
|
||||||
redirect_uris:
|
|
||||||
- "https://cloud.{{ domaine_interne }}/apps/user_oidc/code"
|
|
||||||
- "https://cloud.{{ domaine_interne }}/*"
|
|
||||||
web_origins:
|
|
||||||
- "https://cloud.{{ domaine_interne }}"
|
|
||||||
secret: "{{ vault_nextcloud_oidc }}"
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
||||||
---
|
|
||||||
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 }
|
|
||||||
openldap: { groupe: serveur_openldap, hote: id-ldap-01 }
|
|
||||||
postgresql: { groupe: serveur_postgresql, hote: data-sql-01 }
|
|
||||||
redis: { groupe: serveur_redis, hote: data-sql-01 }
|
|
||||||
keycloak:
|
|
||||||
groupe: serveur_keycloak
|
|
||||||
hote: id-sso-01
|
|
||||||
port: 8080
|
|
||||||
expose: [keycloak.exemple.internal]
|
|
||||||
nextcloud:
|
|
||||||
groupe: serveur_nextcloud
|
|
||||||
hote: collab-01
|
|
||||||
port: 80
|
|
||||||
expose: [cloud.exemple.internal]
|
|
||||||
collabora:
|
|
||||||
groupe: serveur_collabora
|
|
||||||
hote: collab-01
|
|
||||||
port: 9980
|
|
||||||
websocket: true
|
|
||||||
expose: [bureau.exemple.internal]
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
serveurs_bd:
|
|
||||||
sql-01: { type: postgres, hote: data-sql-01, port: 5432, groupe: serveur_postgresql }
|
|
||||||
bases_donnees:
|
|
||||||
keycloak:
|
|
||||||
serveur: sql-01
|
|
||||||
base: keycloak
|
|
||||||
proprietaire: keycloak
|
|
||||||
secret: vault_bd_keycloak
|
|
||||||
consommateur: serveur_keycloak
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
nextcloud:
|
|
||||||
serveur: sql-01
|
|
||||||
base: nextcloud
|
|
||||||
proprietaire: nextcloud
|
|
||||||
secret: vault_bd_nextcloud
|
|
||||||
consommateur: serveur_nextcloud
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
domaines_publics:
|
|
||||||
exemple.ca: { autorite: primaire-cache, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
exemple.internal: { autorite: interne, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE « collaboration » — socle + identité + collaboration (8 VM).
|
|
||||||
# = identite + un nœud collab (Nextcloud + Collabora). Débloque maison-obnl/cabinet.
|
|
||||||
# index : ⚠️ REMPLACER par l'index unique du tenant.
|
|
||||||
index: 1
|
|
||||||
supernet: 10.11.0.0/16
|
|
||||||
vmid_schema: ip-miroir
|
|
||||||
cidr_hote: 24
|
|
||||||
reservations: { passerelle: 1, reserve_min: 2, reserve_max: 9 }
|
|
||||||
categories:
|
|
||||||
1: { libelle: Frontiere, vlan: 16, sous_reseau: 10.11.16.0/24, passerelle: 10.11.16.1 }
|
|
||||||
2: { libelle: Identite, vlan: 17, sous_reseau: 10.11.17.0/24, passerelle: 10.11.17.1 }
|
|
||||||
3: { libelle: Donnees, vlan: 18, sous_reseau: 10.11.18.0/24, passerelle: 10.11.18.1 }
|
|
||||||
4: { libelle: Services-infra, vlan: 19, sous_reseau: 10.11.19.0/24, passerelle: 10.11.19.1 }
|
|
||||||
5: { libelle: Collaboration, vlan: 20, sous_reseau: 10.11.20.0/24, passerelle: 10.11.20.1 }
|
|
||||||
fonctions:
|
|
||||||
infra-edge: { categorie: 1, service: 1 }
|
|
||||||
id-ldap: { categorie: 2, service: 1 }
|
|
||||||
id-sso: { categorie: 2, service: 2 }
|
|
||||||
data-sql: { categorie: 3, service: 1 }
|
|
||||||
infra-dns: { categorie: 4, service: 1 }
|
|
||||||
infra-pki: { categorie: 4, service: 2 }
|
|
||||||
infra-mail: { categorie: 4, service: 3 }
|
|
||||||
collab: { categorie: 5, service: 1 }
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
serveurs:
|
|
||||||
infra-pki-01: { fonction: infra-pki, etat: planifie, disque: 32G, integrations: [client_backup] }
|
|
||||||
infra-edge-01: { fonction: infra-edge, etat: planifie, integrations: [client_pki] }
|
|
||||||
infra-mail-01: { fonction: infra-mail, etat: planifie, integrations: [client_pki, client_backup] }
|
|
||||||
infra-dns-01: { fonction: infra-dns, etat: planifie, disque: 40G, integrations: [client_pki] }
|
|
||||||
id-ldap-01: { fonction: id-ldap, etat: planifie, integrations: [client_pki, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
id-sso-01: { fonction: id-sso, etat: planifie, integrations: [client_pki] }
|
|
||||||
data-sql-01: { fonction: data-sql, etat: planifie, integrations: [client_pki, client_unbound, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
collab-01: { fonction: collab, etat: planifie, disque: 40G, integrations: [client_pki, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Modèle : forge
|
|
||||||
|
|
||||||
Base + données + **forge git** — **6 VM** : socle infra + PostgreSQL/Redis +
|
|
||||||
Forgejo (dépôts git, exposé via l'edge).
|
|
||||||
|
|
||||||
Zones : Frontière (16) · Données (18) · Services-infra (19) · Applications (21).
|
|
||||||
SSO non inclus — ajouter le modèle `identite` pour « Se connecter avec ... ».
|
|
||||||
VMID `ip-miroir`. Copier vers `OPS-<tenant>`, adapter `index`/domaine/intrants.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
domaine_interne: "exemple.internal"
|
|
||||||
fuseau_horaire: "America/Toronto"
|
|
||||||
organisation: "Exemple"
|
|
||||||
identite_realm: "exemple"
|
|
||||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
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.exemple.internal] }
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
serveurs_bd:
|
|
||||||
sql-01: { type: postgres, hote: data-sql-01, port: 5432, groupe: serveur_postgresql }
|
|
||||||
bases_donnees:
|
|
||||||
forgejo:
|
|
||||||
serveur: sql-01
|
|
||||||
base: forgejo
|
|
||||||
proprietaire: forgejo
|
|
||||||
secret: vault_bd_forgejo
|
|
||||||
consommateur: serveur_forgejo
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
domaines_publics:
|
|
||||||
exemple.ca: { autorite: primaire-cache, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
exemple.internal: { autorite: interne, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE « forge » — base + données + forge git (6 VM) : Forgejo.
|
|
||||||
# index : ⚠️ REMPLACER par l'index unique du tenant.
|
|
||||||
index: 1
|
|
||||||
supernet: 10.11.0.0/16
|
|
||||||
vmid_schema: ip-miroir
|
|
||||||
cidr_hote: 24
|
|
||||||
reservations: { passerelle: 1, reserve_min: 2, reserve_max: 9 }
|
|
||||||
categories:
|
|
||||||
1: { libelle: Frontiere, vlan: 16, sous_reseau: 10.11.16.0/24, passerelle: 10.11.16.1 }
|
|
||||||
3: { libelle: Donnees, vlan: 18, sous_reseau: 10.11.18.0/24, passerelle: 10.11.18.1 }
|
|
||||||
4: { libelle: Services-infra, vlan: 19, sous_reseau: 10.11.19.0/24, passerelle: 10.11.19.1 }
|
|
||||||
6: { libelle: Applications, vlan: 21, sous_reseau: 10.11.21.0/24, passerelle: 10.11.21.1 }
|
|
||||||
fonctions:
|
|
||||||
infra-edge: { categorie: 1, service: 1 }
|
|
||||||
data-sql: { categorie: 3, service: 1 }
|
|
||||||
infra-dns: { categorie: 4, service: 1 }
|
|
||||||
infra-pki: { categorie: 4, service: 2 }
|
|
||||||
infra-mail: { categorie: 4, service: 3 }
|
|
||||||
forge: { categorie: 6, service: 1 }
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
serveurs:
|
|
||||||
infra-pki-01: { fonction: infra-pki, etat: planifie, disque: 32G, integrations: [client_backup] }
|
|
||||||
infra-edge-01: { fonction: infra-edge, etat: planifie, integrations: [client_pki] }
|
|
||||||
infra-mail-01: { fonction: infra-mail, etat: planifie, integrations: [client_pki, client_backup] }
|
|
||||||
infra-dns-01: { fonction: infra-dns, etat: planifie, disque: 40G, integrations: [client_pki] }
|
|
||||||
data-sql-01: { fonction: data-sql, etat: planifie, integrations: [client_pki, client_unbound, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
forge-01: { fonction: forge, etat: planifie, integrations: [client_pki, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
# Modèle : identite
|
|
||||||
|
|
||||||
Base + données + **identité** — **7 VM** : socle infra + PostgreSQL/Redis +
|
|
||||||
OpenLDAP (annuaire, source de vérité) + Keycloak (SSO/OIDC, exposé via l'edge).
|
|
||||||
|
|
||||||
Zones : Frontière (16) · Identité (17) · Données (18) · Services-infra (19).
|
|
||||||
VMID `ip-miroir`. Copier vers `OPS-<tenant>`, adapter `index`/domaine/intrants.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
domaine_interne: "exemple.internal"
|
|
||||||
fuseau_horaire: "America/Toronto"
|
|
||||||
organisation: "Exemple"
|
|
||||||
identite_realm: "exemple"
|
|
||||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
---
|
|
||||||
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 }
|
|
||||||
openldap: { groupe: serveur_openldap, hote: id-ldap-01 }
|
|
||||||
postgresql: { groupe: serveur_postgresql, hote: data-sql-01 }
|
|
||||||
redis: { groupe: serveur_redis, hote: data-sql-01 }
|
|
||||||
keycloak:
|
|
||||||
groupe: serveur_keycloak
|
|
||||||
hote: id-sso-01
|
|
||||||
port: 8080
|
|
||||||
expose: [keycloak.exemple.internal]
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
serveurs_bd:
|
|
||||||
sql-01: { type: postgres, hote: data-sql-01, port: 5432, groupe: serveur_postgresql }
|
|
||||||
bases_donnees:
|
|
||||||
keycloak:
|
|
||||||
serveur: sql-01
|
|
||||||
base: keycloak
|
|
||||||
proprietaire: keycloak
|
|
||||||
secret: vault_bd_keycloak
|
|
||||||
consommateur: serveur_keycloak
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
domaines_publics:
|
|
||||||
exemple.ca: { autorite: primaire-cache, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
exemple.internal: { autorite: interne, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE « identite » — base + données + identité (7 VM) : OpenLDAP + Keycloak.
|
|
||||||
# index : ⚠️ REMPLACER par l'index unique du tenant.
|
|
||||||
index: 1
|
|
||||||
supernet: 10.11.0.0/16
|
|
||||||
vmid_schema: ip-miroir
|
|
||||||
cidr_hote: 24
|
|
||||||
reservations: { passerelle: 1, reserve_min: 2, reserve_max: 9 }
|
|
||||||
categories:
|
|
||||||
1: { libelle: Frontiere, vlan: 16, sous_reseau: 10.11.16.0/24, passerelle: 10.11.16.1 }
|
|
||||||
2: { libelle: Identite, vlan: 17, sous_reseau: 10.11.17.0/24, passerelle: 10.11.17.1 }
|
|
||||||
3: { libelle: Donnees, vlan: 18, sous_reseau: 10.11.18.0/24, passerelle: 10.11.18.1 }
|
|
||||||
4: { libelle: Services-infra, vlan: 19, sous_reseau: 10.11.19.0/24, passerelle: 10.11.19.1 }
|
|
||||||
fonctions:
|
|
||||||
infra-edge: { categorie: 1, service: 1 }
|
|
||||||
id-ldap: { categorie: 2, service: 1 }
|
|
||||||
id-sso: { categorie: 2, service: 2 }
|
|
||||||
data-sql: { categorie: 3, service: 1 }
|
|
||||||
infra-dns: { categorie: 4, service: 1 }
|
|
||||||
infra-pki: { categorie: 4, service: 2 }
|
|
||||||
infra-mail: { categorie: 4, service: 3 }
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
serveurs:
|
|
||||||
infra-pki-01: { fonction: infra-pki, etat: planifie, disque: 32G, integrations: [client_backup] }
|
|
||||||
infra-edge-01: { fonction: infra-edge, etat: planifie, integrations: [client_pki] }
|
|
||||||
infra-mail-01: { fonction: infra-mail, etat: planifie, integrations: [client_pki, client_backup] }
|
|
||||||
infra-dns-01: { fonction: infra-dns, etat: planifie, disque: 40G, integrations: [client_pki] }
|
|
||||||
id-ldap-01: { fonction: id-ldap, etat: planifie, integrations: [client_pki, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
id-sso-01: { fonction: id-sso, etat: planifie, integrations: [client_pki] }
|
|
||||||
data-sql-01: { fonction: data-sql, etat: planifie, integrations: [client_pki, client_unbound, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
# Modèle : integral
|
|
||||||
|
|
||||||
Écosystème souverain **complet et éprouvé** — le socle de référence pour un nouveau tenant.
|
|
||||||
|
|
||||||
**12 VM** réparties en **6 zones de sécurité** (un /24 + VLAN chacune) :
|
|
||||||
|
|
||||||
| Zone | VLAN | Fonctions |
|
|
||||||
|---|---|---|
|
|
||||||
| Frontière | 16 | infra-edge (nginx), edge-mta (Postfix/rspamd) |
|
|
||||||
| Identité | 17 | id-ldap (OpenLDAP), id-sso (Keycloak) |
|
|
||||||
| Données | 18 | data-sql (PostgreSQL/Redis), sauvegarde (restic) |
|
|
||||||
| Services-infra | 19 | infra-dns (PowerDNS), infra-pki (step-ca), infra-mail (Dovecot) |
|
|
||||||
| Observabilité | 20 | obs (Prometheus/Loki/Grafana), sup (Icinga + BPM) |
|
|
||||||
| Applications | 21 | forge (Forgejo) |
|
|
||||||
|
|
||||||
## Pour instancier un tenant
|
|
||||||
1. Copier ce dépôt-modèle vers `OPS-<votre-tenant>` (dépôt d'instance autonome).
|
|
||||||
2. Adapter :
|
|
||||||
- `plan/nomenclature.yml` : **`index`** (identifiant unique du tenant → préfixe VMID + supernet `10.(10+index).0.0/16`) et les `sous_reseau`/`passerelle` des 6 zones.
|
|
||||||
- `inventories/production/group_vars/all.yml` : `domaine_interne`, `fuseau_horaire`, `organisation`, `identite_realm`.
|
|
||||||
- `plan/domaines.yml` et les FQDN d'`expose` dans `plan/applications.yml`.
|
|
||||||
3. Pointer le sélecteur (`instance → OPS-<tenant>`) puis `make instancier`.
|
|
||||||
|
|
||||||
## Dérivations automatiques
|
|
||||||
Le nom d'un serveur (`data-sql-01`) + la nomenclature suffisent : **VMID, IP, VLAN, passerelle** sont dérivés — rien à saisir. Le VMID suit le schéma **`ip-miroir`** (9 chiffres `I·VVV·HHH·NN` = index·VLAN·octet-hôte·séquence : il *contient* l'IP + le tenant).
|
|
||||||
|
|
||||||
Voir `exemples/modeles/README.md` pour le mécanisme général.
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE integral — intrants d'identité de l'instance. À adapter à VOTRE tenant.
|
|
||||||
domaine_interne: "exemple.internal" # <- VOTRE domaine DNS interne (.internal)
|
|
||||||
fuseau_horaire: "America/Toronto" # <- fuseau de l'organisation
|
|
||||||
organisation: "Exemple" # <- nom (annuaire LDAP, certificats)
|
|
||||||
identite_realm: "exemple" # <- realm SSO Keycloak de ce tenant
|
|
||||||
|
|
||||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
# Client OIDC 'nextcloud' enregistre dans le realm par le role serveur_keycloak.
|
|
||||||
# (Modele integral : les autres clients — forgejo/grafana/icingaweb2 — sont a
|
|
||||||
# ajouter ici selon les apps exposees, avec leurs secrets de voute respectifs.)
|
|
||||||
serveur_keycloak_clients:
|
|
||||||
- clientId: nextcloud
|
|
||||||
redirect_uris:
|
|
||||||
- "https://cloud.{{ domaine_interne }}/apps/user_oidc/code"
|
|
||||||
- "https://cloud.{{ domaine_interne }}/*"
|
|
||||||
web_origins:
|
|
||||||
- "https://cloud.{{ domaine_interne }}"
|
|
||||||
secret: "{{ vault_nextcloud_oidc }}"
|
|
||||||
|
|
@ -1,89 +0,0 @@
|
||||||
# MODÈLE integral — applications (application = entité pivot).
|
|
||||||
# Adapter les FQDN d'exposition à VOTRE domaine interne.
|
|
||||||
---
|
|
||||||
applications:
|
|
||||||
dovecot:
|
|
||||||
groupe: serveur_dovecot
|
|
||||||
hote: infra-mail-01
|
|
||||||
postfix:
|
|
||||||
groupe: serveur_postfix
|
|
||||||
hote: edge-mta-01
|
|
||||||
liens:
|
|
||||||
- vers: dovecot
|
|
||||||
role: mailstore
|
|
||||||
- vers: rspamd
|
|
||||||
role: milter
|
|
||||||
rspamd:
|
|
||||||
groupe: serveur_rspamd
|
|
||||||
hote: edge-mta-01
|
|
||||||
postgresql:
|
|
||||||
groupe: serveur_postgresql
|
|
||||||
hote: data-sql-01
|
|
||||||
redis:
|
|
||||||
groupe: serveur_redis
|
|
||||||
hote: data-sql-01
|
|
||||||
backup:
|
|
||||||
groupe: serveur_backup
|
|
||||||
hote: backup-01
|
|
||||||
keycloak:
|
|
||||||
groupe: serveur_keycloak
|
|
||||||
hote: id-sso-01
|
|
||||||
port: 8080
|
|
||||||
expose:
|
|
||||||
- keycloak.exemple.internal
|
|
||||||
loki:
|
|
||||||
groupe: serveur_loki
|
|
||||||
hote: obs-01
|
|
||||||
prometheus:
|
|
||||||
groupe: serveur_prometheus
|
|
||||||
hote: obs-01
|
|
||||||
grafana:
|
|
||||||
groupe: serveur_grafana
|
|
||||||
hote: obs-01
|
|
||||||
port: 3000
|
|
||||||
expose:
|
|
||||||
- grafana.exemple.internal
|
|
||||||
forgejo:
|
|
||||||
groupe: serveur_forgejo
|
|
||||||
hote: forge-01
|
|
||||||
port: 3000
|
|
||||||
expose:
|
|
||||||
- forge.exemple.internal
|
|
||||||
nextcloud:
|
|
||||||
groupe: serveur_nextcloud
|
|
||||||
hote: collab-01
|
|
||||||
port: 80
|
|
||||||
expose:
|
|
||||||
- cloud.exemple.internal
|
|
||||||
collabora:
|
|
||||||
groupe: serveur_collabora
|
|
||||||
hote: collab-01
|
|
||||||
port: 9980
|
|
||||||
websocket: true
|
|
||||||
expose:
|
|
||||||
- bureau.exemple.internal
|
|
||||||
icinga:
|
|
||||||
groupe: serveur_icinga
|
|
||||||
hote: sup-01
|
|
||||||
icingaweb2:
|
|
||||||
groupe: serveur_icingaweb2
|
|
||||||
hote: sup-01
|
|
||||||
port: 8080
|
|
||||||
oauth2_proxy:
|
|
||||||
groupe: serveur_oauth2_proxy
|
|
||||||
hote: sup-01
|
|
||||||
port: 4180
|
|
||||||
expose:
|
|
||||||
- icinga.exemple.internal
|
|
||||||
openldap:
|
|
||||||
groupe: serveur_openldap
|
|
||||||
hote: id-ldap-01
|
|
||||||
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
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
# MODÈLE integral — bases de données. 'secret' nomme une variable Ansible Vault.
|
|
||||||
---
|
|
||||||
serveurs_bd:
|
|
||||||
sql-01:
|
|
||||||
type: postgres
|
|
||||||
hote: data-sql-01
|
|
||||||
port: 5432
|
|
||||||
groupe: serveur_postgresql
|
|
||||||
bases_donnees:
|
|
||||||
keycloak:
|
|
||||||
serveur: sql-01
|
|
||||||
base: keycloak
|
|
||||||
proprietaire: keycloak
|
|
||||||
secret: vault_bd_keycloak
|
|
||||||
consommateur: serveur_keycloak
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
forgejo:
|
|
||||||
serveur: sql-01
|
|
||||||
base: forgejo
|
|
||||||
proprietaire: forgejo
|
|
||||||
secret: vault_bd_forgejo
|
|
||||||
consommateur: serveur_forgejo
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
icingadb:
|
|
||||||
serveur: sql-01
|
|
||||||
base: icingadb
|
|
||||||
proprietaire: icingadb
|
|
||||||
secret: vault_bd_icingadb
|
|
||||||
consommateur: serveur_icinga
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
nextcloud:
|
|
||||||
serveur: sql-01
|
|
||||||
base: nextcloud
|
|
||||||
proprietaire: nextcloud
|
|
||||||
secret: vault_bd_nextcloud
|
|
||||||
consommateur: serveur_nextcloud
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE integral — domaines. Adapter à VOS domaines public/interne.
|
|
||||||
domaines_publics:
|
|
||||||
exemple.ca:
|
|
||||||
autorite: primaire-cache
|
|
||||||
edge: serveur_nginx
|
|
||||||
secondaires: []
|
|
||||||
dnssec: false
|
|
||||||
# Domaine interne : parent des expositions derrière l'edge nginx interne.
|
|
||||||
# Utiliser .internal (et non .local, réservé au mDNS).
|
|
||||||
exemple.internal:
|
|
||||||
autorite: interne
|
|
||||||
edge: serveur_nginx
|
|
||||||
secondaires: []
|
|
||||||
dnssec: false
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE « integral » — écosystème souverain COMPLET (12 VM).
|
|
||||||
# Copier ce dépôt-modèle vers OPS-<votre-tenant>, puis adapter index / supernet / domaine.
|
|
||||||
#
|
|
||||||
# index : identifiant UNIQUE du tenant dans la fédération (1, 2, 3…).
|
|
||||||
# Détermine le préfixe VMID (schéma ip-miroir) et le supernet 10.(10+index).0.0/16.
|
|
||||||
# ⚠️ REMPLACER par l'index de VOTRE tenant (évite toute collision IP/VMID).
|
|
||||||
# vmid_schema: ip-miroir → VMID 9 chiffres I·VVV·HHH·NN (index·VLAN·octet-hôte·séquence) :
|
|
||||||
# le VMID contient littéralement l'IP + le tenant. Lecture directe.
|
|
||||||
index: 1
|
|
||||||
supernet: 10.11.0.0/16
|
|
||||||
vmid_schema: ip-miroir
|
|
||||||
cidr_hote: 24
|
|
||||||
reservations:
|
|
||||||
passerelle: 1
|
|
||||||
reserve_min: 2
|
|
||||||
reserve_max: 9
|
|
||||||
# 6 ZONES de sécurité, un /24 + VLAN chacune (VLAN = 3e octet), dans 10.(10+index).16.0/20.
|
|
||||||
categories:
|
|
||||||
1:
|
|
||||||
libelle: Frontiere
|
|
||||||
vlan: 16
|
|
||||||
sous_reseau: 10.11.16.0/24
|
|
||||||
passerelle: 10.11.16.1
|
|
||||||
2:
|
|
||||||
libelle: Identite
|
|
||||||
vlan: 17
|
|
||||||
sous_reseau: 10.11.17.0/24
|
|
||||||
passerelle: 10.11.17.1
|
|
||||||
3:
|
|
||||||
libelle: Donnees
|
|
||||||
vlan: 18
|
|
||||||
sous_reseau: 10.11.18.0/24
|
|
||||||
passerelle: 10.11.18.1
|
|
||||||
4:
|
|
||||||
libelle: Services-infra
|
|
||||||
vlan: 19
|
|
||||||
sous_reseau: 10.11.19.0/24
|
|
||||||
passerelle: 10.11.19.1
|
|
||||||
5:
|
|
||||||
libelle: Observabilite
|
|
||||||
vlan: 20
|
|
||||||
sous_reseau: 10.11.20.0/24
|
|
||||||
passerelle: 10.11.20.1
|
|
||||||
6:
|
|
||||||
libelle: Applications
|
|
||||||
vlan: 21
|
|
||||||
sous_reseau: 10.11.21.0/24
|
|
||||||
passerelle: 10.11.21.1
|
|
||||||
fonctions:
|
|
||||||
# Zone 1 — Frontière
|
|
||||||
infra-edge: { categorie: 1, service: 1 }
|
|
||||||
edge-mta: { categorie: 1, service: 2 }
|
|
||||||
# Zone 2 — Identité
|
|
||||||
id-ldap: { categorie: 2, service: 1 }
|
|
||||||
id-sso: { categorie: 2, service: 2 }
|
|
||||||
# Zone 3 — Données
|
|
||||||
data-sql: { categorie: 3, service: 1 }
|
|
||||||
sauvegarde: { categorie: 3, service: 2 }
|
|
||||||
# Zone 4 — Services-infra
|
|
||||||
infra-dns: { categorie: 4, service: 1 }
|
|
||||||
infra-pki: { categorie: 4, service: 2 }
|
|
||||||
infra-mail: { categorie: 4, service: 3 }
|
|
||||||
# Zone 5 — Observabilité
|
|
||||||
obs: { categorie: 5, service: 1 }
|
|
||||||
sup: { categorie: 5, service: 2 }
|
|
||||||
# Zone 6 — Applications
|
|
||||||
forge: { categorie: 6, service: 1 }
|
|
||||||
collab: { categorie: 6, service: 2 }
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
||||||
# MODÈLE integral — registre des serveurs (12 VM). etat: planifie (template).
|
|
||||||
# VMID/IP/VLAN/passerelle DERIVES de la fonction via plan/nomenclature.yml.
|
|
||||||
---
|
|
||||||
serveurs:
|
|
||||||
infra-pki-01:
|
|
||||||
fonction: infra-pki
|
|
||||||
etat: planifie
|
|
||||||
disque: 32G
|
|
||||||
integrations:
|
|
||||||
- client_backup
|
|
||||||
infra-edge-01:
|
|
||||||
fonction: infra-edge
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
infra-mail-01:
|
|
||||||
fonction: infra-mail
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
- client_backup
|
|
||||||
infra-dns-01:
|
|
||||||
fonction: infra-dns
|
|
||||||
etat: planifie
|
|
||||||
disque: 40G
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
id-ldap-01:
|
|
||||||
fonction: id-ldap
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
- client_backup
|
|
||||||
- client_metrique
|
|
||||||
- client_journal
|
|
||||||
- client_smtp
|
|
||||||
id-sso-01:
|
|
||||||
fonction: id-sso
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
data-sql-01:
|
|
||||||
fonction: data-sql
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
- client_unbound
|
|
||||||
- client_backup
|
|
||||||
- client_metrique
|
|
||||||
- client_journal
|
|
||||||
- client_smtp
|
|
||||||
backup-01:
|
|
||||||
fonction: sauvegarde
|
|
||||||
etat: planifie
|
|
||||||
disque: 64G
|
|
||||||
obs-01:
|
|
||||||
fonction: obs
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
- client_metrique
|
|
||||||
- client_journal
|
|
||||||
- client_smtp
|
|
||||||
sup-01:
|
|
||||||
fonction: sup
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
forge-01:
|
|
||||||
fonction: forge
|
|
||||||
etat: planifie
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
- client_backup
|
|
||||||
- client_metrique
|
|
||||||
- client_journal
|
|
||||||
- client_smtp
|
|
||||||
collab-01:
|
|
||||||
fonction: collab
|
|
||||||
etat: planifie
|
|
||||||
disque: 40G
|
|
||||||
integrations:
|
|
||||||
- client_pki
|
|
||||||
- client_backup
|
|
||||||
- client_metrique
|
|
||||||
- client_journal
|
|
||||||
- client_smtp
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
# Modèle : observabilite
|
|
||||||
|
|
||||||
Base + données + **observabilité/supervision** — **7 VM** : socle infra + PostgreSQL/
|
|
||||||
Redis + Prometheus/Loki/Grafana (métriques & logs) + Icinga/BPM (supervision stratégique).
|
|
||||||
|
|
||||||
Zones : Frontière (16) · Données (18) · Services-infra (19) · Observabilité (20).
|
|
||||||
SSO non inclus (auth locale) — ajouter le modèle `identite` pour fédérer.
|
|
||||||
VMID `ip-miroir`. Copier vers `OPS-<tenant>`, adapter `index`/domaine/intrants.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
domaine_interne: "exemple.internal"
|
|
||||||
fuseau_horaire: "America/Toronto"
|
|
||||||
organisation: "Exemple"
|
|
||||||
identite_realm: "exemple"
|
|
||||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
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 }
|
|
||||||
loki: { groupe: serveur_loki, hote: obs-01 }
|
|
||||||
prometheus: { groupe: serveur_prometheus, hote: obs-01 }
|
|
||||||
grafana: { groupe: serveur_grafana, hote: obs-01, port: 3000, expose: [grafana.exemple.internal] }
|
|
||||||
icinga: { groupe: serveur_icinga, hote: sup-01 }
|
|
||||||
icingaweb2: { groupe: serveur_icingaweb2, hote: sup-01, port: 8080, expose: [icinga.exemple.internal] }
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
serveurs_bd:
|
|
||||||
sql-01: { type: postgres, hote: data-sql-01, port: 5432, groupe: serveur_postgresql }
|
|
||||||
bases_donnees:
|
|
||||||
icingadb:
|
|
||||||
serveur: sql-01
|
|
||||||
base: icingadb
|
|
||||||
proprietaire: icingadb
|
|
||||||
secret: vault_bd_icingadb
|
|
||||||
consommateur: serveur_icinga
|
|
||||||
portee: groupe
|
|
||||||
usage: principale
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
domaines_publics:
|
|
||||||
exemple.ca: { autorite: primaire-cache, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
exemple.internal: { autorite: interne, edge: serveur_nginx, secondaires: [], dnssec: false }
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
---
|
|
||||||
# MODÈLE « observabilite » — base + données + observabilité/supervision (7 VM).
|
|
||||||
# index : ⚠️ REMPLACER par l'index unique du tenant.
|
|
||||||
index: 1
|
|
||||||
supernet: 10.11.0.0/16
|
|
||||||
vmid_schema: ip-miroir
|
|
||||||
cidr_hote: 24
|
|
||||||
reservations: { passerelle: 1, reserve_min: 2, reserve_max: 9 }
|
|
||||||
categories:
|
|
||||||
1: { libelle: Frontiere, vlan: 16, sous_reseau: 10.11.16.0/24, passerelle: 10.11.16.1 }
|
|
||||||
3: { libelle: Donnees, vlan: 18, sous_reseau: 10.11.18.0/24, passerelle: 10.11.18.1 }
|
|
||||||
4: { libelle: Services-infra, vlan: 19, sous_reseau: 10.11.19.0/24, passerelle: 10.11.19.1 }
|
|
||||||
5: { libelle: Observabilite, vlan: 20, sous_reseau: 10.11.20.0/24, passerelle: 10.11.20.1 }
|
|
||||||
fonctions:
|
|
||||||
infra-edge: { categorie: 1, service: 1 }
|
|
||||||
data-sql: { categorie: 3, service: 1 }
|
|
||||||
infra-dns: { categorie: 4, service: 1 }
|
|
||||||
infra-pki: { categorie: 4, service: 2 }
|
|
||||||
infra-mail: { categorie: 4, service: 3 }
|
|
||||||
obs: { categorie: 5, service: 1 }
|
|
||||||
sup: { categorie: 5, service: 2 }
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
serveurs:
|
|
||||||
infra-pki-01: { fonction: infra-pki, etat: planifie, disque: 32G, integrations: [client_backup] }
|
|
||||||
infra-edge-01: { fonction: infra-edge, etat: planifie, integrations: [client_pki] }
|
|
||||||
infra-mail-01: { fonction: infra-mail, etat: planifie, integrations: [client_pki, client_backup] }
|
|
||||||
infra-dns-01: { fonction: infra-dns, etat: planifie, disque: 40G, integrations: [client_pki] }
|
|
||||||
data-sql-01: { fonction: data-sql, etat: planifie, integrations: [client_pki, client_unbound, client_backup, client_metrique, client_journal, client_smtp] }
|
|
||||||
obs-01: { fonction: obs, etat: planifie, integrations: [client_pki, client_metrique, client_journal, client_smtp] }
|
|
||||||
sup-01: { fonction: sup, etat: planifie, integrations: [client_pki] }
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
# Modèle : Présence Web ⚠️ ASPIRATIONNEL
|
|
||||||
|
|
||||||
> **Ce modèle n'est pas prêt à déployer.** Il repose sur des fonctions
|
|
||||||
> `web-frontal` / `web-dorsal` qui **n'ont pas encore de rôle Set-OPS implémenté**
|
|
||||||
> (seulement des empreintes de dimensionnement par défaut). À finaliser une fois
|
|
||||||
> ces rôles construits — voir `docs/multi-instances.md`.
|
|
||||||
|
|
||||||
Objectif visé : héberger **sites et applications web** — socle souverain (DNS, PKI,
|
|
||||||
edge TLS, relais courriel) + couche web (frontal + dorsal) + données (PostgreSQL/Redis).
|
|
||||||
|
|
||||||
En attendant, pour un écosystème complet **prouvé**, utiliser le modèle **`integral`**.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
domaine_interne: "exemple.internal" # <- VOTRE domaine DNS interne
|
|
||||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
---
|
|
||||||
# Webapps dynamiques servies par le dorsal (rôle serveur_web_dorsal) : runtime +
|
|
||||||
# service systemd, fronteées par nginx local, exposées via l'edge. Exemple Python.
|
|
||||||
# Une app à BD réseau déclare sa base dans bases-donnees.yml et passe le DSN via env.
|
|
||||||
serveur_web_dorsal_apps:
|
|
||||||
- nom: app
|
|
||||||
server_name: "app.{{ domaine_interne }}"
|
|
||||||
depot: "https://forge.{{ domaine_interne }}/…/app.git"
|
|
||||||
branche: main
|
|
||||||
port: 8001
|
|
||||||
commande: ".venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8001"
|
|
||||||
data_dir: /var/lib/app
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
# Sites statiques servis par le frontal (rôle serveur_web_frontal), clonés depuis
|
|
||||||
# un dépôt git souverain (Forgejo) et exposés via l'edge (voir applications.yml).
|
|
||||||
# Remplacer par les vrais sites du tenant.
|
|
||||||
serveur_web_frontal_sites:
|
|
||||||
- nom: site
|
|
||||||
server_name: "site.{{ domaine_interne }}"
|
|
||||||
depot: "https://forge.{{ domaine_interne }}/…/site.git"
|
|
||||||
branche: main
|
|
||||||
sous_dossier: public
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
---
|
|
||||||
applications:
|
|
||||||
pki: { groupe: serveur_step_ca, hote: infra-pki-01 }
|
|
||||||
edge: { groupe: serveur_nginx, hote: infra-edge-01 }
|
|
||||||
mail: { groupe: serveur_postfix, hote: infra-mail-01 }
|
|
||||||
dns: { groupe: serveur_powerdns, hote: infra-dns-01 }
|
|
||||||
bdd: { groupe: serveur_postgresql, hote: data-01, port: 5432 }
|
|
||||||
cache: { groupe: serveur_redis, hote: data-01 }
|
|
||||||
frontal:
|
|
||||||
groupe: serveur_web_frontal
|
|
||||||
hote: web-frontal-01
|
|
||||||
port: 80
|
|
||||||
expose: [site.exemple.internal]
|
|
||||||
dorsal:
|
|
||||||
groupe: serveur_web_dorsal
|
|
||||||
hote: web-dorsal-01
|
|
||||||
port: 80
|
|
||||||
expose: [app.exemple.internal]
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
serveurs_bd:
|
|
||||||
pg-principal: { type: postgres, hote: 10.10.13.11, port: 5432, groupe: serveur_postgresql }
|
|
||||||
bases_donnees: {}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
domaines_publics:
|
|
||||||
exemple.ca: # <- VOTRE domaine public
|
|
||||||
autorite: primaire-cache
|
|
||||||
edge: serveur_nginx
|
|
||||||
secondaires: []
|
|
||||||
dnssec: false
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
---
|
|
||||||
# Adaptez le supernet à VOTRE réseau interne.
|
|
||||||
supernet: "10.10.0.0/16"
|
|
||||||
cidr_hote: 24
|
|
||||||
reservations: { passerelle: 1, reserve_min: 2, reserve_max: 9 }
|
|
||||||
categories:
|
|
||||||
1: { libelle: "Fondations", vlan: 11, sous_reseau: "10.10.11.0/24", passerelle: "10.10.11.1" }
|
|
||||||
3: { libelle: "Donnees", vlan: 13, sous_reseau: "10.10.13.0/24", passerelle: "10.10.13.1" }
|
|
||||||
5: { libelle: "Applications", vlan: 15, sous_reseau: "10.10.15.0/24", passerelle: "10.10.15.1" }
|
|
||||||
fonctions:
|
|
||||||
infra-pki: { categorie: 1, service: 1 }
|
|
||||||
infra-edge: { categorie: 1, service: 2 }
|
|
||||||
infra-mail: { categorie: 1, service: 3 }
|
|
||||||
infra-dns: { categorie: 1, service: 4 }
|
|
||||||
data: { categorie: 3, service: 1 }
|
|
||||||
web-frontal: { categorie: 5, service: 3 }
|
|
||||||
web-dorsal: { categorie: 5, service: 4 }
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
serveurs:
|
|
||||||
infra-pki-01: { fonction: infra-pki, etat: planifie }
|
|
||||||
infra-edge-01: { fonction: infra-edge, etat: planifie }
|
|
||||||
infra-mail-01: { fonction: infra-mail, etat: planifie }
|
|
||||||
infra-dns-01: { fonction: infra-dns, etat: planifie }
|
|
||||||
data-01: { fonction: data, etat: planifie }
|
|
||||||
web-frontal-01: { fonction: web-frontal, etat: planifie }
|
|
||||||
web-dorsal-01: { fonction: web-dorsal, etat: planifie }
|
|
||||||
Loading…
Reference in a new issue