Mise à jour WordPressDans notre article détaillé sur l’hébergement de WordPress, nous avons vu que ce moteur de CMS constitue une cible de prédilection des attaques malveillantes, au vu de la popularité de l’application. Il est donc crucial de garder son installation à jour pour éviter de se faire pirater son installation. Certes, WordPress est théoriquement capable d’effectuer des mises à jour automatiques, mais cette façon de procéder nécessiterait l’ouverture des droits d’accès en écriture du serveur Web sur l’ensemble de l’installation, ce qui constitue un risque de sécurité. Reste la procédure manuelle, qui s’avère quelque peu pénible. Si vous avez comme moi un certain nombre d’installations WordPress sur différents serveurs à gérer, cela devient vite pénible.

C’est là où WP-CLI va nous faciliter la tâche, en nous permettant une gestion automatisée des mises à jour tout en respectant une sécurisation maximale de notre installation. WP-CLI est une interface en ligne de commande qui permet de gérer une ou plusieurs installations WordPress sur un serveur, sans avoir recours à une interface graphique. Les fonctionnalités de WP-CLI sont nombreuses, mais nous n’allons pas toutes les aborder. Nous nous contenterons d’utiliser cet outil pour la maintenance de WordPress et de tout ce qui va avec, c’est-à-dire les extensions et les thèmes.

Prérequis

WP-CLI a besoin de la commande /usr/bin/php pour fonctionner. Sous CentOS, cette commande est normalement fournie par les paquets officiels. Si l’on utilise les paquets PHP plus récents fournis par les dépôts SCL, il faut créer un lien symbolique correspondant.

$ cd /usr/bin/
$ sudo ln -s /opt/rh/rh-php72/root/usr/bin/php .

Installation de WP-CLI

Je me connecte à mon serveur en tant qu’utilisateur microlinux. Cet utilisateur est propriétaire des installations WordPress sur la machine. Je veille à ce qu’il fasse partie du groupe wheel pour avoir accès à la commande sudo.

[microlinux@sd-100246:~] $ groups
microlinux wheel systemd-journal

Télécharger le fichier wp-cli.phar sur le site du projet WP-CLI avec wget ou curl.

$ wget -c http://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Vérifier que tout fonctionne.

$ php wp-cli.phar --info
OS:     Linux 3.10.0-1062.4.3.el7.x86_64 #1 SMP Wed Nov 13 23:58:53 UTC 2019 x86_64
Shell:  /bin/bash
PHP binary:     /opt/rh/rh-php72/root/usr/bin/php
PHP version:    7.2.24
php.ini used:   /etc/opt/rh/rh-php72/php.ini
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/microlinux
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.4.0

Pour utiliser WP-CLI à partir de la ligne de commande en tapant wp, on va rendre le fichier exécutable tout en le déplaçant vers un endroit approprié quelque part dans le PATH et en le renommant.

$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp

Maintenance de WP-CLI

WP-CLI peut gérer lui-même ses propres mises à jour. L’option check-update affiche les mises à jour disponibles.

$ wp cli check-update
Success: WP-CLI is at the latest version.

Pour des raisons évidentes, la mise à jour ne pourra pas s’effectuer en tant qu’utilisateur du commun des mortels.

$ wp cli update
Error: /usr/local/bin is not writable by current user.

Dans ce cas, il faudra invoquer la commande avec sudo et en spécifiant le chemin complet.

$ sudo /usr/local/bin/wp cli update
You have version 1.4.0. Would you like to update to 2.4.0? [y/n] y
...
Success: Updated WP-CLI to 2.4.0.

Mises à jour WordPress manuelles

WP-CLI devra être invoqué depuis la racine du site WordPress.

Vérifier s’il y a une mise à jour.

$ wp core check-update
Success: WordPress is at the latest version.

Lorsqu’une mise à jour est disponible, on peut la récupérer et l’installer comme ceci.

$ wp core update

Afficher la liste des extensions.

$ wp plugin list
+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| akismet | inactive | none   | 4.1.4   |
| hello   | inactive | none   | 1.7.2   |
+---------+----------+--------+---------+

Lorsqu’une ou plusieurs mises à jour sont disponibles pour les extensions, on peut effectuer la mise à jour comme ceci.

$ wp plugin update --all

On procèdera de même pour les thèmes. Dans un premier temps, afficher l’état des thèmes installés.

$ wp theme status
3 installed themes:
  I twentynineteen  1.4
  I twentyseventeen 2.2
  A twentytwenty    1.1

Legend: A = Active, I = Inactive

Mettre à jour l’ensemble des thèmes installés lorsqu’une ou plusieurs mises à jour sont disponibles.

$ wp theme update --all

Scripter la procédure

Une fois que tout fonctionne comme prévu, nous pouvons scripter la procédure. Dans mon dépôt Gitlab, je fournis un script shell wordpress-update.sh qui trouve automatiquement toutes les installations WordPress sur le serveur tout en se chargeant de la définition correcte des permissions ainsi que de la mise à jour de tous les composants.

Récupérer le script.

$ git clone https://gitlab.com/kikinovak/wordpress.git

Copier le script vers un endroit approprié.

$ cp wordpress/wordpress-update.sh ~/bin

Éditer une poignée de variables pour adapter le script à la configuration locale.

# Apache
HTUSER='apache'
HTGROUP='apache'

# User
WPUSER='microlinux'
WPGROUP='microlinux'

# Webroot
WPROOT='/var/www'

Exécuter le script.

$ sudo ~/bin/wordpress-update.sh

Mise à jour quotidienne automatique

Il ne nous reste plus qu’à définir un lancement automatique de la mise à jour sur notre serveur. On pourra définir une tâche programmée comme ceci, par exemple.

# crontab -e
# Mettre à jour WordPress tous les jours à 4h15
15 4 * * * /home/microlinux/bin/wordpress-update.sh 1> /dev/null

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


6 commentaires

Mirabellette · 3 avril 2020 à 11 h 30 min

Merci beaucoup pour cet article, je ne connaissais pas wp-cli. Je l’ai mis en place et ce fonctionne très bien 🙂

Concernant ton script, pourquoi tu changes le owner de ${WPDIR}/wp-content, de mon côté, j’ai un unique utilisateur qui n’est pas celui du serveur web.

Seconde question, pourquoi avoir des permissions aussi large, je n’autorise que l’utilisateur wordpress de mon côté et cela m’a l’air de fonctionner.

Dernière question, je viens de lancer la maj de wordpress en 5.4 avec l’outil et j’ai encore des opérations à faire en me connectant sur le site au niveau de la base de données. La maj réalisée avec l’outil n’est pas complète car ne prends pas en compte le schéma, ou alors j’ai loupé une option 🙂

Merci par avance.

    kikinovak · 3 avril 2020 à 12 h 13 min

    En ce qui concerne les permissions, l’arborescence du site ne doit pas appartenir à l’utilisateur qui fait tourner le processus du serveur web, exception faite pour les répertoires dans lesquels l’application doit pouvoir écrire.

    Pour les mises à jour, je ne sais pas. J’ai utilisé mon script pour passer à la version 5.4 sur toutes mes installations, et ça a marché nickel.

      Mirabellette · 3 avril 2020 à 12 h 17 min

      Merci pour les précisions concernant les répertoires où WP a besoin d’écrire. N’étant pas familier avec l’application, je ne les connaissais pas.

      Bonne journée 🙂

        kikinovak · 3 avril 2020 à 12 h 23 min

        C’est expliqué en détail ici.

Mirabellette · 7 avril 2020 à 23 h 11 min

Hello,

Je reviens vers toi avec des nouvelles concernant la maj de la base de données qui ne s’était pas effectuée chez moi. La nécessitité de le faire manuellement après « wp core update » est bien quelque chose de normale. C’est pour cela qu’il y a la commande « wp core update-db » à executer ensuite pour cela.

Plus d’informations ici : https://github.com/wp-cli/core-command/#wp-core-update-db

Bonne soirée,
Mirabellette

Les commentaires sont fermés.