Installer Collabora Online (CODE) pour Nextcloud 12 sous Debian 8

Publié le 5 juillet 2017 Par WOoOinux

Collabora Debian

Collabora Online est une suite bureautique en ligne basée sur LibreOffice Online.

Collabora Online permet à plusieurs personnes en simultanée de modifier tout document LibreOffice ou MS Office (textes, classeurs, diaporamas).

Chaque personne peut modifier le document et en parallèle voir les modifications des autres personnes connectées au document. Une liste déroulante présente les utilisateurs connectés (et la couleur qui leur est associée).

Collabora Online s’intègre également dans Nextcloud et c’est justement ce que nous allons voir dans ce tutoriel.

Pour en savoir plus sur la différence entre Collabora Online et LibreOffice Online -> https://www.collaboraoffice.com/community-en/understanding-the-differences-between-libreoffice-online-code-and-collabora-online/

Avant de démarrer, j’ai fait ce tutoriel sur Debian 8 (64 bits), Apache 2.4.10 et Nexcloud 12.

Bien évidemment, toutes les commandes mentionnées ci-après sont à exécuter en tant que root…

Installation de Docker

Si ce n’est pas déjà le cas, nous allons commencer par installer Docker.

On met à jour la liste des dépôts :

apt-get update

On installe les dépendances :

apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

On ajoute le dépôt de Docker :

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

On ajoute la clé GPG du dépôt :

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

On remet à jour la liste des dépôts et on installe Docker :

apt-get update && apt-get install docker-ce

Installation de Collabora Online

On lance le téléchargement du container :

docker pull collabora/code

On lance le container :

Attention de bien remplacer « domain=cloud\\.mydomain\\.tld » par le sous-domaine de votre instance Nextcloud et de bien veiller également à double-échapper chaque sous-domaine !

docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\\.mydomain\\.tld' --restart always --cap-add MKNOD collabora/code

Activation des modules Apache

Afin de faire fonctionner correctement le reverse proxy ainsi que le support du SSL, vous allez devoir activer certains modules d’Apache :

a2enmod proxy
a2enmod proxy_wstunnel
a2enmod proxy_http
a2enmod ssl

On redémarre ensuite Apache pour activer les modules :

service apache2 restart

Mise en place des hôtes virtuels

Commençons par créer l’hôte virtuel pour le sous-domaine HTTP qui aura uniquement pour but de rediriger vers le sous-domaine en HTTPS :

nano /etc/apache/sites-available/collabora.conf

On y insère ensuite le code ci-dessous :

Attention de bien remplacer les deux occurrences de « collabora.mydomain.tld » par le sous-domaine que vous aurez créé pour Collabora Online (et non celui de votre instance Nextcloud) !

<VirtualHost *:80>
        ServerName collabora.mydomain.tld

        # Redirection vers le HTTPS
        RewriteEngine on
        RewriteCond %{SERVER_NAME} =collabora.mydomain.tld
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]
</VirtualHost>

On sauvegarde et on quitte le fichier :

CTRL+O
CTRL+X

On active ensuite l’hôte virtuel :

a2ensite collabora.conf

Créons maintenant l’hôte virtuel pour la version HTTPS du sous-domaine :

nano /etc/apache/sites-available/collabora-le-ssl.conf

On y insère ensuite le code ci-dessous :

Attention de bien remplacer les trois occurrences de « collabora.mydomain.tld » par le sous-domaine que vous aurez créé pour Collabora Online (et non celui de votre instance Nextcloud) !

Concernant les certificats SSL, dans mon cas, j’ai utilisé Let’s Encrypt (voir mon tutoriel à ce sujet) donc veillez bien également à bien modifier le chemin vers votre certificat ( « SSLCertificateFile /etc/letsencrypt/live/collabora.mydomain.tld /fullchain.pem » ainsi que « SSLCertificateKeyFile /etc/letsencrypt/live/collabora.mydomain.tld /privkey.pem ») en fonction de l’emplacement de ces derniers. La ligne « Include /etc/letsencrypt/options-ssl-apache.conf » étant spécifique à Let’s Encrypt, veillez à modifier ou supprimer cette ligne en fonction de votre cas.

<VirtualHost *:443>
        ServerName collabora.mydomain.tld
:443

        <Location />
                Require all granted
        </Location>

        ErrorLog /var/log/apache2/collabora-error.log
        CustomLog /var/log/apache2/collabora-access.log combined

        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/collabora.mydomain.tld
/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/collabora.mydomain.tld
/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLProtocol             all -SSLv2 -SSLv3
        SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-$
        SSLHonorCipherOrder     on

        # 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

</VirtualHost>

On sauvegarde et on quitte le fichier :

CTRL+O
CTRL+X

On active ensuite l’hôte virtuel :

a2ensite collabora-le-ssl.conf

Enfin, on redémarre Apache pour prendre en compte les nouveaux hôtes virtuels :

service apache2 restart

Du côté du Firewall…

Lors de l’activation du container, Docker va automatiquement ajouté des règles dans votre firewall (iPtables dans mon cas).

Cependant, (et notamment dans mon cas), il a fallu que j’ajoute manuellement les trois règles ci-dessous dans mon script Iptables en plus de celles ajoutées par Docker :

iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT
iptables -A INPUT -i docker0 -j ACCEPT

Et redémarrer ensuite Iptables :

/etc/init.d/iptables restart

Comme mon script Iptables réinitialise TOUTES les règles lors de son redémarrage, il a donc supprimé les règles ajoutées par Docker.

Je dois donc redémarrer également Docker pour qu’il puisse ajouter à nouveau ses règles aux miennes :

service docker restart

Et voilà ! C’est terminé pour l’installation sur le serveur !

Activation de l’application Collabora Online dans Nextcloud

  1. Allez dans le menu « Applications » de Nexcloud
  2. Dans la colonne de gauche, cliquez sur « Bureautique et texte »
  3. Recherchez et activez l’application « Collabora Online »
  4. Allez maintenant dans le menu « Administration »
  5. Dans la colonne de gauche, cliquez sur « Collabora Online »
  6. Renseignez le sous-domaine de votre instance Collabora Online (ex: collabora.mydomain.tld )

Et voilà ! Si tout s’est bien passé vous pouvez dorénavant créer et éditer des documents textes, tableurs ou diaporama dans Nexcloud !

Collabora Debian

Troubleshootings

Message d’erreur lors du lancement du container

Si, lors de lancement du container (commande docker run) vous voyez les message d’erreur ci-dessous :

iptables --wait -t nat -A DOCKER -p tcp -d 127.0.0.1 --dport 9980 -j DNAT --to-destination 172.17.0.2:9980 ! -i docker0: iptables: No chain/target/match by that name.

Redémarrez simplement Docker :

service docker restart

Messages d’erreurs dans les logs du container

Si, dans vos les logs du container vous voyez le message d’erreur ci-dessous :

Getting CA Private Key
loolwsd version details: 1.9.6 - 1.9.6
loolforkit version details: 1.9.6 - 1.9.6
frk-00032-0032 0:00:00.000920 [ loolforkit ] FTL  Capability cap_sys_chroot is not set for the loolforkit program.
frk-00032-0032 0:00:00.000974 [ loolforkit ] FTL  Capability cap_mknod is not set for the loolforkit program.
frk-00032-0032 0:00:00.001007 [ loolforkit ] FTL  Capability cap_fowner is not set for the loolforkit program.

Alors je vous recommande suivre la solution de Guz (qui a bien fonctionnée dans mon cas) : https://help.nextcloud.com/t/collabora-docker-capabilities-problem/4774/10

Message d’erreur dans l’application Collabora Online de Nexcloud

Si, lorsque vous chargez un document dans Nexcloud, vous voyez le message d’erreur ci-dessous :

Unauthorized WOPI host

Alors vous pouvez tenter de suivre la solution de Jakub_Rocek : https://help.nextcloud.com/t/collabora-online-setup/4645/14

Cette solution consiste à effectuer un simple échappement au lieu d’un double lors du lancement du container :

docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=cloud\.mydomain\.tld' --restart always --cap-add MKNOD collabora/code

Cette solution semble fonctionner dans mon cas.

Ressources :

Le site officiel de Docker : https://docs.docker.com/engine/installation/linux/docker-ce/debian/

Le site officiel de Collabora Online : https://nextcloud.com/collaboraonline/