Nextcloud : activer et configurer le cache Redis

I. Présentation

Après avoir vu comment installer Nextcloud sur CentOS, ainsi que l'intégration de Keeweb avec Nextcloud pour la gestion de vos mots de passe, je vous propose d'installer Redis sur votre serveur Nextcloud.

Pour ma part, j'utilise CentOS 8 et à l'heure où j'écris ces lignes c'est un peu spécifique car le paquet Redis pour PHP n'est pas encore disponible, il faudra le compiler.

Redis va jouer deux rôles auprès de Nextcloud :

  • Mise en cache des objets
  • Verrouillage de fichier transactionnel

D'une part, Redis va permettre d'optimiser les performances de Nextcloud grâce à la mise en cache. D'autre part, le verrouillage de fichier transactionnel, de l'anglais Transactional file locking offre une couche de sécurité supplémentaire.

En effet, cette fonctionnalité va verrouiller les fichiers lors des opérations de base afin de se protéger contre la corruption. Par exemple : lorsque vous agissez sur un fichier, vous ne pourrez pas renommer le dossier parent, grâce à Redis.

Attention, Redis ne permet pas de se protéger contre les éditions simultanées d'un même document, j'entends par là l'édition collaboration d'un document. Cela correspond à une autre fonctionnalité.

II. Installer Redis pour CentOS 8 et PHP

Commençons par installer les prérequis, à savoir Redis et l'extension Redis pour PHP. La partie serveur s'installe très facilement :

yum update
yum install redis

Maintenant, pour compiler l'extension redis pour PHP, il est nécessaire d'installer des paquets supplémentaires et de réaliser l'opération via le dépôt d'extensions PHP nommé "pecl". Sur CentOS 7, par exemple, il aurait suffit d'installer le paquet php-pecl-redis.

yum install -y php-pear gcc curl-devel php-devel zlib-devel pcre-devel make 
pecl install redis

Dans un premier temps, nous allons charger l'extension redis pour PHP. Créez le fichier suivant :

nano /etc/php.d/50-redis.ini

Ajoutez le contenu ci-dessous qui sert simplement à charger l'extension. Il est important que cette extension soit chargée après l'extension json (d'où le nom donné au fichier).

; enable redis extension
extension=redis

Redémarrez dès maintenant Apache et PHP-FPM :

systemctl restart httpd php-fpm

Si vous listez les modules PHP chargés actuellement, redis doit apparaître dans la liste :

php -m

Maintenant, nous allons ajouter l'utilisateur Redis au groupe "apache" pour éviter les problèmes de droits.

usermod -a -G redis apache

Enfin, nous allons activer le démarrage automatique de redis puis le redémarrer maintenant :

systemctl enable --now redis
systemctl restart redis

Pour information, les logs de redis sont stockés dans le fichier suivant :

/var/log/redis/redis.log

III. Configurer le pare-feu pour Redis

Le serveur Redis peut fonctionner de deux façons : soit accessible en TCP sur le port 6379 (par défaut), soit en mode socket. D'après ce que j'ai compris, si l'on veut utiliser Redis à la fois pour le cache et le verrouillage de fichier transactionnel, il faut l'utiliser en mode TCP.

Nous allons donc ouvrir le port 6379 sur notre machine CentOS grâce à ces deux commandes : la première pour créer la règle et la seconde pour recharger la configuration.

firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --reload

IV. Activer Redis dans Nextcloud

Passons maintenant à la phase d'activation de redis au niveau de Nextcloud. Pour réaliser cette action, il est nécessaire de modifier le fichier de configuration "config.php" qui se situe à l'emplacement suivant pour ma part : /var/www/nextcloud/html/config/config.php

A la suite des autres directives du fichier, ajoutez le bloc suivant juste avant le ");" de fin :

'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
'password' => '',
),

Ce qui donne :

Quelques explications :

  • La directive filelocking.enabled sert à activer le verrouillage de fichier transactionnel, et nous précisons ensuite que c'est Redis qui assure cette fonction au travers de la directive memcache.locking.
  • La directive memcache.local sert à préciser que Redis gère le cache
  • Le bloc de configuration "redis" avec les directives host, port, timeout et password sert à indiquer la configuration de notre redis. Pour passer en mode socket, il faudrait indiquer le chemin vers le socket à la place de localhost. Pour le moment, laissez la valeur mot de passe vide.

Enregistrez le fichier, redémarrez les services :

systemctl restart httpd php-fpm

Maintenant, tentez d'accéder à l'interface de Nextcloud : si vous n'obtenez pas d'erreur 500 (Internal Server Error) c'est que la configuration est bien prise en compte. Sinon, il faudrait vérifier votre fichier config.php et que l'extension PHP de redis est bien chargée.

V. Configurer un mot de passe pour Redis

Pour finir ce tutoriel, nous allons sécuriser un minimum redis en ajoutant un mot de passe. Pour cela, vous devez modifier le fichier de configuration :

nano /etc/redis.conf

Dans ce fichier, recherchez la directive requirepass qui est actuellement commentée. Pour la suite c'est tout simple, indiquiez requirepass suivi du mot de passe souhaité.

requirepass MonMotDePasseTresLongEtComplexe

Ensuite, sauvegardez le fichier et redémarrez le service redis :

systemctl restart redis

Il ne reste plus qu'à modifier à nouveau le fichier "config.php" de Nextcloud pour ajouter le mot de passe au sein de la directive password déclarée précédemment. Le tour est joué 😉

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian B.

Consultant chez Délibérata le jour, blogueur pour IT-Connect la nuit, je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 2336 posts and counting.See all posts by florian

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.