Editez vos documents avec Collabora et Nextcloud sur votre serveur Virtualmin

| 6 minutes, 9 secondes

Nextcloud est un logiciel libre (fork d'Owncloud) qui vous permet d'héberger un cloud privé sur votre serveur. Parmi les fonctionnalités alléchantes apparues dans les dernières versions majeures figure l'intégration de Collabora Online, une suite Office qui vous permet d'éditer en ligne et de façon collaborative vos documents, feuilles de calcul et présentations, le tout gratuitement et en respectants les standards ouverts. L'association Nextcloud + Collabora est ainsi une alternative libre, gratuite et auto-hébergée à OneDrive et autres GoogleDrive. La vie rêvée pour vos données !

MAJ du 31/12/2019 : Suite à la mise à jour du package loolwsd, il est possible que vous ne parveniez plus à utiliser Collabora. Il faut alors éditer le fichier /etc/loolwsd/loolwsd.xml.dpkg-dist avec les modifications indiquées aux paragraphes Configurer SSL et WOPI, avant de le renommer en loolwsd.xml (en écrasant le fichier existant).

Mais...

Mais — il en faut bien un — il s'avère difficile de faire fonctionner ce duo sur un seul et même serveur. Les nombreux tutoriels — officiels ou non — disponibles sur internet nous invitent à installer Nextcloud de façon classique puis à lancer Collabora dans un conteneur Docker, moyennant quelque configuration de reverse proxy. C'est bien simple : je n'ai jamais réussi à faire fonctionner ainsi Collabora, tant sur un serveur administré via Plesk que sur un serveur doté de Webmin/Virtualmin.

Oubliez la baleine

Je vous propose ici une méthode sans Docker, que j'ai personnellement validée dans l'environnement suivant : Debian 9 avec Webmin et Virtualmin configuré pour utilisé Apache, Nexcloud 14 installé sur un Virtual Server de Virtualmin, avec un certificat SSL Let's Encrypt.
Dans l'absolu, il n'y a pas de raison pour que ladite méthode ne fonctionne pas sur Ubuntu, CentOS ou autre distribution, ni même sans Virtualmin, mais je ne peux pas le garantir.

Cette procédure ne nécessite pas la création d'un sous-domaine pour Collabora et n'expose aucun port supplémentaire sur Internet.

Installer Collabora via les paquets

Commençons par récupérer la clé de signature des dépôt officiels et installer le paquet Collabora. Suivant la distribution de votre serveur, les commandes varient. Cliquez sur la distribution de votre serveur pour voir les instructions correspondantes (attention, les commandes requièrent les droits de super-utilisateur) :

Debian 8
# Serveur de gestion de certificats OpenPGP et X.509
root@host: $ apt-get install dirmngr

# Récupération de la clé
root@host: $ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D

# Ajout de la source
root@host: $ echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian8 ./' >> /etc/apt/sources.list

# Installation de Collabora et du dictionnaire français
root@host: $ apt update && sudo apt install loolwsd code-brand hunspell-fr
Debian 9
# Serveur de gestion de certificats OpenPGP et X.509
root@host: $ apt-get install dirmngr

# Récupération de la clé
root@host: $ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D

# Ajout de la source
root@host: $ echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian9 ./' >> /etc/apt/sources.list

# Installation de Collabora et du dictionnaire français
root@host: $ apt update && sudo apt install loolwsd code-brand hunspell-fr
Ubuntu 16.04
# Serveur de gestion de certificats OpenPGP et X.509
root@host: $ apt-get install dirmngr

# Récupération de la clé
root@host: $ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D

# Ajout de la source
root@host: $ echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE ./' >> /etc/apt/sources.list

# Installation de Collabora et du dictionnaire français
root@host: $ apt update && sudo apt install loolwsd code-brand hunspell-fr
Ubuntu 18.04
# Serveur de gestion de certificats OpenPGP et X.509
root@host: $ apt-get install dirmngr

# Récupération de la clé
root@host: $ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D

# Ajout de la source
root@host: $ echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-ubuntu1804 ./' >> /etc/apt/sources.list

# Installation de Collabora et du dictionnaire français
root@host: $ apt update && sudo apt install loolwsd code-brand hunspell-fr
CentOS 7
# Récupération de la clé
root@host: $ wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key && rpm --import repomd.xml.key

# Ajout de la source
root@host: $ yum-config-manager --add-repo https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7

# Installation de Collabora et du dictionnaire français
root@host: $ yum install loolwsd CODE-brand hunspell-fr

Configurer SSL

Pour que Collabora fonctionne, il est indispensable de lui fournir les certificats SSL du domaine de votre instance Nextcloud. Malheureusement, ces certificats ne sont accessibles qu'à l'utilisateur UNIX correspondant à ce domaine sur votre serveur. Il est donc nécessaire d'effectuer une copie desdits certificats dans un répertoire accessible par Collabora, et de changer leur propriétaire. Les certificats sont stockés par Virtualmin dans le dossier de plus haut niveau du domaine correspondant, à côté de public_html. En règle générale, si votre domaine est nextcloud.votre-domaine.tld, virtualmin les aura déposés dans/home/votre-domaine/domains/nextcloud.votre-domaine.tld/. Nous allons les copier vers /etc/loolwsd qui est le répertoire de Collabora :

root@host: $ cp /chemin/vers/votre/dossier/nextcloud/ssl* /etc/loolwsd/
root@host: $ chown lool:lool /etc/loolwsd/ssl*

Il faut désormais indiquer à Collabora où trouver ces certificats. Pour cela, éditez le fichier /etc/loolwsd/loolwsd.xml et mettez à jour la balise cert_file_path en conséquence. Vous obtiendrez donc :

[...]
<cert_file_path desc="Path to the cert file" relative="false">/etc/loolwsd/ssl.cert</cert_file_path>
   <key_file_path desc="Path to the key file" relative="false">/etc/loolwsd/ssl.key</key_file_path>
   <ca_file_path desc="Path to the ca file" relative="false">/etc/loolwsd/ssl.ca</ca_file_path>
[...]    

C'est tout pour SSL. Ou Presque. Si comme moi vous utilisez Let's Encrypt pour générer et renouveler les certificats SSL de vos domaines, les fichiers des certificats seront mis à jour régulièrement (par défaut chaque mois) et il sera donc nécessaire de renouveler la copie. Pour automatiser celà, je vous propose d'installer incron qui fonctionne de la même façon que cron à ceci prêt qu'il gère les triggers de type modification de fichier :

Debian & Ubuntu
root@host: $ apt-get install incron
root@host: $ echo root >> /etc/incron.allow
CentOS
root@host: $ yum install incron
root@host: $ echo root >> /etc/incron.allow

Créez le fichier /etc/loolwsd/importSSL.sh suivant :

#!/bin/bash

# Attente que tous les fichiers soient générés
sleep 10
# Copie des certificats
cp /chemin/vers/votre/dossier/nextcloud/ssl* /etc/loolwsd/
# Changement de propriétaire
chown lool:lool /etc/loolwsd/ssl*

# On redémarre Collabora
service loolwsd restart

Rendez ce script executable et programmez son execution après chaque modification du certificat :

root@host: $ chmod +x /etc/loolwsd/importSSL.sh
root@host: $ incrontab -e
 |
 |  /chemin/vers/votre/dossier/nextcloud/ssl.cert IN_ATTRIB /etc/loolwsd/importSSL.sh
 |
 root@host: $ service incron restart

Autoriser le stockage WOPI

Éditez le fichier /etc/loolwsd/loolwsd.xml et mettez à jour la balise storage en ajoutant deux lignes, l'une pour l'IP de votre serveur, l'autre pour le (sous-)domaine de votre instance Nextcloud :

<host desc="Regex pattern of hostname to allow or deny." allow="true">1\.2\.3\.4</host>
<host desc="Regex pattern of hostname to allow or deny." allow="true">nextcloud.votredomaine.tld</host>

Configurer le proxy HTTP d'Apache

Dans cette étape nous allons configurer Apache de façon à ce qu'il translate tout le trafic en provenance ou à destination de Collabora vers le port qui lui est dédié. Nous n'avons ainsi pas besoin de créer un sous-domaine, ni d'exposer un port sur internet.

Commençons par activer les modules d'Apache qui permettent la mise en place du proxy HTTP. Il est probable que certains modules soient déjà activés :

root@host: $ a2enmod proxy
root@host: $ a2enmod proxy_wstunnel
root@host: $ a2enmod proxy_http
root@host: $ service apache2 restart

Nous pouvons désormais configurer le proxy HTTP en modifiant la configuration Apache du domaine de l'instance Nextcloud. Editez le fichier /etc/apache2/sites-available/nextcloud.votre-domaine.tld (remplacez nextcloud.votredomaine.tld par le domaine de votre instance Nextcloud) et ajoutez-y les lignes suivantes après la balise <VirtualHost *:443> :

AllowEncodedSlashes NoDecode

SSLProxyEngine On
SSLProxyVerify None
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off

ProxyPreserveHost On

ProxyPass           /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse    /loleaflet https://127.0.0.1:9980/loleaflet
ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery
ProxyPass           /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities retry=0
ProxyPassReverse    /hosting/capabilities https://127.0.0.1:9980/hosting/capabilities
ProxyPassMatch      "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon
ProxyPass           /lool/adminws wss://127.0.0.1:9980/lool/adminws
ProxyPass           /lool https://127.0.0.1:9980/lool
ProxyPassReverse    /lool https://127.0.0.1:9980/lool

Toutes les configurations sont désormais terminées, relancez les deux services pour qu'elles soient prises en compte :

root@host: $ service apache2 restart
root@host: $ service loolwsd restart

Configurer l'application Nextcloud

Accédez à votre instance Nextcloud, installez l'application Collabora Online puis rendez-vous dans les paramètres, onglet Administration > Collabora Online. Dans le champ Serveur Collabora en ligne, renseingez l'adresse de votre instance Nextcloud en explicitant le protocole HTTPS et le port 443 :

Si vous souhaitez que les documents créés soient au format OOXML (formats Microsoft Office >= 2010), cochez la case correspondante. A défaut les documents seront créés aux formats Open Document.

Tout est fin prêt, vous pouvez éditer les fichiers Office déjà présent sur votre cloud ou en créer de nouveau directement depuis l'interface Nextcloud :

Sécurisez votre accès SSH avec u… Synchroniser l'heure de votre Ra…

Commentaires