Plusieurs configurations pour un seul site

Lors de son installation « 5minutes », WordPress crée un fichier nommé « wp-config.php » qui contient toutes les variables d’environnement nécessaire au bon fonctionnement du CMS. On pense notamment aux informations de connexion à la base de donnée, au préfixe des tables ou encore aux clé de sécurité pour le cryptage des données sensibles du site. Il faut savoir que le fichier wp-config peut faire bien plus que ça ! Toutes les fonctionnalités disponibles ne sont pas affichées par défaut, il faut se référer à l’article sur le sujet pour voir l’étendu des possibilités : https://codex.wordpress.org/fr:Modifier_wp-config.php

Ceci noté, la plupart du temps on ne travaille pas (on ne devrait jamais en fait) directement sur un site en production. Ça veut dire que l’on a une réplique du site soit sur une machine locale, soit sur un serveur de développement. On peut aussi avoir plusieurs environnements (local, dev, préprod, prod, …) ce qui implique potentiellement une configuration différente pour chacun de ces environnements….

C’est là que ça devient plus contraignant, comment faire fonctionner une même installation de WordPress dans plusieurs environnements ??

Un fichier par environnement

L’idée est assez simple : créer un fichier de config pour la production (wp-config.php) et un fichier supplémentaire pour chaque environnement (ex : wp-config-dev, wp-config-preprod, …). Chacun de ces fichiers contiennent les variables qui sont propre au contexte.

On peut imaginer des configurations qui ressemblent à peu près à ça :


Extrait du fichier wp-config.php (production)


 


Extrait du fichier wp-config-local.php


 

À noter dans ce dernier fichier les valeurs WP_SITE_URL et WP_HOME qui permettent de redéfinir l’adresse du site sans changer la valeur des options dans la base de données, plutôt pratique non ?

Utiliser wp-config.php comme gare de routage :

On a bien nos différents fichiers, mais il faut maintenant indiquer à WordPress lequel charger et quand. Pour cela on va modifier le fichier wp-config.php généré par WordPress en ajoutant les lignes suivantes (Bien sûr, adaptez ces lignes en fonction de vos besoins) :

 

Donc dans ce contexte, si aucun fichier spécifique à un environnement n’existe, WordPress charge le wp-config normalement, sinon il charge le fichier de l’environnement présent. On peut donc à partir de ce moment versionner le fichier de config de production sans soucis et sans pour autant se couper la possibilité d’avoir des variables d’environnement spécifiques au développement. Les fichiers wp-config-{env}.php sont bien sûr à ignorer dans le versionning afin de ne pas polluer de dépôt.

Une idée pour améliorer ce processus ? Vous faites complètement différemment ? N’hésitez pas à partager vos retours d’expériences !

Configurer une installation WordPress pour plusieurs environnements
Noter cet article

3 COMMENTAIRES

  1. Comme évoqué avec Jona sur le Slack FR, chez Be API nous utilisons également une méthode similaire pour avoir un projet versionné contenant tous les fichiers de configurations des différents environnements.
    Elle avait été présentée au WordCamp Paris 2016.
    Depuis, nous nous orientons le plus possible vers Composer pour la facilité d’utilisation et surtout la capacité à industrialiser la maintenance des plugins, themes, core, même s’il reste encore tout de même plusieurs fichiers de configurations à créer, par environnement.

  2. Effectivement, j’ai vu passer cet article du WordCamp Paris 2016 dont je me suis inspiré pour faire le plan de cet article 🙂
    C’est une super idée d’utiliser composer pour gérer le versioning du core, des plugins, etc… Par ailleurs j’avoue que je ne vois pas trop comment mettre ça en place au premier abord, est-ce que tu as une structure préconisée ? ça pourrait faire un super sujet d’article ici parce qu’à mon avis il y a plein de choses à dire là-dessus.
    Par contre je crois que l’on aura vraiment du mal à s’affranchir de la création du plusieurs fichiers de config pour gérer chaque environnement…

    • C’est le sujet de ma future conf, si elle tombe, au WP Tech de cette année, donc un peu de patience
      Mais clairement, Composer est un gain de temps immense. Il restera néanmoins toujours l’étape de « configuration » en créant les wp-config.
      Cela me fait penser que lorsque l’on est sur un infra type AWS (Amazon Web Services), tout est stocké dans une global PHP, donc plus besoin de créer plusieurs fichiers
      Pour répondre à ta question, tu trouvera un article très intéressant pour te lancer avec composer ici : https://roots.io/using-composer-with-wordpress