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>
90 lines
4.5 KiB
YAML
90 lines
4.5 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: "Chezlepro"
|
|
serveur_nextcloud_oidc_client_id: "nextcloud"
|
|
serveur_nextcloud_oidc_client_secret: "{{ vault_nextcloud_oidc | default('') }}"
|
|
serveur_nextcloud_oidc_realm: "{{ identite_realm | default('chezlepro') }}"
|
|
serveur_nextcloud_oidc_discovery: "https://keycloak.{{ domaine_interne }}/realms/{{ serveur_nextcloud_oidc_realm }}/.well-known/openid-configuration"
|
|
|
|
# --- 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('') }}"
|
|
|
|
# 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: "Chezlepro"
|
|
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('')) }}"
|