SITE-TechnoLibre/plan/applications.yml
Daniel Allaire 912a84483f squelette du site de Technolibre, et la liste de ce qu il faut relever
Un seul noeud Proxmox en version 9, une frontiere OPNsense. Trois
consequences ecrites dans le README : le SPOF est total, les clones sont
complets (un clone lie n achete rien sans second noeud), et rien n a jamais
tourne contre un PVE 9.

Le chiffre a verifier avant de cabler : 57 Go de RAM pour le site et son
locataire sur la meme machine. La RAM est la contrainte dure.

Adressage au statu quo : gestion en 10.23.0.0/24, zones du site en
10.0.31-36 comme chez Chezlepro. Consequence connue et ecrite : les deux
sites ne pourront pas etre relies tant qu aucun n est renumerote.

COLLECTE.md liste dans l ordre ce qui doit etre releve sur place, dont la
question de forme : ce qu il y a entre le noeud et l OPNsense decide du mode
de routage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-12 14:16:58 -04:00

173 lines
8.1 KiB
YAML

---
# 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