Set-OPS-Public/roles/serveur_forgejo/README.md
Daniel Allaire bd1b897815
Some checks are pending
verifier / verifier (push) Waiting to run
forgejo : apprendre SQLite, et retirer ce qui ne servait pas
Doute de l'exploitant sur patient 0 : « je doute de la pertinence de pgsql ». Mesure
plutot que discussion.

REDIS NE SERVAIT A RIEN : le role serveur_forgejo ne le mentionne ni dans son app.ini, ni
dans ses defauts, et ne declare aucun lien. Heritage du modele `forge`. Retire du plan.

POSTGRESQL ETAIT EXIGE PAR LE ROLE : DB_TYPE = postgres en dur, resoudre_base sans
condition. Le doute etait fonde, le moteur ne savait pas faire autrement.

INTERRUPTEUR `serveur_forgejo_bd: postgres|sqlite`. En sqlite la base devient un FICHIER
sous serveur_forgejo_data. Ce que ca change ailleurs : rien. Le job de sauvegarde
`serveur_forgejo` emporte deja ce dossier ; PGSSLROOTCERT etait deja conditionne au mode
TLS ; et P35 lit desormais l'interrupteur (convention `<role>_bd`, group_vars de
l'instance puis defaut du role), donc n'attend aucune entree de registre. Une valeur
inconnue est REFUSEE au debut du role plutot que de retomber en silence sur PostgreSQL.

PATIENT 0 PASSE DE SIX A QUATRE MACHINES (Dovecot, Redis, PostgreSQL et sa VM). Sur la
machine dont tout descend, chaque service en moins est une chose de moins a defendre, a
sauvegarder et a rebatir. Et l'effet depasse patient 0 : une offre `forge` pour un petit
organisme cesse d'exiger une VM PostgreSQL.

LA NEUVIEME. En verifiant P35 sur patient 0, elle a rendu un verdict JUSTE SUR LE MAUVAIS
ECOSYSTEME : `plan = RACINE / "instance" / "plan"`, le symlink en dur. Neuvieme resolution
d'instance codee en dur en cinq jours. Ce n'est plus une serie de bogues, c'est une piece
manquante : une resolution unique et partagee, a faire en une fois et de tete reposee.

Enseigne : SQLite au glossaire (P39 l'exige desormais), et le README du role documente
l'interrupteur et ce qu'il ne change pas.

make verifier 40/40 ; make ci 40/40 ; lint et syntaxe du role verts.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 13:10:05 -04:00

82 lines
4.8 KiB
Markdown

# 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ée `forgejo`).
- `app.ini` : serveur derrière nginx (`HTTP_ADDR=127.0.0.1`, `ROOT_URL` https), DB, secrets, mailer vers `serveur_postfix`, inscription désactivée, `INSTALL_LOCK` (pas d'assistant web).
- Service systemd + création du **compte administrateur** initial (une fois).
## Secrets requis (Vault)
```yaml
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`](../../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: planifie` dans
`instance/plan/serveurs.yml` (état **actuel**) alors que `CHANGELOG.md` (2026-07-03)
affirme le branding « prouvé sur forge-01 » (état **passé**, accueil 200, `alliance.css`
servi). 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.