dimanche , 29 novembre 2020

Installer Redis pour optimiser WordPress

Redis est un système Open-Source permettant de stocker en mémoire RAM de l’information sous la forme de clé-valeur. C’est un système très puissant pour améliorer la rapidité de votre site web wordpress ou tout autres applications.

Plus puissant que Memcached, Redis permet de stocker des structures de données comme des chaines, des hashes, des listes, des sets (triés et non triés), des données de géolocalisation, …

Dans le cadre de l’optimisation d’un site WordPress, Redis sera utilisé (via un plugin) pour stocker les données mises en cache grâce aux objets WP_Object_Cache. Ceci permettra de diminuer la charge de votre serveur (CPU et accès bases de données) et rendra votre site beaucoup plus rapide !

Etape 1 : Installer et configurer Redis Server

Pour installer Redis Server sur un serveur Ubuntu, exécutez les commandes suivantes :

sudo apt update
sudo apt install redis-server

Après l’exécution de ces commandes, Redis Server est déjà installé sur votre serveur. Mais une modification importante est à réaliser dans le fichier de configuration de Redis Server.

sudo nano /etc/redis/redis.conf

Pour que le serveur Redis se lance au démarrage de votre serveur (systemd), vous devez modifier le paramètre suivant :

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised no

Doit être modifié par :

supervised systemd

Une fois cette modification effectuée, redémarrez le serveur Redis avec la commande suivante :

sudo systemctl restart redis.service

Etape 2 : Vérifier si le serveur Redis est actif

Arrivé à cette étape, vous devriez déjà avoir un serveur Redis fonctionnel. Mais si vous souhaitez vérifier que l’installation s’est déroulée sans problème et que votre serveur est correctement lancé, exécutez la commande suivante :

sudo systemctl status redis

Si cette commande est exécutée sans retourner d’erreur, vous devriez voir quelque chose comme ceci :

ubuntu@server:~$ sudo systemctl status redis
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-10-29 19:44:38 UTC; 3min 47s ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
  Process: 14601 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 14609 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 14630 (redis-server)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/redis-server.service
           └─14630 /usr/bin/redis-server 127.0.0.1:6379

On peut voir que le serveur est Active (running) ce qui signifie que tout est ok.

Il se peut aussi que vous ayez le message d’erreur ci-dessous. Même si cela ne semble pas vraiment poser de problème, je vous explique un peu plus loin comment résoudre cette erreur.

redis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file

Une autre façon de vérifier que le serveur Redis est correctement installé est d’exécuter une commande permettant de récupérer la version du serveur Redis.

$ redis-server -v
Redis server v=4.0.9 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=9435c3c2879311f3

Etape 3 : Tester votre serveur Redis

Pour se connecter en ligne de commande au serveur Redis, vous pouvez exécuter la commande redis-cli.

ubuntu@server:~$ redis-cli
127.0.0.1:6379>

A partir de là, vous pouvez entrer des commandes redis. Un exemple simple pourrait-être :

127.0.0.1:6379> set test "Welcome to ExoConsult"
OK
127.0.0.1:6379> get test
"Welcome to ExoConsult"
127.0.0.1:6379>

Troubleshooting

Can’t open PID file redis-server.pid

Pour résoudre l’erreur ci-dessous lors de l’exécution de la commande

sudo systemctl status redis
Oct 29 19:44:38 server systemd[1]: Starting Advanced key-value store...
Oct 29 19:44:38 server systemd[1]: redis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file or directory
Oct 29 19:44:38 server systemd[1]: Started Advanced key-value store.

Voici la solution :

sudo nano /etc/systemd/system/redis.service

Dans [Service], ajouter une nouvelle ligne avec le code :

ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"

La section devrait ressembler à

[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
PIDFile=/var/run/redis/redis-server.pid

Enregistrez les modifications et exécutez les commandes suivantes pour que la modification prenne effet.

sudo systemctl daemon-reload
sudo systemctl enable redis-server
sudo systemctl restart redis.service

Et l’erreur devrait avoir disparu

ubuntu@server:/home$ sudo systemctl status redis.service
● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-10-29 23:16:05 UTC; 10min ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
  Process: 2317 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 2342 ExecStartPost=/bin/sh -c echo $MAINPID > /var/run/redis/redis.pid (code=exited, status=0/SUCCESS)
  Process: 2320 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 2341 (redis-server)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/redis-server.service
           └─2341 /usr/bin/redis-server 127.0.0.1:6379

Oct 29 23:16:04 server systemd[1]: Starting Advanced key-value store...
Oct 29 23:16:05 server systemd[1]: Started Advanced key-value store.

Pour en savoir plus

Il existe beaucoup de matériel didactique sur internet pour apprendre à utiliser votre tout nouveau serveur redis.

Voici une liste de quelques sites intéressants :

Etape 4 : Installer l’extension PHP Redis

L’extension phpredis fournit une API pour permettre la communication entre votre serveur Web et le serveur Redis.

Installez les packages suivants :

sudo apt-get update
sudo apt-get install -y autoconf

Téléchargez le code source de phpredis depuis le site web officiel et exécutez les commandes suivantes :

wget https://pecl.php.net/get/redis-VERSION.tgz
tar xzf redis-VERSION.tgz
cd redis-VERSION
/opt/bitnami/php/bin/phpize
./configure --with-php-config=/opt/bitnami/php/bin/php-config
make
sudo make install

A la fin de l’opération, vous devriez avoir le message suivant :

ubuntu@server:~/redis-5.3.2$ sudo make install
Installing shared extensions:     /opt/bitnami/php/lib/php/extensions/

Ces commandes sont à exécuter dans votre répertoire /home/ubuntu.

Pour connaître la dernière version de phpredis disponible, rendez-vous à l’adresse suivante : https://pecl.php.net/package/redis

Au moment d’écrire ces lignes, la dernière version stable est : https://pecl.php.net/get/redis-5.3.2.tgz

Etape 5 : Activer l’extension dans php.ini

On a vu au point précédent comment installer l’extension permettant à PHP de communiquer avec votre serveur Redis. Il faut maintenant activer cette extension au niveau du serveur PHP.

sudo nano /opt/bitnami/php/etc/php.ini

Ajouter le texte suivant dans la partie « Dynamic Extensions »

extension=redis.so

Pour que les changements soient effectifs, n’oubliez pas de redémarrer Apache (et au besoin PHP-FPM) :

sudo /opt/bitnami/ctlscript.sh restart apache
sudo /opt/bitnami/ctlscript.sh restart php-fpm

Etape 6 : Vérifier l’instalation de l’extension redis

/opt/bitnami/php/bin/php -m | grep redis

Si redis apparaît, alors c’est que tout est ok !

Liens utiles concernant l’extension PHP Redis

Résolution des problèmes

Problème avec la commande phpize

ubuntu@exoweb:~/redis-5.3.2$ phpize

Command 'phpize' not found, but can be installed with:

sudo apt install php7.2-dev

Si vous utilisez un stack Bitnami, la commande a utiliser est la suivante :

/opt/bitnami/php/bin/phpize

La commande configure ne fonctionne pas

ubuntu@server:~/redis-5.3.2$ sudo ./configure
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for cc... no
checking for gcc... no
configure: error: in `/home/ubuntu/redis-5.3.2':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

Cela signifie qu’il n’y a pas de compilateur installé sur votre machine. Pour installer un compiler (type gcc) ainsi que toute une série d’autres outils :

sudo apt-get update
sudo apt-get install build-essential

A la fin d’exécution de cette commande, vous devriez avoir installé les utilitaires suivants :

Setting up manpages-dev (5.05-1) ...
Setting up libfile-fcntllock-perl (0.22-3build4) ...
Setting up libalgorithm-diff-perl (1.19.03-2) ...
Setting up binutils-common:amd64 (2.34-6ubuntu1) ...
Setting up linux-libc-dev:amd64 (5.4.0-52.57) ...
Setting up libctf-nobfd0:amd64 (2.34-6ubuntu1) ...
Setting up libgomp1:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libfakeroot:amd64 (1.24-1) ...
Setting up fakeroot (1.24-1) ...
update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode
Setting up make (4.2.1-1.2) ...
Setting up libquadmath0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libmpc3:amd64 (1.1.0-1) ...
Setting up libdpkg-perl (1.19.7ubuntu3) ...
Setting up libubsan1:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...
Setting up libisl22:amd64 (0.22.1-1) ...
Setting up libbinutils:amd64 (2.34-6ubuntu1) ...
Setting up libc-dev-bin (2.31-0ubuntu9.1) ...
Setting up libalgorithm-diff-xs-perl (0.04-6) ...
Setting up libcc1-0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up liblsan0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libitm1:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up gcc-9-base:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up libalgorithm-merge-perl (0.08-3) ...
Setting up libtsan0:amd64 (10.2.0-5ubuntu1~20.04) ...
Setting up libctf0:amd64 (2.34-6ubuntu1) ...
Setting up libasan5:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up cpp-9 (9.3.0-17ubuntu1~20.04) ...
Setting up libc6-dev:amd64 (2.31-0ubuntu9.1) ...
Setting up binutils-x86-64-linux-gnu (2.34-6ubuntu1) ...
Setting up binutils (2.34-6ubuntu1) ...
Setting up dpkg-dev (1.19.7ubuntu3) ...
Setting up libgcc-9-dev:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up cpp (4:9.3.0-1ubuntu2) ...
Setting up gcc-9 (9.3.0-17ubuntu1~20.04) ...
Setting up libstdc++-9-dev:amd64 (9.3.0-17ubuntu1~20.04) ...
Setting up gcc (4:9.3.0-1ubuntu2) ...
Setting up g++-9 (9.3.0-17ubuntu1~20.04) ...
Setting up g++ (4:9.3.0-1ubuntu2) ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode
Setting up build-essential (12.8ubuntu1.1) ...

Etape 7 : Installer un plugin wordpress

Lorsque votre serveur Redis est fonctionnel et que vous avez correctement activé l’extension Redis pour PHP, vous pouvez améliorer la performance de votre site WordPress en installant le plugin adéquat.

Personnellement, j’ai opté pour le plugin de chez Hummingbird Pro de chez WPMU. Pour télécharger et installer ce plugin, vous devez souscrire un abonnement payant, mais vous aurez ensuite accès à des plugins de très grande qualité comme Smush Pro, Defender Pro, …

Ledger Wallet

Check Also

Fixer le groupe des nouveaux fichiers créés dans un répertoire

If you want all new files in a particular directory to be owned by a …

Laisser un commentaire

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