Gérer les mises à jour WordPress avec WP-CLI

Mises à 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 décrite ici, 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.

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.

$ groups
microlinux wheel

Télécharger le fichier wp-cli.phar sur le site du projet WP-CLI avec wget ou curl. La variable DOWNLOAD m’évite juste d’avoir une ligne à rallonge.

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

Vérifier que tout fonctionne.

$ php wp-cli.phar --info
PHP binary:     /usr/bin/php
PHP version:    5.6.32
php.ini used:   /etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
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: 1.4.1

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 1.4.1? [y/n] y
Downloading from https://github.com/wp-cli/.../wp-cli-1.4.1.phar...
md5 hash verified: df26444df533a0fb9a0159036ae2773b
New version works. Proceeding to replace.
Success: Updated WP-CLI to 1.4.1.

Mises à jour WordPress manuelles avec WP-CLI

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

$ cd /var/www/microlinux-site/html/

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

$ wp core check-update
+---------+--------+-----------------------------------+
| version | update | package_url                       |
+---------+--------+-----------------------------------+
| 4.9.1   | minor  | https://<url>/wordpress-4.9.1.zip |
+---------+--------+-----------------------------------+

Récupérer et installer la mise à jour.

$ wp core update
Updating to version 4.9.1 (fr_FR)...
Téléchargement de la mise à jour depuis 
https://downloads.wordpress.org/release/fr_FR/wordpress-4.9.1.zip...
Décompression de la mise à jour...
Success: WordPress updated successfully.

Avant de procéder avec les extensions, il faudra éventuellement régler un problème de permissions. Le répertoire wp-content appartient certes à l’utilisateur microlinux et au groupe apache. En revanche, les extensions ajoutées depuis le tableau de bord WordPress appartiennent à l’utilisateur apache et au groupe apache et ne sont donc plus accessibles au simple utilisateur microlinux. Il va falloir rectifier le tir comme ceci.

$ sudo chown -R microlinux:apache wp-content/
$ sudo find wp-content/ -type d -exec chmod 0775 {} \;
$ sudo find wp-content/ -type f -exec chmod 0664 {} \;

Afficher la liste des extensions.

$ wp plugin list
+---------+----------+-----------+---------+
| name    | status   | update    | version |
+---------+----------+-----------+---------+
| akismet | active   | available | 3.3.2   |
| hello   | inactive | none      | 1.6     |
+---------+----------+-----------+---------+

Mettre à jour l’ensemble des extensions.

$ wp plugin update --all
...
+---------+-------------+-------------+---------+
| name    | old_version | new_version | status  |
+---------+-------------+-------------+---------+
| akismet | 3.3.2       | 4.0.1       | Updated |
+---------+-------------+-------------+---------+
Success: Updated 1 of 1 plugins.

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:
 UI twentyfifteen   1.8
 UA twentyseventeen 1.3
 UI twentysixteen   1.3

Legend: I = Inactive, A = Active, U = Update Available

Mettre à jour l’ensemble des thèmes installés.

$ wp theme update --all
...
+-----------------+-------------+-------------+---------+
| name            | old_version | new_version | status  |
+-----------------+-------------+-------------+---------+
| twentyfifteen   | 1.8         | 1.9         | Updated |
| twentyseventeen | 1.3         | 1.4         | Updated |
| twentysixteen   | 1.3         | 1.4         | Updated |
+-----------------+-------------+-------------+---------+
Success: Updated 3 of 3 themes.

Scripter la procédure

Une fois que tout fonctionne comme prévu, nous pouvons scripter la procédure. Voici un exemple de script shell qui identifie les installations existantes de WordPress sur le serveur et se charge de la définition correcte des permissions ainsi que de la mise en jour de tous les composants.

#!/bin/bash
#
# wordpress-update.sh
#
# Mise à jour automatique de toutes les installations WordPress
#
# (c) Nicolas Kovacs <info@microlinux.fr>

# WP-CLI doit être installé
WP='/usr/local/bin/wp'

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

# Utilisateur normal
WPUSER='microlinux'
WPGROUP='microlinux'

# Racine du serveur Web
WPROOT='/var/www'

# Identifier les installations WordPress 
WPDIRS=$(dirname $(find $WPROOT -type f -name 'wp-config.php'))

for WPDIR in $WPDIRS; do
  echo
  echo "---------- $WPDIR ----------"
  echo
  cd $WPDIR
  # Définir les permissions correctes
  chown -R $WPUSER:$WPGROUP $WPDIR
  find $WPDIR -type d -exec chmod 0755 {} \;
  find $WPDIR -type f -exec chmod 0644 {} \;
  chown -R $WPUSER:$HTGROUP $WPDIR/wp-content
  find $WPDIR/wp-content -type d -exec chmod 0775 {} \;
  find $WPDIR/wp-content -type f -exec chmod 0664 {} \;
  # Mettre à jour le moteur WordPress
  su -c "$WP core update" $WPUSER
  # Mettre à jour les extensions
  su -c "$WP plugin update --all" $WPUSER
  # Mettre à jour les thèmes
  su -c "$WP theme update --all" $WPUSER
done

echo
 
exit 0

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 à 4h30
30 4 * * * /usr/local/sbin/wordpress-update.sh 1> /dev/null

 

Ce contenu a été publié dans Documentation Microlinux, Hébergement, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

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