serveur_collabora : rôle codifié depuis le spike (Docker, WOPI)
Conteneur collabora/code (restart always), publié sur localhost + IP LAN (gotcha : bind localhost seul → 502 depuis l'edge), aliasgroup = domaine Nextcloud, ssl.termination à l'edge, attente santé /hosting/capabilities. meta/flux.yml (ingress 9980 depuis edge) alimente le registre des flux. Docker (prouvé au spike) ; CODE natif = option future à spiker. Tag à épingler. ansible-lint profil production : 0 échec. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
79d0529686
commit
da4976aa98
6 changed files with 124 additions and 0 deletions
15
playbooks/groupes/serveur_collabora.yml
Normal file
15
playbooks/groupes/serveur_collabora.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
- name: Appliquer le groupe serveur_collabora
|
||||
hosts: serveur_collabora
|
||||
become: true
|
||||
gather_facts: true
|
||||
|
||||
pre_tasks:
|
||||
- name: Vérifier que la cible est Debian
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts.distribution == "Debian"
|
||||
fail_msg: "Ce playbook est prévu pour Debian."
|
||||
|
||||
roles:
|
||||
- serveur_collabora
|
||||
27
roles/serveur_collabora/README.md
Normal file
27
roles/serveur_collabora/README.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# serveur_collabora
|
||||
|
||||
Serveur d'édition de documents **Collabora Online (CODE)**, protocole WOPI, consommé
|
||||
par Nextcloud (`richdocuments`). **Codifié depuis le spike du 2026-07-05** (Docker, prouvé).
|
||||
|
||||
## Ce que le rôle fait
|
||||
- Installe Docker + lance le conteneur `collabora/code` (`restart: always`) ;
|
||||
- publie sur `127.0.0.1:9980` (Nextcloud co-localisé) **ET** l'IP LAN `:9980` (l'edge) — gotcha spike : bind localhost seul ⇒ **502** depuis l'edge ;
|
||||
- `aliasgroup1` = le domaine Nextcloud (`cloud.<domaine>`) — Collabora n'accepte le WOPI que de cet hôte ;
|
||||
- `ssl.enable=false` + `ssl.termination=true` (TLS terminé à l'edge) ;
|
||||
- attend la santé (`/hosting/capabilities` = 200).
|
||||
|
||||
## Dépendances / exposition (à fournir)
|
||||
- **Vhost edge WebSocket-aware** : `bureau.<domaine>` → ce nœud:9980 avec `map $http_upgrade`
|
||||
+ en-têtes `Upgrade`/`Connection` + `proxy_read_timeout` long. **Le vhost générique ne suffit pas**
|
||||
(l'édition live échoue sans WebSocket) ;
|
||||
- FQDN `bureau.<domaine>` dans les SAN du cert edge ;
|
||||
- port 9980 à firewaller (voir `meta/flux.yml` : ingress depuis l'edge seulement).
|
||||
|
||||
## Docker vs natif
|
||||
Le spike a prouvé **Docker** → on codifie Docker. Le **CODE natif** (paquets Collabora,
|
||||
`loolwsd`) serait plus « Set-OPS » (natif, pas de moteur Docker) mais exigerait **son propre
|
||||
spike**. Décision à trancher.
|
||||
|
||||
## Robustesse
|
||||
- **Épingler `serveur_collabora_tag`** en prod (pas de `:latest` surprise) ;
|
||||
- surveillance Icinga sur `/hosting/capabilities`.
|
||||
22
roles/serveur_collabora/defaults/main.yml
Normal file
22
roles/serveur_collabora/defaults/main.yml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
# =========================================================================
|
||||
# serveur_collabora — serveur d'édition de documents (Collabora Online / CODE),
|
||||
# protocole WOPI, consommé par Nextcloud (richdocuments). Codifié depuis le spike
|
||||
# du 2026-07-05 (Docker, prouvé). Le CODE natif (paquets Collabora) reste une
|
||||
# option future — nécessiterait son propre spike.
|
||||
# =========================================================================
|
||||
serveur_collabora_conteneur: "collabora"
|
||||
serveur_collabora_image: "collabora/code"
|
||||
serveur_collabora_tag: "latest" # À ÉPINGLER en prod (robustesse / pas d'upgrade surprise)
|
||||
|
||||
serveur_collabora_port: 9980
|
||||
# L'edge (autre hôte) doit joindre le conteneur → publier sur localhost ET l'IP LAN
|
||||
# (gotcha spike : bind 127.0.0.1 seul => 502 depuis l'edge). Firewaller via le registre des flux.
|
||||
serveur_collabora_lan_ip: "{{ ansible_default_ipv4.address | default(ansible_host) }}"
|
||||
|
||||
# Domaine Nextcloud autorisé (aliasgroup) — Collabora n'accepte le WOPI que de cet hôte.
|
||||
serveur_collabora_domaine_nextcloud: "cloud.{{ domaine_interne }}"
|
||||
serveur_collabora_aliasgroup: "https://{{ serveur_collabora_domaine_nextcloud | regex_escape }}:443"
|
||||
|
||||
# TLS terminé à l'edge : Collabora sert en HTTP derrière le proxy.
|
||||
serveur_collabora_extra_params: "--o:ssl.enable=false --o:ssl.termination=true"
|
||||
6
roles/serveur_collabora/meta/empreinte.yml
Normal file
6
roles/serveur_collabora/meta/empreinte.yml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
# Empreinte de dimensionnement (propriété du rôle). Collabora exécute des cœurs
|
||||
# LibreOffice à la demande : mémoire notable, image conteneur ~1.5 Go.
|
||||
coeurs: 2
|
||||
memoire_mo: 2048
|
||||
disque_go: 10
|
||||
15
roles/serveur_collabora/meta/flux.yml
Normal file
15
roles/serveur_collabora/meta/flux.yml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
---
|
||||
# Flux réseau de Collabora Online (propriété du rôle). Voir docs/flux-conception.md.
|
||||
flux:
|
||||
- sens: ingress
|
||||
port: 9980
|
||||
protocole: tcp
|
||||
pair: edge
|
||||
chiffrement: clair
|
||||
raison: "Éditeur servi au navigateur via l'edge (WebSocket WOPI ; TLS terminé à l'edge)."
|
||||
- sens: ingress
|
||||
port: 9980
|
||||
protocole: tcp
|
||||
pair: localhost
|
||||
chiffrement: clair
|
||||
raison: "Vérifications WOPI serveur→Collabora depuis Nextcloud co-localisé."
|
||||
39
roles/serveur_collabora/tasks/main.yml
Normal file
39
roles/serveur_collabora/tasks/main.yml
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
- name: Installer Docker (moteur du conteneur Collabora)
|
||||
ansible.builtin.apt:
|
||||
name: docker.io
|
||||
state: present
|
||||
update_cache: true
|
||||
cache_valid_time: 3600
|
||||
|
||||
- name: Activer et demarrer Docker
|
||||
ansible.builtin.systemd:
|
||||
name: docker
|
||||
enabled: true
|
||||
state: started
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Lancer le conteneur Collabora CODE (WOPI, publie sur localhost + IP LAN)
|
||||
community.docker.docker_container:
|
||||
name: "{{ serveur_collabora_conteneur }}"
|
||||
image: "{{ serveur_collabora_image }}:{{ serveur_collabora_tag }}"
|
||||
state: started
|
||||
pull: true
|
||||
restart_policy: always
|
||||
ports:
|
||||
- "127.0.0.1:{{ serveur_collabora_port }}:9980"
|
||||
- "{{ serveur_collabora_lan_ip }}:{{ serveur_collabora_port }}:9980"
|
||||
env:
|
||||
aliasgroup1: "{{ serveur_collabora_aliasgroup }}"
|
||||
extra_params: "{{ serveur_collabora_extra_params }}"
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Attendre que Collabora reponde (capabilities)
|
||||
ansible.builtin.uri:
|
||||
url: "http://127.0.0.1:{{ serveur_collabora_port }}/hosting/capabilities"
|
||||
status_code: 200
|
||||
register: serveur_collabora_sante
|
||||
until: serveur_collabora_sante.status == 200
|
||||
retries: 12
|
||||
delay: 5
|
||||
when: not ansible_check_mode
|
||||
Loading…
Reference in a new issue