Synchroniser sa base de données WordPress avec VersionPress

Avec VersionPress, annuler la mise à jour d'une extension devient un jeu d'enfant. Fini les mises à jour qui endommagent votre site Web et qui génèrent des plaintes de la part de vos visiteurs. La question du versionnement de base de données est un sujet complexe sous WordPress.

Pour aller encore plus loin et recevoir des dizaines de conseils et astuces WordPress, je vous conseille vivement de vous inscrire pour recevoir mon guide gratuit en 15 étapes qui va vous permettre de rendre votre site rapide, optimisé, sécurisé et plus encore (bloging, plugins indispensables, choix d'un thème, etc), résultats garantis.

En effet, en tant que développeur, j’ai moi même souvent rencontré les mêmes problèmes liés aux sites WordPress, et plus précisément aux bases de données. Il est très difficile d’effectuer des actions en back-office sur un site de test, puis de reporter ces actions sur le site de production, il fallait toujours répéter deux fois les mêmes opérations ou même écrire un script quand ces dernières étaient trop nombreuses ou trop complexes.

Alors c’est parti pour une présentation complète de VersionPress, l’outil qui va révolutionner votre manière de gérer vos sites WordPress.

Présentation de VersionPress

VersionPress est une extension open source et gratuite, reposant sur Git.

Ses fonctionnalités principales :

  • Annuler un changement (mise à jour d’une extension par exemple) ;
  • Création d’environnements de test (copie de la version de production) ;
  • Fusionner deux bases de données ;

Disponible en version Developer Preview depuis plusieurs mois, vous pouvez utiliser cette extension en production.

VersionPress surveille chaque action de votre site WordPress et propose un bouton Annuler ce changement en cas de problème.

Concernant la fusion de bases de données, imaginez le scénario suivant :

  • Vous avez votre site de production, vous souhaitez effectuer des changements assez importants ;
  • Vous créez donc un environnement de test en effectuant ces modifications ;
  • Une fois que vous êtes prêt, vous souhaitez porter en production ces changements. Sauf qu’entre temps, votre site de production a également subi certains changements (publication de contenus, de commentaires, etc.) ;

Ainsi avec la fusion de base de données, VersionPress analyse les changements de votre base de données de test et les ajoute automatiquement à la base de données de production, sans perte de données.

Si vous êtes développeur et que vous êtes habitué à travailler avec Git, le workflow est similaire avec VersionPress, sauf qu’au lieu de giter uniquement votre code, cette fois-ci vous gitez également les changements impactant la base de données (modification d’un article, etc).

Concernant les actions sur la base de données qui sont suivies par l’extension, les voici :

Les articles

  • Création d’un article ;
  • Édition d’un article ;
  • Création de brouillon ;
  • Mise à jour de brouillon ;
  • Publication de brouillon ;
  • Mettre un article à la corbeille ;
  • Sortir un l’article de la corbeille ;
  • Suppression d’article ;

À noter que les révisions ne sont pas commitées car l’extension apporte déjà une dose de sauvegarde avec les articles. Il serait donc intéressant de mettre la constante suivante à false pour éviter la sauvegarde inutile de révisions :

define('WP_POST_REVISIONS', false);

Les types de contenu personnalisés et les champs personnalisés sont généralement supportés (compatibilité ACF).

Les métadonnées des contenus sont également bien suivis par l’extension.

Commentaires

  • Création d’un commentaire ;
  • Édition d’un commentaire ;
  • Suppression d’un commentaire ;
  • Mettre un commentaire à la corbeille ;
  • Sortir un commentaire de la corbeille ;

Options

La plupart des options sont suivies mais les transient et d’autres options spécifiques sont ignorées.

  • Création d’option ;
  • Édition d’option ;
  • Suppression d’option ;

Utilisateurs

  • Création d’utilisateur ;
  • Édition d’utilisateur ;
  • Suppression d’utilisateur ;

La plupart des métadonnées des utilisateurs sont supportées, tandis que certaines sont ignorées de manière intentionnelle (tokens de session, etc).

Termes

Pour rappel, un terme c’est un élément d’une taxonomie, telles que les catégories ou les étiquettes.

  • Création de terme ;
  • Édition de terme ;
  • Suppression de terme ;

Autres

Les widgets et les menus sont également supportés, de même pour tout ce qui est stocké selon le schema de base de données de WordPress. Pour les extensions utilisant des tables de base de données personnalisées, il n’y a donc aucun support par défaut.

Les fichiers

Outre les changements dans la base de données, VersionPress enregistre aussi les modifications de certains fichiers tels que :

  • Les thèmes : installation, désinstallation et mise à jour ;
  • Les extensions : installation, désinstallation et mise à jour ;
  • Le coeur de WordPress : mise à jour ;
  • Les médias ;
  • Les traductions ;

Changements manuels

Pour les actions qui ne sont pas suivies par l’extension, telles que des modifications de fichiers en dur sur le serveur, il est possible de les commiter directement sur le tableau de bord de l’extension. Bien entendu, vous pouvez également le faire directement avec votre client git.

Pré-requis

Alors oui, sur le papier, c’est formidable, mais ne criez pas victoire trop vite. Outre le fait que l’extension n’est pas encore officiellement disponible pour fonctionner en production, elle nécessite également des pré-requis serveur et logiciels assez important :

  • WordPress 4.8 ou plus ;
  • PHP 5.6 ou plus ;
  • Git 1.9 ou plus (2.13 ou plus récent recommandé) ;
  • Apache, nginx ou IIS 7 ;
  • WP-CLI (pour certaines fonctionnalités comme le clonage et le merge) ;
  • proc_open() activé ;
  • Des droits d’écriture sur les fichiers du serveur ;
  • Configuration WordPress standard (fichier wp-config.php) ;
  • Exécution de fonctions externes (on peut oublier les mutualisés OVH à priori) ;
  • Non compatible WordPress multisite ;

Ca limite pas mal déjà les possibilités. Mais continuons à creuser davantage.

J’ai donc décidé de tester l’extension sur un hébergement Archive Host, qui contrairement à OVH, permet pas mal d’ajustements. J’ai par exemple pu avoir un accès SSH avec GIT ou d’autres types de configuration.

Concernant GIT justement, j’ai rencontré un problème, la version du serveur était la 1.8 qui est non compatible avec VersionPress, impossible d’aller plus loin donc. Par chance le support technique Archive Host est vraiment très rapide et a résolu l’affaire en moins de 24 h, j’ai donc pu obtenir la version 2.14 de GIT.

Conditions du test

Pour ce test, voici ma configuration :

  • Environnement de pré-production ;
  • Pré-production synchronisée sur un dépôt GIT ;
  • VersionPress en v4 (version beta) ;

Test de VersionPress

Lors de l’activation de l’extension, on arrive sur un écran d’initialisation qui nous rappelle les pré-requis minimum à avoir pour faire fonctionner VersionPress. Si on ne respecte pas un de ces critères il est impossible d’activer réellement l’extension.

Une fois l’activation faite, on arrive sur un tableau de bord listant les derniers commits git et VersionPress.

Comme vous pouvez le constater sur la capture d’écran ci dessous, j’ai déjà effectué certains commits git avant l’installation de l’extension. VersionPress m’informe donc que les changements précédant l’activation de l’extension ne peuvent être annulé.

Place aux choses sérieuses.

Je modifie le slogan du site dans les réglages généraux du back-office, puis je retourne sur le tableau de bord de VersionPress.

Je vois apparaître la modification Updated option blogdescription, quand je clique dessus et que je clique sur Full diff, je peux voir l’ancienne valeur à gauche et la nouvelle valeur à droite à la manière d’un git diff classique. Ultra efficace.

Et c’est là que la magie opère !

Ainsi, lorsque je fais un Undo this, qui signifie Annuler ceci, la description du blog revient à l’état précédent à savoir « Un blog destiné à tous les utilisateurs de WordPress ». Cela effectue un revert de la même manière que git, ca ne supprime donc pas le commit, mais en ajoute un nouveau.

Bon, on va prendre une petite pause pour se laisser le temps d’analyser tout ça, ok ?

VersionPress pemet d’avoir un listing complet des actions réalisées (celles qui impactent la base de données) et d’annuler les changements de certaines de ces actions. En clair, le rêve de n’importe quel utilisateur avancé de WordPress.

Encore mieux, il existe aussi la possibilité d’effectuer un retour en arrière jusqu’à un certain commit. Donc si on a effectué plusieurs actions dommageables, on peut revenir en arrière sans soucis avec le commit de notre choix.

Support des extensions

Du côté du support des extensions, c’est assez bluffant, puisque toutes les modifications que j’ai effectués ont été suivies par VersionPress.

Voici la liste des extensions que j’ai testé :

  • WooCommerce (suppression d’un produit) ;
  • Divi (création d’un projet via le type de contenu personnalisé de Divi) ;
  • Ninja Forms (création d’un formulaire) ;
  • ACF (création d’un groupe de champs) ;
  • WP Sitemap Page ;
  • Yoast SEO ;

Selon VersionPress, seules les extensions codées un peu en dehors de l’API WordPress et du schéma de base de données classique peuvent ne pas fonctionner.

Workflow Git

Si on jette un coup d’oeil du côté du dépôt git local sur la pré-production, on remarque que tous les commits du tableau de bord générés par VersionPress sont aussi présents dans les commits git. Ainsi un petit git log -5 me donne :

commit 9965a40ff2e3f2eef010abee57071143a8e437f5 (HEAD -> master)
Author: Florian <florian@wpstrategie.fr>
Date: Fri Oct 27 17:59:22 2017 +0200

[VP] Deleted option 'wpseo_flush_rewrite'

VP-Action: option/delete/wpseo_flush_rewrite

X-VP-Version: 4.0-beta
X-VP-Environment: default

commit 2f1994d0b7a5802afea5952b96d66450083d5b2a
Author: Florian <florian@wpstrategie.fr>
Date: Fri Oct 27 17:59:21 2017 +0200

[VP] Deleted category 'flex'

VP-Action: term/delete/8A7B8166E52E499F9DF691A2606454AA
VP-Term-Name: flex
VP-Term-Taxonomy: category

X-VP-Version: 4.0-beta
X-VP-Environment: default

La question que je me pose est la suivante : quel Workflow git adopter si VersionPress rajoute ses commits à chaque action back-office ? Est-ce qu’on peut continuer par exemple à travailler en local, faire ses commits de code, puis vouloir déployer en pré-production / production et tomber sur une branche master avec 40 commits d’avance à cause de VersionPress.

J’essaye d’imaginer un système viable : si j’ai VersionPress d’installé sur une pré-production / production, je dois l’avoir aussi sur l’environnement local. Ainsi, à chaque modification du back-office en production, cela effectuera un commit versionPress, du coup sur mon environnement local ou pré-production, je pourrais faire un git pull pour récupérer les modifications de base de données.

Comment faire dans ce cas, puisque la moindre action back-office réalisée en local et en pré-production sera elle même commitée par VersionPress ? Cela engendrera des conflits GIT impossibles à résoudre.

Pas de panique, l’équipe de VersionPress a pensé à tout et nous propose un workflow d’équipe possible. Je traiterai le sujet dans un prochain article où nous verrons notamment le principe des clones et des fusions.

Le mot de la fin sur VersionPress

Dans cet article dédié à VersionPress, nous avons abordés les points suivants :

  • Présentation rapide de l’outil ;
  • Les différents éléments suivis par l’extension (articles, options, etc) ;
  • Les pré-requis nécessaires au bon fonctionnement de VersionPress ;
  • Les conditions du test que j’ai effectué ;
  • Le test grandeur nature ;
  • Le support des extensions tierces ;
  • Le workflow GIT ;

Mon ressenti personnel est très positif, on sent que l’équipe derrière VersionPress souhaite bien faire les choses, pas de précipitation, l’outil est en bêta-test depuis presque 2 ans. Ils souhaitent livrer un produit abouti et c’est tout à leur honneur.

C’est le genre d’outil qui change tout. Car il peut aider à la fois les développeurs, comme les administrateurs non technique.

Les bénéfices de l’extension sont clairs :

  • Journalisation de toutes les actions en back-office, ainsi vous savez exactement ce qui se passe sur votre site ;
  • Possibilité d’annuler une de ces actions ;
  • Possibilité de revenir en arrière après un certain nombre de modifications (revenir 15 commits en arrière par exemple) ;
  • Couplé au système de gestion de version GIT ;
  • Possibilité de cloner des sites de manière très simple ;
  • Possibilité de fusionner deux bases de données WordPress ;

Mais vous l’avez remarqué, les pré-requis serveur sont assez nombreux, et VersionPress est encore en version Developer Preview pour l’instant, l’utilisation de ce dernier en production est donc fortement déconseillé pour le moment.

Nul doute que nous allons suivre avec attention les prochaines évolutions de l’extension qui semble très prometteuses.

Et vous, que pensez-vous de VersionPress ? Allez-vous tenter l’expérience pour faciliter la synchronisation de vos bases de données ?

2 commentaires

  1. Florian Tiar auteur de l’article

    WooCommerce est déjà assez bien supporté je trouve, je n’ai pas testé tous les cas possibles, mais la création, modification et suppression d’un produit fonctionne sans problème

Laisser un commentaire

Thèmes & Plugins
Premium By WP Channel

WP Alacarte propose des produits et services de qualité
made in France pour la plateforme WordPress.

Tout est prêt pour créer votre site à la carte !

  • Thèmes et extensions premium
  • Facilité d’utilisation garantie
  • Temps de chargement optimisé
  • Personnalisation avancée
Découvrir

Rejoignez la communauté WordPress !

Faites partie de l’aventure en devenant membre d’une association WordPress. Conférences, ateliers, BarCamp, WordCamp… Venez
partager votre passion pour WordPress !

Aurélien DENIS,
président des associations WordPress Francophone et WPMX