Cet article dĂ©crit la mise en place du DocumentServer d’OnlyOffice et son intĂ©gration dans NextCloud afin de pouvoir visionner et Ă©diter des documents bureautiques directement dans NextCloud (comme un o365 ou GDocs).

Installation des dépendances

  1. Base de données

    $ sudo apt install postgresql
    $
    $ sudo -i -u postgres psql -c "CREATE DATABASE onlyoffice;"
    $ sudo -i -u postgres psql -c "CREATE USER onlyoffice WITH password '<mot de passe>';"
    $ sudo -i -u postgres psql -c "GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;"
    
  2. Message queuing

    $ sudo apt install rabbitmq-server
    
  3. Nginx avec des fonctionnalitĂ©s supplĂ©mentaires, nĂ©cessaires Ă  OnlyOffice (attention si vous disposez dĂ©jĂ  d’une installation de Nginx sur votre serveur)

    $ sudo apt install nginx-extras
    

Installation d’OnlyOffice

Ajout du dépôt :

$ mkdir -p -m 700 ~/.gnupg
$ curl -fsSL https://download.onlyoffice.com/GPG-KEY-ONLYOFFICE | gpg --no-default-keyring --keyring gnupg-ring:/tmp/onlyoffice.gpg --import
$ chmod 644 /tmp/onlyoffice.gpg
$ sudo chown root:root /tmp/onlyoffice.gpg
$ sudo mv /tmp/onlyoffice.gpg /usr/share/keyrings/onlyoffice.gpg
$ 
$ echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] https://download.onlyoffice.com/repo/debian squeeze main" | sudo tee /etc/apt/sources.list.d/onlyoffice.list
$ sudo apt update
$ sudo apt install ttf-mscorefonts-installer
$ sudo apt install onlyoffice-documentserver

(le dépôt indique Squeeze mais est compatible avec les versions récentes de Debian)

Sécurisation

HTTPS

Nous allons configurer TLS manuellement, car le script fourni par OnlyOffice ne semble pas toujours fonctionner.

  1. Générer le certificat avec Certbot :

    $ sudo certbot certonly --expand --webroot -w /var/www/onlyoffice/documentserver/letsencrypt --email <compte Let's Encrypt> -d <nom d'hĂ´te>
    
  2. Copie du fichier de conf nginx

    $ sudo cp -f /etc/onlyoffice/documentserver/nginx/ds-ssl.conf.tmpl /etc/onlyoffice/documentserver/nginx/ds.conf
    
  3. Ajuster la configuration TLS dans ds.conf

    36,37c38,39
    <   ssl_certificate {{SSL_CERTIFICATE_PATH}};
    <   ssl_certificate_key {{SSL_KEY_PATH}};
    ---
    >   ssl_certificate /etc/letsencrypt/live/<nom d'hĂ´te>/fullchain.pem;
    >   ssl_certificate_key /etc/letsencrypt/live/<nom d'hĂ´te>/privkey.pem;
    58,60c60,62
    <   # ssl_stapling on;
    <   # ssl_stapling_verify on;
    <   # ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt;
    ---
    >   ssl_stapling on;
    >   ssl_stapling_verify on;
    >   ssl_trusted_certificate /etc/letsencrypt/live/<nom d'hĂ´te>/chain.pem;
    68c70
    <   # ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ---
    >   ssl_dhparam /etc/ssl/private/dh2048.pem;
    
  4. Modifier la configuration nginx pour ne pas impacter les autres services

    5,7c5,7
    <   listen 0.0.0.0:80;
    <   listen [::]:80 default_server;
    <   server_name _;
    ---
    >   listen 80;
    >   listen [::]:80;
    >   server_name <nom d'hĂ´te>;
    12a13
    > 
    15c16
    < #HTTP host for internal services
    ---
    > # HTTP host for internal services
    29c30,31
    <   listen [::]:443 ssl default_server;
    ---
    >   listen [::]:443 ssl;
    >   server_name <nom d'hĂ´te>;
    

Restriction Ă  Nextcloud

Dans le fichier local.json

  1. Activer le token JWT :

    "token": {
            "enable": {
              "request": {
                "inbox": true,
                "outbox": true
              },
              "browser": true
    
  2. Ajouter le token (à générer soit même) :

    "secret": {
        "inbox": {
          "string": "<token>"
        },
        "outbox": {
          "string": "<token>"
        },
        "session": {
          "string": "<token>"
        }
    

Dans le fichier default.json, configurer l’ipfilter :

"ipfilter": {
        "rules": [{"address": "<adresse IP du serveur", "allowed": true},
                {"address": "*", "allowed": false}],
        "useforrequest": true,
        "errorcode": 403
},

Redémarrer le DocumentServer pour prendre en compte les changements :

$ sudo systemctl restart ds-converter.service
$ sudo systemctl restart ds-metrics.service
$ sudo systemctl restart ds-docservice.service

Configuration dans NextCloud

Installer le connecteur OnlyOffice dans NextCloud.

Aller dans les paramètres et configurer l’intĂ©gration en renseignant :

NC_OO

Il est possible de tester la connexion avec la commande suivante :

$ sudo -u www-data php /var/www/services/cloud/occ onlyoffice:documentserver --check

Ou tout simplement en essayant d’ouvrir un document Office dans NextCloud.

Bonus

Problème sur l’hĂ´te virtuel par dĂ©faut

Parfois, la mise Ă  jour ou le redĂ©marrage d’OnlyOffice peut faire disparaĂ®tre le fichier /etc/nginx/sites-enabled/default liĂ© Ă  la configuration de l’hĂ´te virtuel par dĂ©faut.

Il faut donc manuellement recréer le lien :

$ sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

DĂ©sactiver l’intĂ©gration d’example

$ sudo systemctl stop ds-example
$ sudo systemctl disable ds-example

C’est tout ! Il n’est pas configurĂ© pour dĂ©marrer automatiquement pas dĂ©faut.

Mise Ă  jour de PostgreSQL

Voir ici : Using pg upgrade on Ubuntu/Debian

Sources