Set-OPS-Public/roles/serveur_nextcloud/README.md
Daniel Allaire 79d0529686 serveur_nextcloud : rôle codifié depuis le spike (13 gotchas encodés)
Maison numérique souveraine (offres maison-obnl + cabinet). Tâches découpées :
paquets → php (512M + TLS PG) → install (occ, PG verify-full) → exposition
(vhost .mjs) → configure (overwrite/redis/anti-SSRF/import CA) → OIDC user_oidc
→ Collabora richdocuments (WOPI split URL) → thème Alliance (ciel étoilé).

Chaque réglage encode un piège prouvé sur collab-01 : imagick Debian 13,
PGSSLMODE dans php-fpm, MIME .mjs, allow_local_remote_servers (SSRF), import
root step-ca, memory_limit 512M, public_wopi_url après activate-config…

Version épinglée (robustesse). ansible-lint profil production : 0 échec.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 15:00:39 -04:00

32 lines
2.4 KiB
Markdown

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