Installer Redis et activer le cache objet WordPress
Aujourd'hui, on va parler un peu de performance et de cache. Bon nombre d'entre vous ont, sans doute, déjà entendu parler de mise en cache de site web ?! Pour les autres, il s'agit d'une technique permettant d'améliorer les performances d'un site en accélérant le chargement de ses pages. JusteGeek.fr, par exemple, utilise cela pour que les pages vous soient servies le plus vite possible. Mais savez-vous qu'il existe un autre cache que celui des pages web : le cache d'objet. C'est ce dont nous allons parler aujourd'hui, en installant Redis et PHPRedis sur son serveur Web, puis en activant le cache objet WordPress.
Qu'est ce que Redis ?
Redis (pour Remote Dictionary Server) est une solution open-source de gestion de base de données clé-valeur en mémoire. Participant à la mouvance NoSQL, cette solution contribue à l'amélioration des performances via un stockage des données en RAM. Cela évite ainsi les requêtes SQL et les accès disques disques pour récupérer les données. Les temps d'accès sont alors réduits considérablement et tombent à quelques microsecondes. Dès lors, vous comprenez l'intérêt que peut avoir ce système.
Bon, installer un serveur Redis ne sera pas suffisant pour mettre en place un cache objet. Il faudra en effet que le serveur web soit capable de discuter avec le serveur Redis. Il faudra, par exemple, utiliser PHP pour parler avec ce serveur Redis, et donc un module PHP sera nécessaire : PHPRedis.
Contexte du tutoriel
Le tutoriel qui suit a été réalisé sous Debian 10 "Buster", avec le serveur web Apache 2 (v 2.4) et le moteur PHP 7.3-fpm. Si vous utilisez un système d'exploitation différent, un serveur web différent ou une solution alternative à PHP, il conviendra d'adapter ce tuto pour que cela fonctionne dans votre environnement. Mais sur le principe, cela sera relativement identique.
Allez, commençons tout de suite avec la première étape : l'installation d'un serveur Redis.
Installer un serveur Redis
La première étape consiste donc à installer un Redis sur son serveur. Nous allons donc installer ce composant sur notre Debian via la commande suivante :
apt-get install redis-server
Une fois le paquet installé, on va éditer son fichier de configuration (utilisez nano ou vi si vous préférez) :
vim /etc/redis/redis.conf
Localisez la ligne supervised no et remplacez no par systemd
supervised systemd
Redémarrez ensuite Redis :
systemctl restart redis
On vérifie ensuite que notre serveur Redis est lancé et fonctionne correctement :
systemctl status redis
Et si vous obtenez un retour semblable à celui-ci dessus [active(running)] c'est que c'est bon.
Enfin, on va tester la connectivité du serveur Redis, en rentrant la commande ci-dessous, et si tout se passe bien, Redis devrait répondre PONG :
redis-cli ping
Sécuriser un minimum Redis
Cool, c'est fonctionnel ! Mais ce n'est pas terminé. Il y a encore quelques opérations à effectuer pour que les choses soient faites dans les règles de l'art. En effet, l'installation bien que fonctionnelle, peut être quelque peu sécurisée en suivant les étapes suivantes : ajouter une authentification et gérer les commandes dangereuses.
Ajouter une authentification
La première chose que l'on va réaliser, c'est définir une authentification pour Redis, car de base c'est open-bar... et ça, c'est clairement NON ! Pour configurer un mot de passe, il faut, de nouveau, éditer le fichier de configuration de Redis :
vim /etc/redis/redis.conf
Localisez la section SECURITY, décommentez la ligne requirepass (en supprimant le signe # au début de la ligne), et remplacez foobared par un mot de passe fort. Enregistrez ensuite vos modifications
Enregistrez ensuite les modifications, et redémarrez le serveur Redis :
systemctl restart redis
Vous pouvez ensuite vérifier le bon fonctionnement de l'authentification en retentant une commande redis-cli ping. Vous devriez alors obtenir une erreur d'authentification :
Si vous en avez déjà marre, vous pouvez vous arrêtez ici. Mais avouer que ce serait dommage d'arrêter en si bon chemin, non ? Alors voyons maintenant le cas des commandes dangereuses.
La gestion des commandes dangereuses
Certaines commandes de Redis sont extrêmement puissantes, au point qu'on peut parfois les considérer comme dangereuses. C'est par exemple le cas des commandes FLUSHALL, FLUSHDB, KEYS, DEL, CONFIG, BGREWRITEAOF, BGSAVE, SHUTDOWN et j'en passe... Alors il peut être judicieux de se protéger un minimum de ces commandes. Et pour cela, on a deux solutions : désactiver les commandes en cause, ou bien les renommer (utile si on sait qu'on va en avoir besoin...). Et c'est là que cela va sans doute être plus compliqué pour vous, car il va falloir agir au cas pas cas, en fonction de vos besoins, pour choisir la bonne méthode pour chaque commande.
Pour renommer une commande, il convient d'éditer le fichier de configuration de Redis :
vim /etc/redis/redis.conf
Et d'ajouter des lignes en utilisant la syntaxe suivante :
rename-command COMMANDNAME NEWCOMMANDNAME
Ce qui donnerai, par exemple, pour renommer FLUSHALL en FL_A_CMD
rename-command FLUSHALL FL_A_CMD
Répétez ainsi l'opération pour toutes les commandes que vous souhaitez renommer. Et pour désactiver une commande ? Et bien il suffit de la renommer avec une chaîne vide, comme par exemple :
rename-command FLUSHDB ""
Une fois que vous avez ajouté toutes les lignes que vous souhaitiez, enregistrez les changements du fichier et redémarrez redis :
systemctl restart redis
Bon, notre serveur Redis nous a assez occupé, on va maintenant passer à l'interface entre Redis et PHP, le module PHPredis.
Installer PhpRedis
Pour faire discuter PHP avec le serveur Redis, on peut utiliser plusieurs méthodes : PHPRedis, Predis, Credis... J'ai choisi pour ma part d'utiliser le mode PHP PHPRedis. Vous allez voir, c'est assez simple et rapide à mettre en place. Ouvrez un terminal et exécutez la commande suivante pour installer le module, l'activer et redémarrer PHP7.3-fpm :
apt install php-redis && phpenmod redis && systemctl restart php7.3-fpm
Une fois que c'est fait, vous pouvez créer un fichier phpinfo pour vérifier votre installation. Vous devriez y voir une section Redis, comme ci-dessous.
PHPRedis est donc installé et fonctionnel. Voyons maintenant comme l'utiliser sur un blog WordPress pour activer le cache objet.
Activer le cache objet WordPress
Vous vous en doutez sûrement, si je fais un paragraphe sur l'activation du cache objet sur WordPress, c'est que le simple installation de Redis et PHPRedis n'est pas suffisant. Mais pas de panique va va être assez simple et rapide, une fois encore. L'opération consiste simplement a installer un plugin WordPress et effectuer un petit peu de paramétrage. Ouvrez donc votre interface d'administration WordPress et rendez vous dans la page d'ajout d'extensions. La encore, on a plusieurs possibilités, pour la part, j'utilise l'extension Redis Object Cache. Recherchez donc l'extension et installez la.
Une fois l'installation du plugin terminée, si vous l'activez, celle ne fonctionnera pas... Ah zut ! On a fait ça pour rien alors ? Que faire ? Don't panic, c'est normal. Nous avons précédemment défini une authentification pour notre serveur Redis, et ça, notre petit plugin WordPress l'ignore. On va donc devoir fournir la clé d'authentification et pour cela, on va éditer le fichier wp-config.php de notre WordPress et ajouter ceci (à adapter avec votre clé d'authentification, bien sûr) :
define( 'WP_REDIS_PASSWORD', 'CLE_AUTHENTIFICATION' );
Ensuite, il ne nous reste plus qu'à terminer ce tutoriel en redémarrant Apache et PHP :
systemctl restart apache2 && systemctl restart php7.3-fpm
On peut maintenant activer notre plugin, et l'on constate que notre cache objet WordPress est opérationnel !
Et bien voilà, tuto terminé ! J'espère que cela sera utile à certain d'entre vous ! 🙂
Partager la publication "Installer Redis et activer le cache objet WordPress"
Sur un serveur qui héberge plusieurs sites WordPress, il faut ajouter à wp-config.php la ligne:
define( 'WP_REDIS_DATABASE', numero_base_de_donnees );
(nota bene: les define doivent être ajouté avant le require de wp-settings.php)