Ajout de meta/supervision.yml a six roles, chacun deposant sa propre sonde selon le contrat des greffons Nagios. DEUX PRINCIPES POSES AU DOCUMENT DE CONCEPTION, parce que la premiere sonde les a imposes : 1. UNE SONDE DOIT POUVOIR ETRE MISE EN DEFAUT PAR PARAMETRE. Cible et seuils sont des variables du role : on la prouve rouge avec un port ferme ou un seuil impossible, sur une machine reelle, sans rien casser, et aussi souvent qu on veut. Une sonde qu on ne peut prouver qu en cassant un service ne sera prouvee qu une fois. 2. LA SONDE VIT LA OU VIT LA VERITE. « Ce noeud est-il collecte ? » est une sonde de serveur_prometheus, pas de client_metrique : une seule y voit les N noeuds, et surtout elle voit le cas SILENCIEUX — celui qui a cesse d etre collecte ne peut pas s en plaindre. LES SIX : cache-apt (artefacts, repond + place), resolution (resolveur, zone interne ET Internet — deux chemins distincts), forge (forgejo, son propre /api/healthz), collecte (prometheus, 15/15 cibles), tableaux (grafana, base ok), ingestion (loki, PRET a ingerer, pas seulement en ecoute). TROIS FOIS J AI ECRIT LA SONDE AVANT DE MESURER, ET TROIS FOIS ELLE A EU TORT. La forge : port 443 et chemin des depots INVENTES — elle ecoute en 3000 derriere l edge et n a legitimement aucun depot. Loki : j ai conclu « panne persistante » sur deux lectures prises a quelques secondes d intervalle, juste apres un redemarrage ; l anneau etait ACTIVE et la reponse est passee a ready moins d une minute plus tard. Le delai de stabilisation est desormais un AVERTISSEMENT nomme, pas une panne. On demande au service ce qu il pense de lui-meme quand il sait le dire (healthz, /ready, /api/health) plutot que d inventer un critere de l exterieur. make prouver : CONFORME. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q |
||
|---|---|---|
| .. | ||
| defaults | ||
| files | ||
| handlers | ||
| meta | ||
| tasks | ||
| templates | ||
| README.md | ||
serveur_forgejo
Forge Git Forgejo (binaire officiel) — dépôts Git, CI, revue de code.
Rôle
- Installe le binaire Forgejo (version épinglée, lien symbolique courant), utilisateur
git. - Crée l'arborescence (
/var/lib/forgejo,/etc/forgejo). - Base PostgreSQL via le registre (
instance/plan/bases-donnees.yml, entréeforgejo). app.ini: serveur derrière nginx (HTTP_ADDR=127.0.0.1,ROOT_URLhttps), DB, secrets, mailer versserveur_postfix, inscription désactivée,INSTALL_LOCK(pas d'assistant web).- Service systemd + création du compte administrateur initial (une fois).
Secrets requis (Vault)
serveur_forgejo_secret_key: "{{ vault_forgejo_secret_key }}" # forgejo generate secret SECRET_KEY
serveur_forgejo_internal_token: "{{ vault_forgejo_internal_token }}" # forgejo generate secret INTERNAL_TOKEN
serveur_forgejo_admin_password: "{{ vault_forgejo_admin }}"
vault_bd_forgejo: "..." # mot de passe BD (partage avec serveur_postgresql)
Variables principales
| Variable | Défaut | Rôle |
|---|---|---|
serveur_forgejo_version |
10.0.0 |
Version (à vérifier/bumper) |
serveur_forgejo_hostname |
forge.exemple.internal |
Domaine (via nginx) |
serveur_forgejo_db_host |
10.0.13.11 |
data-01 |
Identité visuelle (thème Alliance Boréale)
Désactivée par défaut : serveur_forgejo_branding: false. À true, le rôle copie
files/custom/ vers {{ serveur_forgejo_data }}/custom/ — logo, favicon, page
d'accueil et la feuille public/assets/css/alliance.css, injectée sur toutes les
pages par templates/custom/header.tmpl.
Le wiki n'a donc pas de thème distinct : Forgejo le rend avec le même habillage, et la feuille le couvre au même titre que les dépôts, les tickets et les README.
alliance.css est en deux sections, de risque différent :
| Section | Contenu | Risque | État |
|---|---|---|---|
| §1 Variables | surcharge des variables de couleur officielles (--color-primary, --color-body…) |
Sûr — aucune classe interne touchée, résiste aux mises à jour | Éprouvé sur forge-01 (CHANGELOG 2026-07-03 : alliance.css servi, cyan aurore rendu) |
| §2 Décor | fond aurore (body), filet sous les titres, citations, tableaux et code en ligne du contenu rendu (.markup) |
Fragile — sélecteurs internes de Forgejo, à revérifier après chaque montée de version majeure | Jamais rendu — ajouté le 2026-07-21, validé en syntaxe CSS seulement |
Supprimer §2 ramène au thème sobre d'origine : §1 se suffit à elle-même.
Le ciel nocturne ne s'applique qu'aux thèmes sombres (theme-forgejo-dark,
theme-forgejo-auto) pour ne pas casser le thème clair.
Pour une forge hors flotte (instance Forgejo non gérée par Set-OPS), la pose manuelle
des mêmes fichiers est décrite dans docs/theme-forgejo-hors-flotte.md.
Notes / limites
- Version à confirmer sur forgejo.org/download ; l'URL suit le motif officiel des releases.
- Le site nginx publiant Forgejo se déclare côté
serveur_nginx. - Mailer en SMTP simple vers le relais interne (sans TLS pour l'instant).
- forge-01 a existé, puis a été supprimée. L'hôte est donc
etat: planifiedansinstance/plan/serveurs.yml(état actuel) alors queCHANGELOG.md(2026-07-03) affirme le branding « prouvé sur forge-01 » (état passé, accueil 200,alliance.cssservi). Les deux disent vrai : ce n'est pas une contradiction, c'est un enregistrement historique face à un état courant. La preuve reste valable — elle ne sera simplement rejouable qu'après recréation de l'hôte.
Prérequis
- Dépendances
serveur_postgresql,serveur_nginx,serveur_postfix(cf.docs/dependances-groupes.yml).
Quelle base de données — serveur_forgejo_bd
| Valeur | Ce que ça donne |
|---|---|
postgres (défaut) |
la base vit dans le registre du plan, sur un serveur dédié : une VM, une zone, un secret, une sauvegarde |
sqlite |
un fichier sous serveur_forgejo_data — aucun serveur, aucun secret de base, aucune entrée au registre |
sqlite est le défaut documenté de Forgejo pour une petite instance. Il a été ajouté le
2026-08-22 parce qu'une offre forge destinée à un petit organisme exigeait une VM
PostgreSQL entière pour une base que trois personnes sollicitent.
Ce que ça change ailleurs : rien. Le job de sauvegarde serveur_forgejo emporte déjà
serveur_forgejo_data, où le fichier se trouve. Et P35 lit l'interrupteur : elle
n'attend aucune entrée de registre quand la base est un fichier.
Une valeur inconnue est refusée au début du rôle, plutôt que de retomber en silence sur PostgreSQL — qui déploierait le contraire de ce qu'on croyait choisir.