Nextcloud : activer et configurer le cache Redis
Sommaire
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 apache redis
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é ?
Salut Florian,
C’est juste pour te dire qu’il y a une petite coquille dans ce tuto, la commande pour ajouter ajouter l’utilisateur Redis au groupe « apache » est :
usermod -a -G apache redis
et non :
usermod -a -G redis apache
Cordialement
Salut,
Bien vu, merci j’ai corrigé ! 🙂
Florian
Super tuto, enfin le cache est vu de mon nextcloud!
A noter que sur AlmaLinux8 avec les php 8 de Rémi, les services se redémarrent avec:
systemctl restart httpd php80-php-fpm