Set-OPS-Public/roles/serveur_nextcloud
Daniel Allaire 840b21bfb6 artefacts : le controleur telecharge et pousse, la cible ne tire plus
Inventaire mesure de ce qu'une reconstruction de tenant telecharge — ~1,5 Gio :
Nextcloud 230 Mio, image collabora/code 471 Mio (Docker Hub), Keycloak 140,
Forgejo 101, oauth2-proxy 18, plus les paquets apt (Debian + Grafana +
smallstep + Icinga) sur 14 hotes.

Les quatre archives sont EPINGLEES EN VERSION et vont chacune sur UN SEUL
hote. Les retelecharger a chaque reconstruction est un gaspillage et une
dependance de plus sur le chemin critique — un serveur tiers lent a deja fait
tomber un deploiement le 2026-08-09, sur le binaire Forgejo precisement.

POURQUOI POUSSER PLUTOT QUE SERVIR UN CACHE. L'exploitant proposait son poste
comme cache HTTP ; l'intention est juste mais elle butait sur ce qu'on avait
ferme le matin meme : les regles sortantes visent !SETOPS_INTERNES, donc une
VM de tenant ne peut plus atteindre le poste. Servir un cache aurait exige de
ROUVRIR un flux vers le plan d'administration.

L'inversion evite le probleme entier : le controleur telecharge dans son cache
(~/.cache/setops, garde par un stat), puis pousse par le canal SSH qui existe
deja. Aucun port, aucun service, aucune regle, aucun couplage. Et ces
artefacts deviennent deployables HORS LIGNE une fois le cache rempli.

Ce que ca ne couvre pas, et qu'il faut nommer : l'image collabora/code, seule
entorse a la doctrine « zero Docker » du depot — elle merite sa propre
decision, pas un contournement discret ; et les paquets apt, dont le cache a
sa place cote HEBERGEUR, partage entre tenants.

Et une mesure qui a contredit mon hypothese : le .zip de Nextcloud pese
271 Mio contre 230 pour le .tar.bz2. Il telecharge PLUS pour decompresser
moins lentement. Le changement de format attend une mesure, pas une intuition.

Verifie : cache rempli (491 Mio, 4/4), ansible-lint production sur 79 fichiers,
prouver.py 35 OK, plus aucun get_url n'ecrit sur la cible.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 20:58:58 -04:00
..
defaults artefacts : le controleur telecharge et pousse, la cible ne tire plus 2026-08-10 20:58:58 -04:00
files serveur_nextcloud : rôle codifié depuis le spike (13 gotchas encodés) 2026-07-05 15:00:39 -04:00
handlers serveur_nextcloud : rôle codifié depuis le spike (13 gotchas encodés) 2026-07-05 15:00:39 -04:00
meta empreintes muettes, courses de premier demarrage, collision de noms 2026-08-07 16:22:38 -04:00
tasks artefacts : le controleur telecharge et pousse, la cible ne tire plus 2026-08-10 20:58:58 -04:00
templates serveur_nextcloud : rôle codifié depuis le spike (13 gotchas encodés) 2026-07-05 15:00:39 -04:00
README.md serveur_nextcloud : rôle codifié depuis le spike (13 gotchas encodés) 2026-07-05 15:00:39 -04:00

serveur_nextcloud

Maison numérique souveraine : fichiers + collaboration (Nextcloud + Collabora), SSO Keycloak, base PostgreSQL chiffrée. Codifié depuis le spike empirique du 2026-07-05 (collab-01) — chaque réglage encode un gotcha prouvé sur du vrai. Cœur de l'offre maison-obnl (OBNL/coops) et cabinet (PME de professionnels).

Ce que le rôle fait

  1. Paquets PHP-FPM 8.4 + extensions, nginx, redis (imagick tire ses deps — pas libmagickcore-6, absent de Debian 13) ;
  2. tuning PHP 512M + opcache, et env[PGSSLMODE]/PGSSLROOTCERT dans le pool php-fpm (PDO pgsql lit libpq) ;
  3. tarball épinglé/var/www/nextcloud + occ maintenance:install sur PG en verify-full TLS ;
  4. vhost nginx local avec MIME .mjs = text/javascript (sinon modules ES bloqués → pages blanches) ;
  5. overwrite* + trusted_proxies (edge) + Redis + allow_local_remote_servers (anti-SSRF, IP privées) + import du root step-ca dans le bundle CA propre de Nextcloud ;
  6. SSO user_oidc (Keycloak) ; richdocuments (WOPI : wopi_url local + public_wopi_url edge, posé après activate-config) ;
  7. identité Alliance Boréale (theming + thème « ciel étoilé ») + whitelist anti-force-brute du sous-réseau d'admin.

Dépendances (à fournir avant déploiement)

  • Registre BD : une base nextcloud (consommateur serveur_nextcloud) dans bases-donnees.yml ;
  • Voûte : vault_nextcloud_admin, vault_nextcloud_oidc (secret du client Keycloak) ;
  • Keycloak : un client nextcloud (redirect …/apps/user_oidc/code) dans le realm de l'instance ;
  • serveur_collabora actif (le serveur WOPI) + son exposition bureau.<domaine> ;
  • Exposition edge : cloud.<domaine> → ce nœud:80, avec le FQDN dans les SAN du cert edge ;
  • Plancher : le nœud doit résoudre bureau.<domaine> (→ edge) ; client_pki pour le root_ca.

Robustesse (hygiène Nextcloud)

  • Version épinglée (serveur_nextcloud_version) — pas de mise à jour surprise ;
  • upgrades en escale (staging → prod), sauvegarde d'abord (restic), surveillance Icinga ;
  • l'app riche en config → traiter avec soin (le spike a documenté les pièges, on n'improvise pas).

Validation

ansible-lint : profil production (0 échec, 0 avertissement). --syntax-check : OK. Éprouvé bout-en-bout sur collab-01 (SSO, édition .odt, apps, identité visuelle).