WoPiX, un serveur WOPI libre, indépendant, simple et léger
Un serveur WOPI (Web application Open Platform Interface) permet Ă un logiciel client de modifier un fichier stockĂ© sur un serveur. C'est la couche indispensable pour qu'OnlyOffice, LibreOffice (Collabora Online) et d'autres suites bureautiques puissent ĂȘtre utilisĂ©s sur le web. Ainsi, lorsque vous rĂ©clamez l'ouverture d'un document depuis votre navigateur web, vous vous connectez Ă la suite bureautique en ligne avec une URL particuliĂšre, contenant, entre autres, le nom du fichier Ă ouvrir. La suite bureautique peut alors discuter avec le serveur WOPI pour rĂ©cupĂ©rer le document. Les lectures, Ă©critures et modifications d'un document sont gĂ©rĂ©es par le serveur WOPI, Ă la demande de la suite bureautique. Le protocole a Ă©tĂ© créé par Microsoft en 2012, la rĂ©vision 14.5 de WOPI est sortie le 18 fĂ©vrier 2025.
Les serveurs WOPI libres de Nextcloud, Seafile, Tracim⊠ne sont pas indépendants. Comme je voulais utiliser Collabora Online sans déployer un NextCloud complet, j'ai écrit un serveur WOPI trÚs simple. Il est utilisé depuis plus d'un an sans problÚme et il est libre. Il est écrit en Java.
- lien ná” 1 : Article Wikipedia sur le protocole WOPI
- lien ná” 2 : Code source du projet
J'ai commencĂ© ce dĂ©veloppement car je travaille sur deux lieux privĂ©s diffĂ©rents avec un ordinateur Ă chaque endroit, un NAS dans l'un d'eux et je communique entre les deux machines Ă l'aide d'un dĂ©pĂŽt git sur le NAS. Ăa fonctionne relativement bien pour des fichiers qui n'ont pas vocation Ă rester ouverts dans des applications, mais pour des fichiers ODS ou ODT qui restent ouverts, c'est plus compliquĂ© car je me retrouve souvent avec des versions concurrentes sur les deux machines. J'ai donc regardĂ© du cĂŽtĂ© des suites de collaboration en ligne.
à une époque , je me servais d'Etherpad et de son équivalent tableur Ethercalc. Mais ces logiciels manquent de fonctionnalités, surtout le tableur. ProblÚme supplémentaire : j'ai déjà beaucoup de fichiers aux formats LibreOffice.
Ăa tombe bien, il y a la suite LibreOffice online, Ă©ditĂ©e par Collabora Online (CODE). Le problĂšme â comme soulignĂ© par une dĂ©pĂȘche â c'est qu'une fois CODE installĂ©, tu te retrouves Ă poil avec rien qui marche : il faut un serveur utilisant le protocole WOPI.
Pour éviter d'installer tout un NextCloud, j'ai écrit un petit serveur WOPI. C'est du Java avec Spring Boot. Le serveur est trÚs simple, sur le principe que plus un systÚme est simple, moins il a de chances de tomber en panne.
Par exemple, il n'y pas de droits d'accĂšs et on ne peut pas avoir plusieurs utilisateurs simultanĂ©s. Il faudrait mettre en Ćuvre le systĂšme de verrous et le systĂšme de droits d'accĂšs (faire reposer les droits d'accĂšs sur les droits du systĂšme de fichier, implique d'avoir un utilisateur sur la machine pour chaque utilisateur du logiciel). Cela n'a pas Ă©tĂ© implantĂ© parce que je suis le seul utilisateur sur ma machine. Mais ce ne serait pas long Ă dĂ©velopper.
Le serveur une fois lancĂ© expose des services REST, accessibles par la suite bureautique, mais aussi un service https qui permet d'afficher la liste des fichiers. Cette liste de fichier est cliquable et permet de se connecter Ă Libre Office avec la bonne URL. C'est la raison des paramĂštres proxyHost et code URL de l'application : ĂȘtre en mesure de gĂ©nĂ©rer la bonne URL.
Le code est prĂ©vu pour avoir plusieurs backends Ă l'aide d'une interface. Le seul mis en Ćuvre pour l'instant c'est un stockage sur disque local (avec auto discovery : on lui donne un rĂ©pertoire et il expose tout les documents du rĂ©pertoire).
Il consomme peu de ressources, la charge dépendra plus de Collabora Online ou d'OnlyOffice. Le serveur WOPI se contente de lire un fichier à l'ouverture et de l'écrire de temps en temps (comme lors des enregistrements automatiques).
Il n'est pas testé avec OnlyOffice. En principe WOPI est une norme et ça devrait fonctionner.
On peut le lancer avec java -jar. C'est du Spring Boot. On pourrait utiliser systemd. De mon cÎté, je l'ai mis dans un container docker qui lance la commande suivante
java -Dlogging.level.root=INFO \
-Dlogging.level.org.wopiserver=INFO \
-Dserver.port=8880 \
-jar /opt/app/app.jar \
--baseDir /mnt/docs \
--disableTLSCheck \
--codeURL https://172.17.0.8:9980 \
--proxyHost 192.168.124.252
Le code de WoPiX est dispo sur github et je suis ouvert Ă toute requĂȘte :-)
Commentaires : voir le flux Atom ouvrir dans le navigateur