Nextcloud : synchronisation de fichiers plus performante avec notify_push / HPB

Nextcloud c'est bien. Mais concernant les fichiers, c'est resté, malgré des améliorations, assez mou à répercuter les changements sur un dossier de fichers synchronisés.

Ce tuto montre la mise en œuvre (relativement simple) de notify-push sur un serveur nextcloud, qui rend les détections de changements instantannées et réduit la charge serveur.

NB : Ce tuto n'est intéressant que pour un serveur avec des utilisateur·ices faisant usage de Nextcloud Desktop.

Un peu de contexte…

J'avais entendu parler il y a un an d'un protocole Nextcloud sync v2 annoncé comme révolutionnaire et promis avec la version 23 de Nextcloud. J'avais hâte !

Niveau marketing le terme « sync v2 » a semble-t-il été délaissé. Mais cette « révolution » est arrivée il y a un an sous un autre nom : HPB / High-Performance back-end / notify-push (oui oui, on s'y perd dans les termes). Hélas, elle est optionelle et désactivée par défaut !

Heureusement ce composant facultatif, nommé notify_push est simple à installer.

Comment ça marche ?

L'idée générale est d'installer un programme serveur complémentaire, dédié à la synchronisation de fichiers. Il établira des connexions permanentes (websocket) avec les clients de synchronisation (interface web ou Nextcloud desktop). Il faudra ensuite utilise un client suffisament récent pour en profiter.

Installation côté serveur

Pour ma part, j'utilise le serveur Nextcloud en version 22 ; ça n'est pas la dernière, c'est en revanche la dernière packagée pour YunoHost à cette date. La procédure devrait néanmoins être la même sur une installation n'utilisant pas YunoHost.

Via l'interface web Nextcloud…

Sur l'interface web d'administration du serveur NextCloud, chercher l'application nommée Client Push et l'installer.

… Puis via la ligne de commande du serveur (en SSH)

Lancer la commande occ notify_push:setup (pour être plus précis, pour ma part, la commande complète sur mon installation yunohost est  :

su -s /bin/bash nextcloud
cd /var/www/nextcloud
php7.3 ./occ notify_push:setup

Puis se laisser guider par l'assistant. En gros les étapes ont été pour moi (dans un second terminal SSH afin de garder l'assistant ouvert) :

  1. Copier coller le contenu proposé dans un fichier /etc/systemd/system/notify_push.service ;
  2. activer ce service sudo systemctl enable notify_push
  3. insérer la configuration nginx (pour ma part ça a consisté en créer un nouveau fichier /etc/nginx/conf.d/nuage.example.net.d/00-nextcloud-notify-push.conf avec le contenu proposé par l'assistant ;
  4. relancer nginx sudo systemctl reload nginx

Et c'est tout :-).

Vérifier

On peut vérifier que c'est bien actif, tout simplement dans le navigateur1:

  1. Activer les Outils de développement web (touche F12 sous Chrome ou Firefox) ;
  2. dans le panneau qui s'ouvre, choisir l'onglet Réseau ;
  3. dans le menu en-dessous, sélectionnez uniquement WS) « WS » est sélectionné, toutes les autres options : « Tout », « HTML », « CSS »…  sont non sélectionnées ;
  4. rafraîchir la page (par ex avec F5) ;
  5. si tout va bien vous devriez voir une ligne avec 101 dans la colone « État »
    • glop : code 101
    • pas glop : code 502

Si pas glop, vérifier les étape d'avant, et/ou tenter sans l'assistant. Sinon, il est possible d'obtenir de l'aide sur le forum nextcloud (anglophone).

Sinon, bravo 🥳.

Utiliser (avec un client)

Aucune configuration du client n'est nécessaire, il faut juste s'assurer d'utiliser une version de Nextcloud Desktop supérieure à la version 3.2.

Pour ma part, j'ai du passer à la version .AppImage de Nextcloud Desktop proposée depuis le site officiel, et désinstaller celle de ma distribution (Debian), trop ancienne (3.1). Ça fonctionne très bien ♥

Ouverture : interrogation

L'interface web utilise bien un websocket pour être notifié les changements, mais ne semble pas réagir en conséquence (ex : un fichier créé par quelqu'un d'autre n'apparaît pas en live). C'est surprenant 🤔. Une idée ?

ANNEXE : concernant l'installation avec YunoHost :

  • L'ajout décrit dans ce tuto ne devrait pas entrer en conflit avec les mises à jour de Nextcloud ; à condition de bien créer un fichier distinct pour le bout de configuration nginx notify_push, comme je le propose ;
  • le support de notify_push est envisagé par les mainteneurs de l'app nextcloud pour YunoHost, mais pour l'instant, non.

  1. Si tu aimes te compliquer la vie, un utilitaire de test dédié existe également.