Set-OPS-Public/roles/web_dorsal
Daniel Allaire eee7dbd108 web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif)
Runtime (venv/paquets) + service systemd + nginx local, derrière l'edge, ZÉRO
conteneur. Chaque app : git clone (depth 1) → venv + pip → unité systemd durcie
(app en localhost, user webapp, NoNewPrivileges/PrivateTmp) → vhost nginx local
qui la fronte. data_dir persistant pour l'état local (SQLite) ; BD réseau via
resoudre_base sinon.

Éprouvé bout-en-bout sur web-frontal-01 par le rôle : monregistraire (FastAPI+
uvicorn+SQLite) cloné de Forgejo, servi via l'edge en HTTPS step-ca, API OK.
Avec web_frontal, la plateforme webapp native est complète. lint production: 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 18:37:47 -04:00
..
defaults web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif) 2026-07-05 18:37:47 -04:00
handlers web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif) 2026-07-05 18:37:47 -04:00
meta web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif) 2026-07-05 18:37:47 -04:00
tasks web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif) 2026-07-05 18:37:47 -04:00
templates web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif) 2026-07-05 18:37:47 -04:00
README.md web_dorsal : rôle webapps dynamiques (2e brique plateforme, 100% natif) 2026-07-05 18:37:47 -04:00

web_dorsal

Hébergement de webapps dynamiques (runtime + service systemd), derrière l'edge. Deuxième brique de la plateforme webapp de Set-OPS : 100 % natif — venv/paquets

  • systemd + nginx, zéro conteneur. Codifié depuis le spike du 2026-07-05 (monregistraire : FastAPI + uvicorn + SQLite).

Patron

Pour chaque app déclarée dans web_dorsal_apps :

  1. git clone (depth 1) → /srv/webapp/<nom> ;
  2. venv Python + pip install -r requirements.txt ;
  3. unité systemd (l'app écoute en 127.0.0.1:<port>, user webapp, durcie : NoNewPrivileges, PrivateTmp) ;
  4. vhost nginx local qui fronte l'app (server_name127.0.0.1:<port>).

L'app reste en localhost (sûr) ; l'edge proxie server_name → nginx local → app. Exposé via applications.yml (port 80, pas le port interne de l'app).

Déclaration (group_vars du groupe web_dorsal)

web_dorsal_apps:
  - nom: registraire
    server_name: "registraire.{{ domaine_interne }}"
    depot: "https://forge.{{ domaine_interne }}/…/monregistraire.git"
    branche: main
    port: 8001
    commande: ".venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8001"
    env: { IMMOS_DB_PATH: /var/lib/registraire/immos.db }
    data_dir: /var/lib/registraire   # état local (SQLite), optionnel

Et une app groupe: web_dorsal, hote: <noeud>, port: 80, expose: [registraire.<domaine>].

BD

Les apps à état local (SQLite) : data_dir persistant. Les apps à BD réseau (PostgreSQL) : déclarer la base dans bases-donnees.yml et passer le DSN via env (resoudre_base) — même motif que les autres services Set-OPS.

Runtimes

Éprouvé sur Python (FastAPI/uvicorn). Node/autres : adapter commande + les paquets de runtime (le patron systemd + nginx + git reste identique).

Validation

ansible-lint profil production + --syntax-check. Éprouvé sur web-frontal-01 (monregistraire servi via l'edge, HTTPS step-ca, API fonctionnelle).