Outils pour utilisateurs

Outils du site


collabora_online_via_docker_nextcloud

Collabora Online via Docker dans Nextcloud

Nextcloud est un nuage personnel installable sur son propre serveur comprenant non seulement un espace de fichiers (comme Dropbox) mais aussi de multiples applications comme un calendrier, un tableau de gestion de projet (comme Trello), de la visio/tchat, de la gestion de mots de passe (via Keepass), un webmail…etc, le tout de manière collaborative à travers des groupes.

Collabora Online Development permet de bénéficier d'une suite bureautique en ligne, du même type que celles de Google par exemple. On peut la connecter à Nextcloud pour travailler directement sur les fichiers stockés dans le nuage.

Pour la suite, on supposera que l'on est sur un serveur Debian 10 (buster), que le serveur web est Apache et que Nextcloud est déjà installé sur l'adresse nextcloud.monserveur.org. On installera la suite Collabora sur l'adresse collabora.monserveur.org, ce qui suppose que ce sous domaine est ddéjà confi

Docker doit aussi être préalablement installé. Voir la doc d'installation de Docker.

Enfin, pour créer un certificat SSL et passer le trafic de Collabora en HTTPS, Certbot doit aussi être installé.

Installer et démarrer Collabora dans Docker

On commence par aller chercher l'image de Collabora sur le Docker Hub qui sera utilisé dans un container Docker :

docker pull collabora/code

Ensuite on démarre le container :

docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=nextcloud\\.monserveur\\.org' --restart always --cap-add MKNOD collabora/code

Avec :

  • -t : crée une pseudo-TTY
  • -d : éxécute le programme en fond de tâche
  • -p 127.0.0.1:9980:9980 : map et écoute sur le port 9980
  • -e 'domain=nextcloud\\.monserveur\\.org' : passe une variable spécifiant l’url sur laquelle nextcoud est installé (pas celle de Collabora !)
  • –restart always : rédémarre systématiquement si le container crash
  • –cap-add MKNOD : donne des capabilités linux au container
  • collabora/code : nom de l’image qui démarrera dans le container

On peut vérifier que le container est démarré avec :

docker ps -a
// ou
netstat -lnpt | grep docker

Mettre cette commande de lancement dans un script shell simplifiera les choses pour les futurs démarrages.

Configurer Apache

Vérifier que ces modules apache sont bien activés :

  • proxy
  • proxy_wstunnel
  • proxy_http
  • ssl

S'ils ne le sont pas, les activer et relancer Apache.

Créer un Virtual Host sur le port 80 (pour le moment) qui définira le domaine de Collabora (collabora.monserveur.org). Par exemple on crée le fichier /etc/apache2/sites-available/collabora.monserveur.org.conf dans lequel on met :

<VirtualHost *:80>
 
        ServerName collabora.monserveur.org
 
        # Encoded slashes need to be allowed
        AllowEncodedSlashes NoDecode
 
        # Container uses a unique non-signed certificate
        SSLProxyEngine On
        SSLProxyVerify None
        SSLProxyCheckPeerCN Off
        SSLProxyCheckPeerName Off
 
        # keep the host
        ProxyPreserveHost On
 
        # static html, js, images, etc. served from loolwsd
        # loleaflet is the client part of LibreOffice Online
        ProxyPass           /loleaflet https://127.0.0.1:9980/loleaflet retry=0
        ProxyPassReverse    /loleaflet https://127.0.0.1:9980/loleaflet
 
        # WOPI discovery URL
        ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
        ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery
 
        # Main websocket
        ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon
 
        # Admin Console websocket
        ProxyPass   /lool/adminws wss://127.0.0.1:9980/lool/adminws
 
        # Download as, Fullscreen presentation and Image upload operations
        ProxyPass           /lool https://127.0.0.1:9980/lool
        ProxyPassReverse    /lool https://127.0.0.1:9980/lool
 
        # Endpoint with information about availability of various features
        ProxyPass           /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0
        ProxyPassReverse    /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities
 
        # Logs
        ErrorLog "/var/log/apache2/collabora_error"
 
</VirtualHost>

Activer ce virtual host :

a2ensite collabora.monserveur.org.conf

Puis redémarrer Apache.

Configurer un certificat SSL

Il faut maintenant obtenir un certificat SSL pour signer le trafic HTTPS de collabora.monserveur.org. Pour cela, utiliser Certbot avec la commande :

certbot --apache --agree-tos --redirect --hsts --staple-ocsp -d collabora.monserveur.org

Cela va automatiquement créer un nouveau virtual host collabora.monserveur.org-le-ssl.conf qui écoute le port 443 (https) et rediriger le trafic du port 80 (précédemment créé) vers le 443.

Puis rédémarrer Apache.

Autre config

Parfois, pour que Nextcloud puisse voir correctement Collabora, il faut ajouter dans /etc/hosts une ligne indiquant l'IP du serveur vers laquelle pointe le domaine collabora.monserveur.org comme ceci :

XXX.XXX.XXX.XXX    collabora.monserveur.org

Configurer Nextcloud

Le container docker de Collabora est démarré, le certificat SSL est prêt, il reste à indiquer à Nextcloud où se trouve Collabora.

Pour ça, en tant qu'admin, installer l'application Collabora Online. Attention à ne pas installer l'application “Collabora Online - Built-in CODE Server” qui installerait une version allégée de Collabora qui rentrerait alors en conflit avec que l'on vient de configurer.

Ensuite, toujours en tant qu'admin, aller dans les Paramètres puis “Collabora Online Development Edition”. Choisir “Utiliser votre propre serveur” et indiquer l'url de Collabora : https://collabora.monserveur.org

Et voilà :)

Mettre à jour Collabora

D'abord il faut éteindre et supprimer le container qui fait actuellement tourner Collabora. Récupèrer son ID dans la liste affichée par la commande :

docker ps -a

Puis supprimer le container :

docker rm -f <id-du-container>

Récupérer la dernière image de Collabora :

docker pull collabora/code

Enfin, relancer le container avec la même commande Docker vu au début (d'où le côté pratique de la mettre dans un script).

collabora_online_via_docker_nextcloud.txt · Dernière modification: 2021/02/05 03:24 de n1c0