Ajouter Libre Office dans Nextcloud sous Debian avec Nginx

Installer Collabora Online sous Debian avec Docker

Se rapporter au Wiki "Installer Docker CE sur Debian 8 (Jessie)" pour l’installation de Docker.

Télécharger Collabora Online

:$ docker pull collabora/code

Démarrer Collabora Online. Il est possible de configurer les dictionaires en ligne de commande (Voir les options sur le site de collaboraoffice).

:$ docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=mon\.domaine\.fr' -e 'dictionaries=fr_FR en_GB en_US' --restart always --cap-add MKNOD collabora/code

la commande suivante semble aussi fonctionner : docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=mon.domaine.fr' --cap-add MKNOD collabora/code

Il est possible de configurer un utilisateur admin et son mot de passe en ligne de commande en ajoutant -e "username=admin" -e "password=S3cRet".

Il est aussi possible d’ajuster la gestion des certifiats de collabora en ligne de commande Collabora Office : Code

ATTENTION : Il faut un certificat valide pour le domaine ou Collabora ne fonctionnera pas avec Nextcloud.

Installer Collabora Online sous Debian 9 avec Docker depuis le dépôt linux

Il faut compter une taille de 800 MO pour la version 4.0.5

Désinstaller la version de Collabora Online Docker si besoin. Lister les images docker sur le système pour connaitre l’identifiant du container de Collabora Online.

:$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                      NAMES
5d5349d57975        technosoft2000/calibre-web   "/bin/bash -c /init/…"   9 months ago        Up 37 minutes       0.0.0.0:8083->8083/tcp     calibre-web
e70dca86bf5e        f80df62976c0                 "/bin/sh -c 'bash st…"   17 months ago       Up 37 minutes       127.0.0.1:9980->9980/tcp   peaceful_noether

Arrêter et supprimer l’image docker de Collabora Online

CONTAINER_ID doit être remplacé par l’ID du container retourné par la commande docker ps. Ici ‘e70dca86bf5e’.

:$ docker stop CONTAINER_ID
:$ docker rm CONTAINER_ID

Importer la clé du dépôt dans le système Debian

:$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D
Executing: /tmp/apt-key-gpghome.R1YJnPxXd5/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 0C54D189F4BA284D
gpg: key 0C54D189F4BA284D: 1 signature not checked due to a missing key
gpg: clef 0C54D189F4BA284D : clef publique « Collabora Productivity <libreoffice@collabora.com> » importée
gpg:       Quantité totale traitée : 1
gpg:                     importées : 1

Ajouter le dépôt au gestionaire d’application Debian (i.e. APT)

:$ echo 'deb https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian9 ./' >> /etc/apt/sources.list.d/collaboraoffice.list

Mettre à jour la liste des applications des dépôts du gestionaire d’application

:$ apt update

Vérifier les versions disponibles

:$ apt-cache policy loolwsd code-brand
loolwsd:
  Installé : (aucun)
  Candidat : 4.0.5-2
 Table de version :
     4.0.5-2 500
        500 https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian9 ./ Packages
code-brand:
  Installé : (aucun)
  Candidat : 4.0-2
 Table de version :
     4.0-2 500
        500 https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-debian9 ./ Packages

Installer Collabora Online. Les modules, collaboraoffice.-en, collaboraoffice.-gb et collaboraoffice.-fr, installeront le support de la langue anglaise et française (d’autres langues sont disponibles).

:$ apt install loolwsd code-brand collaboraoffice*.*-fr collaboraoffice*.*-en collaboraoffice*.*-gb
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
...
0 mis à jour, 24 nouvellement installés, 0 à enlever et 1 non mis à jour.
Il est nécessaire de prendre 286 Mo dans les archives.
Après cette opération, 794 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O

Par défaut, Collabora Office active SSL et ne trouve pas les certificats ce qui empèche le service de démarrer : Failed to start LibreOffice Online WebSocket Daemon.

:$ systemctl status loolwsd
● loolwsd.service - LibreOffice Online WebSocket Daemon
   Loaded: loaded (/lib/systemd/system/loolwsd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2019-08-15 16:12:38 CEST; 18min ago
  Process: 13504 ExecStart=/usr/bin/loolwsd --version --o:sys_template_path=/opt/lool/systemplate --o:lo_template_path=/opt/collaboraoffice6.0 --o:child_root_path=/opt/lool/child-roots --o
 Main PID: 13504 (code=exited, status=70)
      CPU: 311ms

août 15 16:12:38 monnas systemd[1]: loolwsd.service: Main process exited, code=exited, status=70/n/a
août 15 16:12:38 monnas systemd[1]: loolwsd.service: Unit entered failed state.
août 15 16:12:38 monnas systemd[1]: loolwsd.service: Failed with result 'exit-code'.
août 15 16:12:38 monnas systemd[1]: loolwsd.service: Service hold-off time over, scheduling restart.
août 15 16:12:38 monnas systemd[1]: Stopped LibreOffice Online WebSocket Daemon.
août 15 16:12:38 monnas systemd[1]: loolwsd.service: Start request repeated too quickly.
août 15 16:12:38 monnas systemd[1]: Failed to start LibreOffice Online WebSocket Daemon.
août 15 16:12:38 monnas systemd[1]: loolwsd.service: Unit entered failed state.
août 15 16:12:38 monnas systemd[1]: loolwsd.service: Failed with result 'exit-code'.

Il est possible de vérifier ce point en désactivant SSL dans la configuration de Collabora Office et en redémarrant le service.

Modifier la configuration de Collabora Online pour configurer les certificats. Attention: les fichier certificats doivent être accessible par l’utilisateur lool

:$ cp /etc/loolwsd/loolwsd.xml /etc/loolwsd/loolwsd.xml.bak
:$ nano /etc/loolwsd/loolwsd.xml 
    <ssl desc="SSL settings">
        <enable type="bool" desc="Controls whether SSL encryption is enable (do not disable for production deployment). If default is false, must first be compiled with SSL support to enable." default="true">true</enable>
        <termination desc="Connection via proxy where loolwsd acts as working via https, but actually uses http." type="bool" default="true">true</termination>
<!--
        <cert_file_path desc="Path to the cert file" relative="false">/etc/loolwsd/cert.pem</cert_file_path>
        <key_file_path desc="Path to the key file" relative="false">/etc/loolwsd/key.pem</key_file_path>
        <ca_file_path desc="Path to the ca file" relative="false">/etc/loolwsd/ca-chain.cert.pem</ca_file_path>
-->
        <cert_file_path desc="Path to the cert file" relative="false">/etc/letsencrypt/live/mon.domaine.fr/fullchain.pem</cert_file_path>
        <key_file_path desc="Path to the key file" relative="false">/etc/letsencrypt/live/mon.domaine.fr/privkey.pem</key_file_path>
        <ca_file_path desc="Path to the ca file" relative="false">/etc/letsencrypt/live/mon.domaine.fr/fullchain.pem</ca_file_path>
        <cipher_list desc="List of OpenSSL ciphers to accept" default="ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"></cipher_list>
        <hpkp desc="Enable HTTP Public key pinning" enable="false" report_only="false">
            <max_age desc="HPKP's max-age directive - time in seconds browser should remember the pins" enable="true">1000</max_age>
            <report_uri desc="HPKP's report-uri directive - pin validation failure are reported at this URL" enable="false"></report_uri>
            <pins desc="Base64 encoded SPKI fingerprints of keys to be pinned">
            <pin></pin>
            </pins>
        </hpkp>
    </ssl>

Le script suivant peut être utilisé pour tester les droits d’un utilisateur sur un fichier

:$ cat ./check-permissions.sh 
#!/bin/bash
file=$1
namei -m $file
# Handle non-absolute paths
if ! [[ "$file" == /* ]] ; then
    path=.
fi
dirname "$file" | tr '/' $'n' | while read part ; do
    path="$path/$part"
    # Check for execute permissions
    if ! [[ -x "$path" ]] ; then
        echo "'$path' is blocking access."
    fi
done
if ! [[ -r "$file" ]] ; then
    echo "'$file' is not readable."
fi

La commande suivante permet de vérifier les droits de l’utilisateur lool sur les fichiers certificats générés par letsencrypt

:$ sudo -u lool ./check-permissions.sh /etc/letsencrypt/live/mon.domaine.fr/fullchain.pem
f: /etc/letsencrypt/live/mon.domaine.fr/fullchain.pem
 drwxr-xr-x /
 drwxr-xr-x etc
 drwxr-xr-x letsencrypt
 drwx--x--x live
 drwxr-xr-x mon.domaine.fr
 lrwxrwxrwx fullchain.pem -> ../../archive/mon.domaine.fr/fullchain13.pem
   drwx--x--x ..
   drwxr-xr-x ..
   drwx------ archive
              mon.domaine.fr — fichier ou répertoire inexistant
'/etc/letsencrypt/live/mon.domaine.fr/fullchain.pem' is not readable.

Pour donner les droits à l’utilisateur lool de parcourir les répertoires live et archive

J’ai ajouté l’utilisateur lool au group root

:$ chmod +x systemctl /etc/letsencrypt/live
:$ chmod +x systemctl /etc/letsencrypt/archive

Si Nginx et Collabora Office tourne sur le même serveur, une autre solution est de désactiver SSL pour Collabora Office et d’utiliser SSL coté Nginx. Solution "SSL terminates at the proxy" dans Collabora Office : Setting up Nginx reverse proxy (ssl.enable=false and ssl.termination=true)

Redémarrer Collabora Office pour prendre en compte les changement de configuration.

:$ systemctl restart loolwsd

Vérfier que le service a bien démarré et qu’il n’y a pas d’erreur.

:$ systemctl status loolwsd
● loolwsd.service - LibreOffice Online WebSocket Daemon
   Loaded: loaded (/lib/systemd/system/loolwsd.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-08-15 16:56:31 CEST; 4s ago
 Main PID: 14254 (loolwsd)
    Tasks: 10 (limit: 4915)
   Memory: 100.4M
      CPU: 744ms
   CGroup: /system.slice/loolwsd.service
           ├─14254 /usr/bin/loolwsd --version --o:sys_template_path=/opt/lool/systemplate --o:lo_template_path=/opt/collaboraoffice6.0 --o:child_root_path=/opt/lool/child-roots --o:file_se
           ├─14257 /usr/bin/loolforkit --losubpath=lo --systemplate=/opt/lool/systemplate --lotemplate=/opt/collaboraoffice6.0 --childroot=/opt/lool/child-roots/ --clientport=9980 --master
           └─14260 /usr/bin/loolforkit --losubpath=lo --systemplate=/opt/lool/systemplate --lotemplate=/opt/collaboraoffice6.0 --childroot=/opt/lool/child-roots/ --clientport=9980 --master

août 15 16:56:32 monnas loolwsd[14254]: Preloading thesauri:
août 15 16:56:32 monnas loolwsd[14254]: Preload icons
août 15 16:56:32 monnas loolwsd[14254]: Preload languages
août 15 16:56:32 monnas loolwsd[14254]: Preload fonts
août 15 16:56:32 monnas loolwsd[14254]: frk-14257-14257 2019-08-15 14:56:32.496567 [ forkit ] TRC  Finished lok_preinit(/opt/collaboraoffice6.0/program", "file:///user") in 316 ms.| kit/Ki
août 15 16:56:32 monnas loolwsd[14254]: frk-14257-14257 2019-08-15 14:56:32.496613 [ forkit ] ERR  Error: forkit has more than a single thread after pre-init| kit/ForKit.cpp:544
août 15 16:56:32 monnas loolwsd[14254]: frk-14257-14257 2019-08-15 14:56:32.496620 [ forkit ] INF  Preinit stage OK.| kit/ForKit.cpp:546
août 15 16:56:32 monnas loolwsd[14254]: frk-14257-14257 2019-08-15 14:56:32.496639 [ forkit ] DBG  Forking a loolkit process with jailId: vi7YqJ2EjjGZnWRP.| kit/ForKit.cpp:253
août 15 16:56:32 monnas loolwsd[14254]: frk-14257-14257 2019-08-15 14:56:32.498438 [ forkit ] INF  Forked kit [14260].| kit/ForKit.cpp:294
août 15 16:56:32 monnas loolwsd[14254]: frk-14257-14257 2019-08-15 14:56:32.498484 [ forkit ] INF  Forkit initialization complete: setting log-level to [warning] as configured.| kit/ForKit
lines 1-22/22 (END)

Modifier les langues par défaut de Collabora Office

:$ nano /etc/loolwsd/loolwsd.xml 
    <allowed_languages desc="List of supported languages of Writing Aids (spell checker, grammar checker, thesaurus, hyphenation) on this instance. Allowing too many has negative effect on startup performance." default="fr_FR en_GB en_US">fr_FR en_GB en_US</allowed_languages>

redémarrer le service pour prendre en compte le changement de configuration.

:$ systemctl restart loolwsd

Configurer Collabora Office pour fonctioner avec Nextcloud

18/08/2019: il y a un bug dans l’application Collabora de Nextcloud qui ne permet pas de préconfigurer les langues lors de la création d’un nouveau document : Document language in new documents does not respect language settings #496

Configurer WebDav dans Collabora Office. Attention à bien préfixer les ‘.’ par des  » dans le nom de domaine.

:$ nano /etc/loolwsd/loolwsd.xml 
    <storage desc="Backend storage">
        <filesystem allow="false" />
        <wopi desc="Allow/deny wopi storage. Mutually exclusive with webdav." allow="true">
            <host desc="Regex pattern of hostname to allow or deny." allow="true">localhost</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">mon.domaine.fr</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">10.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">172.1[6789].[0-9]{1,3}.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">172.2[0-9].[0-9]{1,3}.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">172.3[01].[0-9]{1,3}.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="true">192.168.[0-9]{1,3}.[0-9]{1,3}</host>
            <host desc="Regex pattern of hostname to allow or deny." allow="false">192.168.1.1</host>
            <max_file_size desc="Maximum document size in bytes to load. 0 for unlimited." type="uint">0</max_file_size>
        </wopi>
        <webdav desc="Allow/deny webdav storage. Mutually exclusive with wopi." allow="false">
            <host desc="Hostname to allow" allow="false">mon.domaine.fr</host>
        </webdav>
    </storage>

redémarrer le service pour prendre en compte le changement de configuration.

:$ systemctl restart loolwsd

Activer les log dans un fichier

Modifier la configuration pour activer les log dans un fichier <file enable="true"> et configrer le chemming vers le fichier de log /var/log/loolwsd/loolwsd.log

:$ nano /etc/loolwsd/loolwsd.xml 
    <logging>
        <color type="bool">true</color>
        <level type="string" desc="Can be 0-8, or none (turns off logging), fatal, critical, error, warning, notice, information, debug, trace" default="warning">warning</level>
        <file enable="true">
            <property name="path" desc="Log file path.">/var/log/loolwsd/loolwsd.log</property>
            <property name="rotation" desc="Log file rotation strategy. See Poco FileChannel.">never</property>
            <property name="archive" desc="Append either timestamp or number to the archived log filename.">timestamp</property>
            <property name="compress" desc="Enable/disable log file compression.">true</property>
            <property name="purgeAge" desc="The maximum age of log files to preserve. See Poco FileChannel.">10 days</property>
            <property name="purgeCount" desc="The maximum number of log archives to preserve. Use 'none' to disable purging. See Poco FileChannel.">10</property>
            <property name="rotateOnOpen" desc="Enable/disable log file rotation on opening.">true</property>
            <property name="flush" desc="Enable/disable flushing after logging each line. May harm performance. Note that without flushing after each line, the log lines from the different processes will not appear in chronological order.">false</property>
        </file>
        <anonymize>
            <filenames type="bool" desc="Enable to anonymize/obfuscate filenames in logs. If default is true, it was forced at compile-time and cannot be disabled." default="false">false</filenames>
            <usernames type="bool" desc="Enable to anonymize/obfuscate usernames in logs. If default is true, it was forced at compile-time and cannot be disabled." default="false">false</usernames>
        </anonymize>
    </logging>

Donner les droits à l’utilisateur Collabora Office sur le répertoire et redémarrer le service pour prendre en compte le changement de configuration.

:$ chown lool:lool /var/log/loolwsd/
:$ systemctl restart loolwsd

Consol d’administration

URL: http://192.168.XXX.XXX:9980/loleaflet/dist/admin/admin.html
Saisire le nom et le mot de passe de l’administrateur (par défaut admin / admin)

Le nom et le mot de passe peuvent être changés dans la configuration

:$ nano /etc/loolwsd/loolwsd.xml 
    <admin_console desc="Web admin console settings.">
        <enable desc="Enable the admin console functionality" type="bool" default="true">true</enable>
        <enable_pam desc="Enable admin user authentication with PAM" type="bool" default="false">false</enable_pam>
        <username desc="The username of the admin console. Ignored if PAM is enabled.">admin</username>
        <password desc="The password of the admin console. Deprecated on most platforms. Instead, use PAM or loolconfig to set up a secure password.">admin</password>
    </admin_console>

Configurer Nginx pour Collabora Online

Comme Collabora Online tourne sur le même serveur que Nextcloud, il suffit de créer un snippet à inclure dans la configuration du serveur.

Créer le snippet contenant la configuration de Collabora Online pour Nginx. Le contenu du snippet provient de Collabora Office : Setting up Nginx reverse proxy. Il est mis à jour avec les mise à jour de Collabora mais contient des erreurs pour la règle lool (trop restrictive) qui empêchent d’ouvrir les fichieers sous Nextcloud (une erreur 404 s’affiche dans les log d’access de Nginx).

Pour la version avec Docker (SSL est activé par défaut) et Collabora configurée avec SSL :

:$ cat > /etc/nginx/snippets/collaboraonline.conf <<'EOF'
# static files
location ^~ /loleaflet {
    proxy_pass https://localhost:9980;
    proxy_set_header Host $http_host;
}

# WOPI discovery URL
location ^~ /hosting/discovery {
    proxy_pass https://localhost:9980;
    proxy_set_header Host $http_host;
}

# main websocket
#location ~ ^/lool/(.*)/ws$ {
#    proxy_pass https://localhost:9980;
#    proxy_set_header Upgrade $http_upgrade;
#    proxy_set_header Connection "Upgrade";
#    proxy_set_header Host $http_host;
#    proxy_read_timeout 36000s;
#}

# download, presentation and image upload
#location ~ ^/lool {
#    proxy_pass https://localhost:9980;
#    proxy_set_header Host $http_host;
#}

# Admin Console websocket
#location ^~ /lool/adminws {
#    proxy_pass https://localhost:9980;
#    proxy_set_header Upgrade $http_upgrade;
#    proxy_set_header Connection "Upgrade";
#    proxy_set_header Host $http_host;
#    proxy_read_timeout 36000s;
#}

# main websocket
location ^~ /lool {
    proxy_pass https://localhost:9980;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $http_host;
    proxy_read_timeout 36000s;
    proxy_buffering off;
}   
EOF

Pour la version sans SSL, il faut remplacer toutes les occurences de proxy_pass https://localhost:9980 par proxy_pass http://localhost:9980 (plus de ‘s’ dans ‘https’)

Inclure le snippet de Collabora Online à la configuration du serveur Nginx

:$ nano /etc/nginx/site-available/https_mon.domaine.fr
#[...]
#
# Nextcloud
#
include snippets/nextcloud.conf;

#
# Collabora Online
#
include snippets/collaboraonline.conf;
#[...]

Vérifier la confiugraion avant de redémarrer le serveur Nginx

:$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Recharger la configuration de Nginx

:$ nginx -s reload

Activer l’application Collabora dans Nextcloud

Se connecter avec l’utilisateur admin de Nextcloud et activer l’application Collabora Online dans ‘Apps’ -> ‘Office & Text’.


Installer Application Nextcloud pour Collabora Online


Dans le menu ‘Admin’, configurer le domaine de Collabora Online : https://mon.domaine.fr et cliquer sur bouton ‘Apply’


Configurer Collabora Online dans Nextcloud


Créer et Editer des fichiers Libre Office depuis Nextcloud

Sélectionner l’application Fichiers en cliquant sur l’icone "répertoire" de la barre d’application de Nextcloud en haut à gauche (1).

Cliquer sur le bouton ‘+’ et créer un nouveau fichier (un tableau Libre Office – 2) en le nomant "Mon Tableau.ods". Nextcloud créera un fichier Libre Office et l’ajoutera dans le répertoire courant (3).


Créer Un Tableau Libre Office


Pour ouvrir un fichier Libre Office et l’éditer, il suffit de cliquer dessus dans l’explorateur de fichier de Nextcloud. Automatiquement, Collabora Online ouvrira le fichier (ici un tableau) pour pouvoir en changer le contenu directement depuis l’interface web de Nextcloud.


Editer Un Tableau Libre Office


Maintenance de Collabora Online

Lister les images Docker

:$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
4c49cdd8e699        collabora/code      "/bin/sh -c 'bash ..."   6 seconds ago       Up 5 seconds        127.0.0.1:9980->9980/tcp   condescending_rosalind

Arrêter le container de Collabora Online

:$ docker stop CONTAINER_ID

Supprimer l’image de Collabora Online

:$ docker rm CONTAINER_ID    

CONTAINER_ID doit être remplacé par l’ID du container retourné par la commande docker ps. Ici ‘4c49cdd8e699’.

Mettre à jour Collabora Online

Récupérer la nouvelle version de l’image de Collabora Online depuis Internet

:$ docker pull collabora/code
[...]
Digest: sha256:2de540bade5595d394b7729bf711ca84e3c8b99581c41319a51a0f3df2324d5d
Status: Downloaded newer image for collabora/code:latest

Lister les images docker sur le système pour connaitre l’identifiant du container de Collabora Online.

:$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
4c49cdd8e699        8bc1d306ff41        "/bin/sh -c 'bash st…"   7 months ago        Up 23 seconds       127.0.0.1:9980->9980/tcp   condescending_rosalind

Arrêter et supprimer l’image docker de Collabora Online

CONTAINER_ID doit être remplacé par l’ID du container retourné par la commande docker ps. Ici ‘4c49cdd8e699’.

:$ docker stop CONTAINER_ID
:$ docker rm CONTAINER_ID    

Démarrer la nouvelle version de l’image docker de Collabora Online en remplaçant mon\.domaine\.fr par votre nom de domaine (garder les deux barres obliques inverses \ devant chaque point .).

:$ docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=mon\.domaine\.fr' -e 'dictionaries=fr_FR en_GB en_US' --restart always --cap-add MKNOD collabora/code
e70dca86bf5e8ad556d4c797f5d038ed6081b599c8d1a6118007b3d188703adb

Résoudre des problèmes

Échec du chargement du document.

Le message suivant s’affiche dans une popup à l’ouverture d’un document de Collabora Online dans Nextcloud

Échec du chargement du document. Veuillez vous assurer que le type de fichier est pris en charge, qu’il n’est pas corrompu et essayez de nouveau.

Redémarrer le service docker Failure: “Please ensure the file type is supported and not corrupted”

:$ systemctl restart docker
:$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since mer. 2018-03-07 21:28:49 CET; 2s ago
     Docs: https://docs.docker.com
 Main PID: 12433 (dockerd)
    Tasks: 31
   Memory: 24.3M
      CPU: 402ms
   CGroup: /system.slice/docker.service
           ├─12433 /usr/bin/dockerd -H fd://
           ├─12438 docker-containerd --config /var/run/docker/containerd/containerd.toml
           ├─12557 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 9980 -container-ip 172.17.0.2 -container-port 9980
           └─12563 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/e70dca86bf5e8ad556d4c797f5d038ed6081b599c8d1a6118007b3d188703adb -add

mars 07 21:28:49 monnas dockerd[12433]: time="2018-03-07T21:28:49.005363370+01:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to s
mars 07 21:28:49 monnas dockerd[12433]: time="2018-03-07T21:28:49.402006226+01:00" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/containers/create type="*events.ContainerCreate"
mars 07 21:28:49 monnas dockerd[12433]: time="2018-03-07T21:28:49+01:00" level=info msg="shim docker-containerd-shim started" address="/containerd-shim/moby/e70dca86bf5e8ad556d4c797f5d038ed6081b599c8d1a6118
mars 07 21:28:49 monnas dockerd[12433]: time="2018-03-07T21:28:49.537366237+01:00" level=warning msg="unknown container" container=e70dca86bf5e8ad556d4c797f5d038ed6081b599c8d1a6118007b3d188703adb module=lib
mars 07 21:28:49 monnas dockerd[12433]: time="2018-03-07T21:28:49.555451893+01:00" level=warning msg="unknown container" container=e70dca86bf5e8ad556d4c797f5d038ed6081b599c8d1a6118007b3d188703adb module=lib

Erreur de connexion avec Collabora Online à l’ouverture ou à la création d’un fichier dans Nextcloud

Vérifier qu’il est possible de redémarrer l’image docker de Collabora Online. Si la commande retourne une erreure iptables c’est que les règles de docker ne sont pas configurées dans iptables. Au démmarage, docker ajoute les règles dans l’iptables. Il faut démarrer docker après le chargement des règles iptables pour qu’il ajoute les règles nécessaire à son bon fonctionnement ou ajouter les règles de docker dans son fichier de configuration.

:$ docker restart e70dca86bf5e
Error response from daemon: Cannot restart container e70dca86bf5e: driver failed programming external connectivity on endpoint peaceful_noether (3c12509d5198a86b1cfff76439f07e64f77604f9193a0c1ff41c9544c4c4ab32):  (iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 --dport 9980 -j ACCEPT: iptables: No chain/target/match by that name.
 (exit status 1))

Ou docker n’arrive pas à lister les images

:$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES

Redémarrer docker

:$ systemctl restart docker

Une fois redémarrer docker à ajouté les règles dans iptables. Il est possible de lister les images et de redémarrer collabora online.

:$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
e70dca86bf5e        collabora/code      "/bin/sh -c 'bash st…"   10 days ago         Up 9 minutes        127.0.0.1:9980->9980/tcp   peaceful_noether
:$ docker restart e70dca86bf5e
e70dca86bf5e

Si le problème persiste, vérifier dans le fichier de log de votre serveur web.

:$ tail -f /var/log/nginx/error.log

2018/03/17 21:29:23 [error] 2872#2872: *780 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.0.254, server: www.mondomain.fr, request: "GET /hosting/discovery HTTP/1.1", upstream: "https://[::1]:9980/hosting/discovery", host: "www.mondomain.fr"

Redémarrer le serveur et php

:$ systemctl restart nginx
:$ systemctl restart php7.1-fpm.service

Page vide et erreur 404 dans les logs de Nginx

Problème non corrigé. Ressemble à celui-ci: https://help.nextcloud.com/t/collabora-404-on-lool-ws-empty-page/13363/4

82.232.100.146 - - [15/Aug/2019:14:24:50 +0200] "GET /lool/https%3A%2F%2Fbinaryworld.fr.eu.org%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F829664_ocqezo3zz4e0%3Faccess_token%3DffHFLSL2NV7WpOqvvjbjSUXTUBaG9L3f%26access_token_ttl%3D0%26permission%3Dedit/ws?WOPISrc=https%3A%2F%2Fbinaryworld.fr.eu.org%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F829664_ocqezo3zz4e0&compat=/ws HTTP/1.1" 404 143 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
82.232.100.146 - - [15/Aug/2019:14:24:51 +0200] "GET /lool/https%3A%2F%2Fbinaryworld.fr.eu.org%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F829664_ocqezo3zz4e0%3Faccess_token%3DffHFLSL2NV7WpOqvvjbjSUXTUBaG9L3f%26access_token_ttl%3D0%26permission%3Dedit/ws?WOPISrc=https%3A%2F%2Fbinaryworld.fr.eu.org%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F829664_ocqezo3zz4e0&compat=/ws HTTP/1.1" 404 143 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"

Modifier le fichier de configuration de Collabora

Récupérer le nom du container de Collabora

#> docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                      NAMES
7671b05f7d6e        collabora/code               "/bin/sh -c 'bash st…"   11 minutes ago      Up 11 minutes       127.0.0.1:9980->9980/tcp   pedantic_stallman

Il est possible d’utiliser la commande docker cp pour copier le fichier en local depuis le container et le modifier. Toutefois, lors de sa recopie dans le container, les permissions du fichier seront modifiées ce qui empèchera Collabora de démarrer.

#> docker cp pedantic_stallman:/etc/loolwsd/loolwsd.xml loolwsd.xml
#> nano loolwsd.xml
#> docker cp loolwsd.xml pedantic_stallman:/etc/loolwsd/loolwsd.xml 

Il est préférable de modifier le fichier directement dans le container

#> docker exec -it pedantic_stallman bash
:$ ls -l /etc/loolwsd/loolwsd.xml
-rw-r----- 1 lool lool 12679 May 19 18:53 /etc/loolwsd/loolwsd.xml
:$ cat /etc/loolwsd/loolwsd.xml loolwsd.xml
<config>

    <!-- Note: 'default' attributes are used to document a setting's default value as well as to use as fallback. -->
    <!-- Note: When adding a new entry, a default must be set in WSD in case the entry is missing upon deployment. -->

    <allowed_languages desc="List of supported languages of Writing Aids (spell checker, grammar checker, thesaurus, hyphenation) on this instance. Allowing too many has negative effect on startup performance." default="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru">fr_FR en_GB en_US</allowed_languages>
    ...

Il n’y a pas d’editeur (ex: vim ou nano) dans le container de collabora. Plusieurs solutions existes. La plus simple est d’utiliser sed pour remplacer le text dans le fichier

#> sed -i 's/de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru/fr_FR en_GB en_US/g' /etc/loolwsd/loolwsd.xml loolwsd.xml

la commande sed remplace les langues par defaut dans le fichier de comfiguration.

Sortir du shell du container et vérifier que Collabora est joignable. Si nécessaire redémarrer le container avec la commande docker restart <CONTAINER ID>

#> exit
#> curl -k https://localhost:9980
OK

Références

Nextcloud : Collabora Online

Collabora Office : Code

Blog de dada : Installer Collabora Online avec Nextcloud

icewind.nl : Running Online Office with Nextcloud and nginx

Setting up and configuring collabora/code Docker image

Collabora Office : Setting up Nginx reverse proxy

Laisser un commentaire