SITE-TechnoLibre/plan/applications.yml

174 lines
8.1 KiB
YAML
Raw Normal View History

---
# Les services du SITE et leur placement — même forme que chez un tenant.
#
# `groupe` est le rôle Ansible, `hote` la machine de `plan/serveurs.yml` qui le porte.
# C'est de ce registre que l'inventaire tire ses groupes : une application déclarée ici
# range son hôte dans le groupe correspondant, et `playbooks/groupes/<rôle>.yml` le
# trouve sans qu'on câble quoi que ce soit.
#
# `expose:` NOMME LE SERVICE, indépendamment de la machine qui le rend.
#
# C'est la pièce qui manquait, et son absence s'est vue au pire endroit : le certificat
# de la forge portait `forge.<<DOMAINE_SITE>>` dans ses SAN, mais **aucune zone ne
# résolvait ce nom**. On avait donc du TLS correct sur un nom que personne ne pouvait
# appeler — et l'usage retombait sur `site-forge-01`, c'est-à-dire sur la machine.
#
# Un nom de service survit au déménagement du service ; un nom de machine, non.
applications:
# LE RUNNER DU SITE — DEUX RÔLES, ET DANS CET ORDRE.
#
# `serveur_ops` INSTALLE : ansible, le cache de collections, les dépôts du génome clonés
# depuis la forge du site, les symlinks du moteur. `serveur_ops_site` n'installe rien —
# il dépose la voûte de l'underlay (chiffrée) et ajoute le pouvoir de MATÉRIALISER.
#
# C'est le même patron que `serveur_artefacts` + `serveur_cache_site` : un installateur
# et un marqueur. J'avais déclaré le marqueur seul, et son assertion l'a dit sans
# détour : « exige `serveur_ops_site_depot`, cloné par `serveur_ops` ».
ops:
groupe: serveur_ops
hote: site-ops-01
ops_site:
groupe: serveur_ops_site
hote: site-ops-01
# LA SOURCE D'ARTEFACTS, et son marquage comme racine de chaîne. Les deux vont
# ensemble : `serveur_artefacts` INSTALLE apt-cacher-ng, `serveur_cache_site` MARQUE ce
# cache comme racine et vérifie qu'il n'a pas d'amont — il n'installe rien.
artefacts:
groupe: serveur_artefacts
hote: site-cache-01
cache_site:
groupe: serveur_cache_site
hote: site-cache-01
# LA FORGE DU GÉNOME. `expose` porte son nom de service : c'est lui que le certificat
# doit couvrir, et lui que la zone souveraine doit résoudre.
forgejo:
groupe: serveur_forgejo
hote: site-forge-01
# 443, ET NON 3000. Le `3000` est le port que Forgejo ecoute DERRIERE un edge, en
# clair. Ici il sert lui-meme son TLS : garder 3000 aurait grave `:3000` dans
# `ROOT_URL`, donc dans l'`origin` de chaque ecosysteme descendant, pour toujours.
port: 443
expose:
- forge.<<DOMAINE_SITE>>
# LE MARQUEUR DE LA FORGE DU GÉNOME — même patron que `artefacts` + `cache_site`.
#
# Le site rend deux services à ses locataires pendant leur jeunesse : les PAQUETS et le
# GÉNOME. Le premier était déclaré, le second ne l'était pas — alors que D-81 fait de
# cette forge l'autorité dont tout écosystème se reproduit.
#
# Mesuré le 2026-08-28 sur `ops-01`, première machine de la reconstruction de
# Chezlepro : le cache du site répondait, la forge non, et le clonage du génome
# attendait sans fin. Le tenant déclarait pourtant lire son génome à cette adresse.
forge_site:
groupe: serveur_forge_site
hote: site-forge-01
# L'AUTORITÉ. Elle sert le 443 à ses voisins du même segment, en L2 — rien ne traverse
# la frontière, donc aucune règle ne l'accompagne au devis. `expose` lui donne quand
# même son nom de service : les clients s'y enrôlent par un nom, jamais par une adresse.
step_ca:
groupe: serveur_step_ca
hote: site-pki-01
expose:
- pki.<<DOMAINE_SITE>>
# LE DNS — autoritatif et résolveur sur la même machine, à dessein.
powerdns:
groupe: serveur_powerdns
hote: site-dns-01
resolveur:
groupe: serveur_resolveur
hote: site-dns-01
expose:
- dns.<<DOMAINE_SITE>>
# LE MARQUEUR DU RÉSOLVEUR DU SITE — troisième service prêté aux locataires, après les
# paquets (`cache_site`) et le génome (`forge_site`). Même patron : un installateur, un
# marqueur.
#
# Un écosystème neuf n'a ni cache, ni forge, ni résolveur — et c'est lui qui doit les
# construire. Sans celui-ci, ses machines sortent en 443 par adresse et restent
# AVEUGLES AUX NOMS : `apt` s'en sort par le mandataire du cache, qui résout à sa place,
# mais un `get_url` ou un dépôt tiers en HTTPS échoue. Mesuré le 2026-08-30 sur
# `infra-pki-01`, première machine à porter l'autorité de Chezlepro.
#
# `client_resolveur` bascule chaque tenant chez lui dès que son propre résolveur existe.
# Retirer cet emprunt ce jour-là est une émancipation — un geste, pas un effet.
resolveur_site:
groupe: serveur_resolveur_site
hote: site-dns-01
# LE SERVEUR DE SAUVEGARDE, ET SON MARQUEUR — meme patron que les trois autres
# services pretes : `serveur_backup` INSTALLE le depot, `serveur_backup_site` dit qu'il
# sert les locataires et declare le flux qui le permet.
backup:
groupe: serveur_backup
hote: site-backup-01
backup_site:
groupe: serveur_backup_site
hote: site-backup-01
# LE NOM QUE LES LOCATAIRES ÉCRIVENT DANS LEUR CONFIGURATION.
#
# Un locataire grave l'adresse de son dépôt dans `client_backup_repo`, donc dans le
# chemin de CHACUN de ses instantanés. Y graver `10.0.35.11` rendrait le dépôt
# indéplaçable : le jour où il change de machine, tous les locataires cessent de
# déposer, et chacun doit être modifié un par un — pendant que plus rien n'est
# sauvegardé.
#
# `sauvegarde`, pas `site-backup-01` : c'est le SERVICE qu'on nomme. La machine qui
# le rend a le droit de changer sans que personne ne réécrive quoi que ce soit.
expose:
- sauvegarde.<<DOMAINE_SITE>>
# LA SUPERVISION DU SITE. `serveur_backup` rapporte PASSIVEMENT ici, avec un `ttl` :
# c'est l'expiration de ce `ttl` qui fait qu'un SILENCE alerte. Une sauvegarde qui
# cesse ne produit aucune erreur, seulement une absence — sans destinataire pour ce
# rapport, il n'y a pas de supervision, il y a un script qui tourne.
postgresql:
groupe: serveur_postgresql
hote: site-mon-01
icinga:
groupe: serveur_icinga
hote: site-mon-01
# L'OBSERVABILITE DU SITE — LA SIENNE, ET RIEN QUE LA SIENNE (D-87, 2026-09-10).
#
# Elle manquait, et son absence etait le REVERS de la frontiere : en refusant de voir
# les journaux de ses locataires — parce qu'ils contiennent du CONTENU, et qu'un
# hebergeur qui les lit en sait plus que s'il detenait leur annuaire — le site s'etait
# prive des siens. Ses sept machines n'expediaient rien nulle part.
#
# Le remede n'est pas d'assouplir la regle : c'est de lui donner SA pile. Aucun lien
# avec celle d'un tenant, dans aucun sens. Un locataire n'y envoie rien, et le site n'y
# lit que ses propres machines.
#
# POSEE SUR `site-mon-01`, la zone de supervision : c'est deja la qu'Icinga juge l'etat
# du site, et le zonage veut qu'une preoccupation vive dans une seule zone. La machine a
# la place (3,3 Go disponibles, charge 0,10 au moment du choix).
prometheus:
groupe: serveur_prometheus
hote: site-mon-01
loki:
groupe: serveur_loki
hote: site-mon-01
# GRAFANA SANS SSO, ET C'EST VOULU. Chez un tenant il vit derriere `oauth2_proxy`, donc
# derriere Keycloak. Le site n'a pas d'annuaire — et ne doit pas en avoir un pour ca.
# Faire monter l'identite pour offrir un tableau de bord serait payer tres cher une
# commodite : l'acces se fait depuis le plan d'administration, qui est deja la barriere.
#
# LE NOM DIT LA FONCTION, PAS LE PRODUIT (2026-09-10). C'etait `tableaux.<<DOMAINE_SITE>>`,
# un mot que rien d'autre n'employait. `observatoire` est le meme nom que chez le locataire
# (`observatoire.chezlepro.internal`) : un seul vocabulaire des deux cotes, et un nom qui
# ne ment pas le jour ou Grafana est remplace.
grafana:
groupe: serveur_grafana
hote: site-mon-01
expose:
- observatoire.<<DOMAINE_SITE>>
# LE RELAIS DE COURRIEL DU SITE — souverain, et c'est tout l'interet : emprunter le MTA
# d'un locataire ferait dependre le site d'un ecosysteme qu'il peut outvivre.
postfix:
groupe: serveur_postfix
hote: site-mon-01