`forge-01` a echoue sur une URL de decouverte pointant `https://keycloak.<domaine>` — le nom que rien ne publie. J'avais corrige exactement ca dans `serveur_oauth2_proxy` quelques heures plus tot, en croyant regler un cas isole. Il etait dans quatre roles : forgejo, grafana, nextcloud, oauth2-proxy. Chacun fabriquait le meme nom par la meme convention. Une cinquieme correction a la main aurait diverge comme les quatre autres. `roles/resoudre_idp` lit l'exposition declaree au plan et rend hote, base et discovery. Les roles n'en gardent qu'un REPLI nomme, jamais la valeur de travail. Verifie en base sur forge-01 : discovery = auth.chezlepro.internal, GroupClaimName = groups, AdminGroup = sysadmin. Meme lecon que `resoudre_annuaire` hier : corriger la valeur la ou elle echoue ne corrige que la. Ce sont les copies silencieuses qui coutent la journee suivante. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
114 lines
5.9 KiB
YAML
114 lines
5.9 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.1"
|
|
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"
|