Modèles : nouveau modèle 'collaboration' + collaboration dans 'integral'
Ce qui manquait aux modèles = la collaboration (Nextcloud/Collabora), placeholder
'rôles à construire' du README, désormais bâti.
- exemples/modeles/collaboration/ : socle + identité + nœud collab (8 VM, zone
Collaboration VLAN 20) ; nextcloud+collabora exposés (cloud/bureau, websocket auto),
base nextcloud, client Keycloak nextcloud. SANs edge + plancher auto-dérivés.
- integral : + collab-01 (zone Applications), nextcloud/collabora/base/client — il
tient enfin sa promesse de « tout ».
- README : collaboration ✅.
Les deux modèles instancient proprement (collab dérivé, expositions auto).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
0d2bc2c2e9
commit
1f9cc0a0d3
14 changed files with 181 additions and 1 deletions
|
|
@ -24,5 +24,5 @@ courriel) et ajoute des **modules** selon l'offre.
|
|||
| `forge` | Forgejo + données | ✅ |
|
||||
| `identite` | LDAP + Keycloak (SSO) | ✅ |
|
||||
| `observabilite` | Prometheus/Loki/Grafana + Icinga | ✅ |
|
||||
| `collaboration` | Nextcloud + Collabora | rôles à construire |
|
||||
| `collaboration` | identité + Nextcloud + Collabora | ✅ |
|
||||
| `integral` | tout | ✅ |
|
||||
|
|
|
|||
36
exemples/modeles/collaboration/README.md
Normal file
36
exemples/modeles/collaboration/README.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# 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
|
||||
```
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
domaine_interne: "exemple.internal"
|
||||
fuseau_horaire: "America/Toronto"
|
||||
organisation: "Exemple"
|
||||
identite_realm: "exemple"
|
||||
setops_plan_dir: "{{ playbook_dir }}/../../instance/plan"
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# 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 }}"
|
||||
25
exemples/modeles/collaboration/plan/applications.yml
Normal file
25
exemples/modeles/collaboration/plan/applications.yml
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
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]
|
||||
20
exemples/modeles/collaboration/plan/bases-donnees.yml
Normal file
20
exemples/modeles/collaboration/plan/bases-donnees.yml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
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
|
||||
4
exemples/modeles/collaboration/plan/domaines.yml
Normal file
4
exemples/modeles/collaboration/plan/domaines.yml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
domaines_publics:
|
||||
exemple.ca: { autorite: primaire-cache, edge: serveur_nginx, secondaires: [], dnssec: false }
|
||||
exemple.internal: { autorite: interne, edge: serveur_nginx, secondaires: [], dnssec: false }
|
||||
24
exemples/modeles/collaboration/plan/nomenclature.yml
Normal file
24
exemples/modeles/collaboration/plan/nomenclature.yml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
# 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 }
|
||||
10
exemples/modeles/collaboration/plan/serveurs.yml
Normal file
10
exemples/modeles/collaboration/plan/serveurs.yml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
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] }
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
# 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 }}"
|
||||
|
|
@ -49,6 +49,19 @@ applications:
|
|||
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
|
||||
|
|
|
|||
|
|
@ -31,3 +31,11 @@ bases_donnees:
|
|||
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
|
||||
|
|
|
|||
|
|
@ -66,3 +66,4 @@ fonctions:
|
|||
sup: { categorie: 5, service: 2 }
|
||||
# Zone 6 — Applications
|
||||
forge: { categorie: 6, service: 1 }
|
||||
collab: { categorie: 6, service: 2 }
|
||||
|
|
|
|||
|
|
@ -75,3 +75,13 @@ serveurs:
|
|||
- 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
|
||||
|
|
|
|||
Loading…
Reference in a new issue