Set-OPS-Public/roles/serveur_nextcloud/defaults/main.yml
Daniel Allaire 0f1bd7605a nextcloud : epingle 34.0.2 (correctif amont)
Set-OPS installe desormais 34.0.2 aux prochaines constructions. Ce n'est PAS
une migration : le modele du depot est de reconstruire, pas de mettre a jour
en place. `collab-01` reste donc a 34.0.1 jusqu'a sa prochaine reconstruction
— l'epinglage decrit ce qu'on INSTALLE, pas ce qui TOURNE.

Archive verifiee contre la somme sha256 officielle avant d'entrer au cache, et
l'ancienne retiree. `make versions-mesurer` rend maintenant « a jour » pour
Nextcloud ; restent Keycloak (26.0.7 -> 26.7.1) et Forgejo (10.0.0 -> v16.0.2),
qui meritent chacun leur propre decision — six majeures de Forgejo ne se
changent pas au passage.

Note pour plus tard : le role INSTALLE mais ne MET PAS A JOUR. L'extraction
porte `creates: {{ racine }}/occ`, donc sur un hote deja installe un changement
de version ne reextrait rien. C'est coherent avec la doctrine de
reconstruction, mais il faut le savoir : sur une flotte en place, l'epinglage
et le deploye divergent jusqu'au prochain rasage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 23:12:19 -04:00

122 lines
6.4 KiB
YAML

---
# =========================================================================
# serveur_nextcloud — maison numérique souveraine (fichiers + collaboration).
# Codifié depuis le spike empirique du 2026-07-05 : chaque réglage encode un
# gotcha prouvé (voir README). Motifs Set-OPS : BD via resoudre_base, SSO via
# Keycloak, TLS via cert racine step-ca, exposition derrière l'edge nginx.
# =========================================================================
serveur_nextcloud_groupe: "serveur_nextcloud"
serveur_nextcloud_utilisateur: "www-data"
# --- Version ÉPINGLÉE (robustesse : pas de mise à jour surprise ; upgrade en escale) ---
serveur_nextcloud_version: "34.0.2"
serveur_nextcloud_url: "https://download.nextcloud.com/server/releases/nextcloud-{{ serveur_nextcloud_version }}.tar.bz2"
serveur_nextcloud_racine: "/var/www/nextcloud"
# --- PHP (Debian 13 = 8.4) + tuning EXIGÉ par Nextcloud (gotcha : 128M → pages blanches) ---
serveur_nextcloud_php_version: "8.4"
serveur_nextcloud_php_memory_limit: "512M"
serveur_nextcloud_php_upload_max: "512M"
# imagick tire ses deps ; NE PAS lister libmagickcore-6 (absent de Debian 13).
serveur_nextcloud_paquets:
- "php{{ serveur_nextcloud_php_version }}-fpm"
- "php{{ serveur_nextcloud_php_version }}-gd"
- "php{{ serveur_nextcloud_php_version }}-curl"
- "php{{ serveur_nextcloud_php_version }}-mbstring"
- "php{{ serveur_nextcloud_php_version }}-xml"
- "php{{ serveur_nextcloud_php_version }}-zip"
- "php{{ serveur_nextcloud_php_version }}-pgsql"
- "php{{ serveur_nextcloud_php_version }}-intl"
- "php{{ serveur_nextcloud_php_version }}-bcmath"
- "php{{ serveur_nextcloud_php_version }}-gmp"
- "php{{ serveur_nextcloud_php_version }}-imagick"
- "php{{ serveur_nextcloud_php_version }}-redis"
- "php{{ serveur_nextcloud_php_version }}-cli"
- "nginx"
- "redis-server"
- "bzip2"
# --- Base de données (dérivée par resoudre_base ; PG en verify-full TLS) ---
serveur_nextcloud_db_host: "" # dérivé (FQDN)
serveur_nextcloud_db_port: 5432
serveur_nextcloud_db_name: "nextcloud"
serveur_nextcloud_db_user: "nextcloud"
# Gotcha : PDO pgsql (libpq) lit PGSSLMODE/PGSSLROOTCERT dans l'env de php-fpm.
serveur_nextcloud_pg_sslmode: "verify-full"
serveur_nextcloud_ca_racine: "/etc/step/certs/root_ca.crt"
# --- Cache Redis local (verrous + mémoire) ---
serveur_nextcloud_redis_host: "localhost"
serveur_nextcloud_redis_port: 6379
# --- Exposition (derrière l'edge nginx ; TLS terminé à l'edge) ---
serveur_nextcloud_hostname: "cloud.{{ domaine_interne }}"
serveur_nextcloud_http_addr: "0.0.0.0" # l'edge (autre hôte) doit joindre :80
serveur_nextcloud_http_port: 80
# IP de l'edge → trusted_proxies (pour voir la vraie IP client, pas throttler l'edge).
serveur_nextcloud_edge_ip: "{{ hostvars[(groups['serveur_nginx'] | default([]) | first) | default('')].ansible_host | default('') }}"
# --- SSO OIDC (Keycloak) — app user_oidc ---
serveur_nextcloud_oidc_actif: true
serveur_nextcloud_oidc_nom: "{{ organisation | default('Organisation') }}"
serveur_nextcloud_oidc_client_id: "nextcloud"
serveur_nextcloud_oidc_client_secret: "{{ vault_nextcloud_oidc | default('') }}"
serveur_nextcloud_oidc_realm: "{{ identite_realm | default('chezlepro') }}"
# DERIVE de l'exposition declaree au plan (role `resoudre_idp`) ; repli seulement.
serveur_nextcloud_oidc_repli: >-
https://keycloak.{{ domaine_interne }}/realms/{{ serveur_nextcloud_oidc_realm }}/.well-known/openid-configuration
serveur_nextcloud_oidc_discovery: >-
{{ resoudre_idp_discovery | default(serveur_nextcloud_oidc_repli) }}
# --- Collabora Online (WOPI) — app richdocuments ---
serveur_nextcloud_office_actif: true
serveur_nextcloud_wopi_url: "http://127.0.0.1:9980" # serveur → Collabora (local)
serveur_nextcloud_wopi_public_url: "https://bureau.{{ domaine_interne }}" # navigateur → edge
# --- Données + admin ---
serveur_nextcloud_data_dir: "{{ serveur_nextcloud_racine }}/data"
serveur_nextcloud_admin_user: "admin"
serveur_nextcloud_admin_password: "{{ vault_nextcloud_admin | default('') }}"
# --- Connexion locale (acces de secours) ---
# `false` = le formulaire n'est pas propose au repos ; le SSO Keycloak est le seul
# chemin annonce. Le compte local existe toujours et s'atteint par `sudo` sur l'hote
# (`occ user:resetpassword`), qui est le mecanisme de secours retenu.
#
# NUANCE PROPRE A NEXTCLOUD, a ne pas gommer : `hide_login_form` MASQUE le formulaire,
# il ne le ferme pas — `…/login?direct=1` y accede encore, et l'amont le documente
# comme voulu (c'est ainsi qu'un admin entre). La protection reelle est donc de ne plus
# l'ANNONCER, pas de l'interdire. Grafana et Forgejo, eux, ferment vraiment.
# Le pretendre equivalent donnerait un faux confort.
serveur_nextcloud_connexion_locale: false
# Domaines de confiance : hostname exposé + nom court local.
serveur_nextcloud_trusted_domains:
- "{{ serveur_nextcloud_hostname }}"
- "{{ ansible_hostname | default('localhost') }}"
# --- Identité visuelle Alliance Boréale ---
serveur_nextcloud_branding: true
serveur_nextcloud_theme_nom: "{{ organisation | default('Organisation') }}"
serveur_nextcloud_theme_slogan: "Votre maison numérique souveraine"
serveur_nextcloud_theme_couleur: "#0e1640"
serveur_nextcloud_theme_ciel: true # thème custom « ciel boréal » (login + app)
# --- Sécurité : whitelister le sous-réseau d'admin (PAS désactiver l'anti-force-brute) ---
serveur_nextcloud_bruteforce_whitelist: "{{ (sous_reseau_admin | default('')) }}"
# --- Habilitation par groupe (D-66) -------------------------------------------
# `user_oidc` provisionne les groupes du claim `groups` — ceux que Keycloak projette
# depuis LDAP (group-ldap-mapper). Etre dans un groupe ne donne pourtant aucun
# pouvoir : l'administration de Nextcloud est le groupe interne `admin`, ou le role
# verse les membres du groupe d'habilitation.
serveur_nextcloud_oidc_groupe_claim: "groups"
serveur_nextcloud_oidc_groupe_admin: "sysadmin"
# Empreinte du mot de passe admin APPLIQUE (rotation). Voir tasks/configurer.yml.
serveur_nextcloud_marqueur_admin: "/etc/setops-nextcloud-admin-sha256"
# Cache d'artefacts DU CONTROLEUR (pas de la cible). Le controleur telecharge une fois,
# puis pousse par SSH : aucun flux nouveau, et l'artefact devient deployable hors ligne.
# Surchargeable par `setops_cache_artefacts` pour partager un cache commun.
serveur_nextcloud_cache_local: "{{ setops_cache_artefacts | default(lookup('env', 'HOME') + '/.cache/setops') }}"