Déploiement de collabora online sur nextcloud

C’est quoi collabora online

Collabora Online est une suite bureautique en ligne compatible avec un navigateur web.
C’est l’équivalent d’Office 365 ou de Google Docs, mais en open source.
Dans le cas de Nextcloud, la version utilisée est Collabora Online (CODE), c’est-à-dire l’édition communautaire.
Voici quelques capture d’écran

Contexte

jusqu’à maintenant mon Nextcloud utilisé collabora online version intégrer,
Sa fonctionne mais pas évolutif et plus lent

j’ai donc pris la décision de m’atteler à la tâche suivante : installer Collabora Online dans un conteneur Docker sur ma machine virtuelle dédiée aux Container Docker, puis assurer son intégration avec Nextcloud.

Techniquement

docker-compose.yml

Ici, j’ai créé un docker-compose.yml. J’ai tendance à créer un réseau bridge dédié par application afin de segmenter les flux et faciliter la gestion des reglès de parfeu.

services:
  collabora:
    image: collabora/code:latest
    container_name: collabora
    restart: unless-stopped
    ports:
      # Ici on indique que seul le localhost (la VM) peut accéder au service. Nginx va gérer l’accès depuis l’extérieur).
      - "127.0.0.1:9980:9980"
    environment:
      # Ici on indique le domaine du Nextcloud autorisé (whitelist WOPI).
      - domain=exemple\.exemple\.com
      # Ici on désactive le SSL côté Collabora, mais on précise que la terminaison est SSL
      # est faite par le reverse proxy (TLS termination).
      - extra_params=--o:ssl.enable=false --o:ssl.termination=true
    cap_add:
      - MKNOD
    networks:
      - collabora

networks:
  collabora:
    driver: bridge

Nginx (reverse proxy) – VM Docker

Les conteneurs Docker sont hébergés sur une VM dédiée.
Un Nginx local y assure le rôle de reverse proxy interne en HTTPS vers le LAN (le but est de chiffrer la connexion dans le LAN entre les deux reverse proxy).
J’ai mis en place une architecture par port (un port = un service). Au niveau du pare-feu, seul le reverse proxy frontal (la VM exposée à Internet) est autorisé à accéder à ces ports ; les autres machines du LAN n’y ont pas accès.

server {
    listen 850 ssl;
    http2  on;

    ssl_certificate /etc/nginx/certs/selfsigned.crt;
    ssl_certificate_key /etc/nginx/certs/selfsigned.key;

    # TLS versions minimum et maximum
    ssl_protocols TLSv1.2 TLSv1.3;

    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE>
    ssl_prefer_server_ciphers on;

    # Headers HTTP Strict Transport Security (HSTS)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

 location ^~ /browser {
   proxy_pass http://127.0.0.1:9980;
   proxy_set_header Host $host;
 }

 # WOPI discovery URL
 location ^~ /hosting/discovery {
   proxy_pass http://127.0.0.1:9980;
   proxy_set_header Host $host;
 }

 # Capabilities
 location ^~ /hosting/capabilities {
   proxy_pass http://127.0.0.1:9980;
   proxy_set_header Host $host;
 }

 # main websocket
 location ~ ^/cool/(.*)/ws$ {
   proxy_pass http://127.0.0.1:9980;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "Upgrade";
   proxy_set_header Host $host;
   proxy_read_timeout 36000s;
 }

 # download, presentation and image upload
 location ~ ^/cool {
   proxy_pass http://127.0.0.1:9980;
   proxy_set_header Host $host;
 }

 # Admin Console websocket
 location ^~ /cool/adminws {
   proxy_pass https://127.0.0.1:8000;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "Upgrade";
   proxy_set_header Host $host;
   proxy_read_timeout 36000s;
   proxy_ssl_verify off;
 # Préservation des en-têtes
   proxy_set_header X-Forwarded-Host $host;
   proxy_set_header X-Forwarded-Server $host;
   proxy_set_header X-Forwarded-URI $request_uri;

 }
}

Configuration du reverse proxy frontal non présentée volontairement

Configuration sur nextcloud

Pour Nextcloud il faut aller dans les paramètres admin et chercher Nextcloud office puis faire les chose suivante

  • Cocher Utilisez votre propre serveur
  • entrer l’url
  • save

Conclusion

Après toutes les manipulations effectuées, j’ai désormais ma propre suite collaborative. Je n’ai donc plus besoin de solutions comme Google Docs ou Microsoft Office 365, et l’ensemble fonctionne globalement bien.


Retour en haut