Tarnyko's website
Tarnyko's website
about

[Tutoriel] Héberger Collabora Online

2021-03-01

Collabora Online (aka la version hébergée de LibreOffice Online, concurrent libre d'Office 365) est assez complexe à héberger soi-même.

collabora_online

C'est-à-dire que l'on trouve des tutoriels, mais tous basés sur :

et donc très lourds, surtout qu'ils n'expliquent rien des ports ouverts, démons système et configurations faites...
Et quand à suivre le tutoriel officiel d'installation de l'édition communautaire nommé CODE, il se limite à "juste les paquets" ; on n'est donc pas plus avancé !

Heureusement que je suis là.

Par la suite, toutes les commandes seront demontrées :

I. Installer Collabora Online CODE

Collabora Online en fait, c'est deux choses :

Installation

Les paquets s'installent par :

wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key && rpm --import repomd.xml.key
yum-config-manager --add-repo https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7
yum -y install loolwsd CODE-brand

#  CentOS >= 8:
# dnf config-manager --add-repo ...
#  Fedora >= 41:
# dnf config-manager addrepo --from-repofile=...
#
# dnf -y install ...

L'installeur ne crée pas les paires de clés nécessaires au HTTPS (requis), alors allons-y :

openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/C=FR/ST=IDF/L=Paris/O=Tarnyko/CN=localhost"
openssl genrsa -out server.key 2048
openssl req -sha256 -new -key server.key -out server.csr -subj "/C=FR/ST=IDF/L=Paris/O=Tarnyko/CN=localhost"
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
cp server.key /etc/loolwsd/key.pem
cp server.crt /etc/loolwsd/cert.pem
cp ca.crt /etc/loolwsd/ca-chain.cert.pem

Tests

Ne reste plus qu’à lancer et vérifier l’état de l'ensemble :

systemctl restart loolwsd
systemctl status loolwsd

On ne peut à ce moment pas encore accéder à des documents ; mais d'ores et déjà découvrir les formats supportés via l'URL de base au :
https://localhost:9980/hosting/discovery

collaboracode1

On peut même, en utilisant cette URL, essayer d’en crafter une plus complète utilisant la syntaxe WOPI pour fournir un fichier file.doc et un token d’accès :
https://localhost:9980/loleaflet/655a266/loleaflet.html?WOPISrc=http%3A%2F%2Flocalhost%2Ffile.doc&access_token=DASDASAS

collaboracode2

Cela ne fonctionne pas car, même si nous avions effectivement un fichier file.doc sur notre serveur web local, CODE s’attend en fait à recevoir un fichier JSON contenant le nom, URL du fichier et plein de métadonnées propres à la norme WOPI.

Vous l'avez compris : ownCloud/nextClould/… sont en réalité des serveurs WOPI. Dans leur explorateur de fichiers, en faisant clic-droit-> « Éditer dans LibreOffice », ils génèrent en fait un tel fichier JSON et le fournissent à CODE via HTTP/REST ou WebSocket.

Heureusement, pas besoin d’installer ces monstres ; on va s’entraîner avec bien plus simple !

II. Installer CS3 WOPI Server

Prérequis

Écrit en Python 3, ce serveur WOPI est une sorte d'implémentation de réference.
Il ne fournit pas d'interface graphique ni web, mais a l'avantage de la simplicité et nous permettra de jouer en ligne de commande :

git clone https://github.com/cs3org/wopiserver
cd wopiserver/

Un CentOS 7 bien à jour fournira Python 3 :

$ yum install python3 python3-pip

Il existe ensuite deux écoles. L'on peut soit :

pip3.6 install -r requirements.txt
tar xfvj python36-el7-wopiserver_deps.tar.bz2
cd python36-el7-wopiserver_deps/
./install.sh -y

Installation et configuration

Reste à créer la structure de répertoires :

mkdir /var/wopi_local_storage && chmod a+rwx /var/wopi_local_storage
mkdir /var/log/wopi && chmod a+rwx /var/log/wopi
mkdir /etc/wopi && chmod a+rwx /etc/wopi
cp wopiserver.conf /etc/wopi/wopiserver.defaults.conf
echo 'testsecret' > /etc/wopi/wopisecret
echo 'testsecret' > /etc/wopi/iopsecret

Et éditer /etc/wopi/wopiserver.defaults.conf :
(je mets uniquement les sections à décommenter/modifier)

[general]
storagetype = local
port = 8880
codeurl = https://localhost:9980
wopiurl = http://localhost:8880
downloadurl = http://localhost:8880/wopi/cbox/download

[local]
storagehomepath = /var/wopi_local_storage

Quelques explications :

Copions-y donc un document Waurde 2003© et, dans un nouveau terminal, démarrons le serveur WOPI :

cp file.doc /var/wopi_local_storage/
python3.6 src/wopiserver.py

(si le shell revient à la ligne, il y a un souci... voir les logs dans /var/log/wopi/wopiserver.log)

Tests

Il est temps d’essayer de générer une URL avec l’outil shell :

PYTHONPATH=./src python3.6 tools/wopiopen.py -v READ_WRITE /file.doc testtoken

collaboracode3

On peut tester le format du JSON en utilisant la WOPI_URL (caractères spéciaux %3A,%2F remplacés par :,/) complétée du WOPI_TOKEN (balise b'' retirée) :

collaboracode4

et même utiliser la DownloadUrl (encadrée ci-dessus) pour télécharger notre document en direct :

collaboracode5

III. Mise en oeuvre finale

La syntaxe à envoyer à CODE pour éditer notre document est donc au final :
https://localhost:9980/loleaflet/655a266/loleaflet.html?WOPISrc=$WOPI_URL&access_token=$WOPI_TOKEN

collaboracode6

Et voilà !