Chapitre 11.6 — Migrations & déploiement
⏱️ TL;DR — Un workflow pro sépare local → staging → production, versionne le code (Git, avec Composer pour les dépendances), et gère la base + les médias séparément du code. Le déploiement du code est automatisable (Git/CI, rsync, ou l’API de l’hébergeur) ; la base, elle, ne se « déploie » pas comme du code (elle contient des données de prod) — on gère les changements de schéma via l’
upgradedu plugin et on remonte rarement la base (sauf init). Les secrets restent hors du dépôt (env). Objectif : déployer sans casser, de façon réversible.
🎯 Objectifs
- Structurer un workflow local/staging/prod.
- Versionner correctement (code oui, base/uploads non).
- Gérer les changements de schéma (upgrade routine).
- Déployer proprement (et pouvoir revenir en arrière).
1. Trois environnements
- Local (ch. 4.1) : développement, tests.
- Staging : copie proche de la prod (mêmes versions, données récentes) pour valider avant mise en ligne (ch. 2.7).
- Production : le site public.
Le code remonte : local → staging → prod. Les données (base, uploads) redescendent souvent (prod → staging) pour tester sur des données réalistes.
⚠️ Piège n°1 — développer/tester en prod. Toute modification se valide d’abord en staging (ch. 2.7). Déployer directement en prod, c’est jouer avec les visiteurs et les données réelles.
2. Versionner : quoi, et quoi pas
| Élément | Versionné (Git) ? |
|---|---|
| Votre code (plugins/thème custom) | ✅ Oui |
| Dépendances gérées par Composer | ✅ (le composer.json/.lock) |
| Cœur WordPress + plugins/thèmes tiers | ➖ Idéalement via Composer (wpackagist), pas commités en dur |
wp-config.php (secrets) | ❌ Non (env/secret manager) |
wp-content/uploads/ (médias) | ❌ Non (stockage/sync séparé) |
| Base de données | ❌ Non (données ; gérée à part) |
Beaucoup d’équipes pros gèrent tout le projet avec Composer (le cœur + les plugins tiers comme dépendances, via wpackagist), ne versionnant que leur code + le manifeste. C’est le workflow qui rapproche WordPress d’un projet moderne (ch. 4.4).
⚠️ Piège n°2 — committer les secrets ou les uploads.
wp-config.php(identifiants/sels) etuploads/(gros, généré) n’ont rien à faire dans Git (ch. 4.2/4.4). Secrets = variables d’environnement / gestionnaire de secrets ; uploads = synchronisés séparément (rsync/S3).
3. La base : pas un « déploiement » comme le code
Le code peut être écrasé/remplacé ; la base de prod contient des données réelles (commandes, contenus, users) qu’on ne remplace pas par celle de dev. Donc :
- On ne « pousse » pas la base de dev/staging en prod (sauf initialisation), sous peine d’écraser les données réelles.
- Les changements de schéma (nouvelle table/colonne d’un plugin) se font via la routine d’upgrade du plugin, déclenchée par un numéro de version (comme les migrations) :
add_action( 'plugins_loaded', function () {
$installed = get_option( 'wpr_db_version' );
if ( $installed !== WPR_DB_VERSION ) {
wpr_run_upgrades( $installed ); // dbDelta, migrations de données…
update_option( 'wpr_db_version', WPR_DB_VERSION );
}
} );Ainsi, le schéma évolue par code (versionné, reproductible), tandis que les données de prod restent en place. C’est l’équivalent des migrations d’un ORM.
⚠️ Piège n°3 — écraser la base de prod. Importer un dump de staging en prod détruit les données créées entre-temps (nouvelles commandes, comptes…). Les changements de structure passent par une routine d’upgrade idempotente ; les données de prod ne se remplacent pas.
4. Déployer le code
- Git-based : push → CI (ch. 11.4) → déploiement (l’hébergeur tire le dépôt, ou un runner fait un
composer install+ build + rsync/SSH). - Build : compiler les assets (blocs, ch. 8.2 ;
npm run build) avant déploiement ; ne pas déployernode_modules. - Atomique/réversible : idéalement un déploiement atomique (symlink vers la nouvelle release) permettant un rollback instantané.
- Après déploiement : purger les caches (ch. 11.2), jouer les upgrades, vérifier (smoke test).
5. Checklist de mise en ligne
- Sauvegarde de la prod (code + base + uploads) — filet.
- Valider en staging (données proches de la prod).
- Déployer le code (build inclus), jouer la routine d’upgrade.
search-replacedes URLs si changement de domaine (ch. 2.6,wp search-replace).- Purger les caches, vérifier les permaliens (flush si CPT).
- Smoke test : pages clés, formulaires, paiement (Woo), HTTPS, e-mails.
- Surveiller les logs/erreurs après mise en ligne.
💡 Pour un dev React — Le principe est identique à vos déploiements : code versionné + build en CI + déploiement atomique + rollback, secrets en env, assets buildés. La différence WordPress est la base stateful de prod : on ne la traite pas comme du code (pas de « push » de la DB), on fait évoluer le schéma par migrations (routine d’upgrade) en préservant les données. Séparer « code (déployable) » et « données (préservées) » est la clé d’un déploiement WordPress sûr.
✏️ Exercices
- Pourquoi ne « pousse »-t-on pas la base de staging vers la prod (hors init) ?
- Comment fait-on évoluer le schéma d’un plugin sans écraser les données de prod ?
- Citez trois choses à ne pas versionner dans Git pour un projet WordPress.
✅ Solution
- Parce que la base de prod contient des données réelles créées en continu (commandes, contenus, comptes) : la remplacer par celle de staging les écrase/détruit. On préserve les données de prod ; seuls les changements de structure passent par le code.
- Via une routine d’upgrade déclenchée par un numéro de version de schéma (
wpr_db_version) : au chargement, si la version diffère, on exécute des migrations idempotentes (dbDelta, transformations) puis on met à jour la version — comme des migrations d’ORM. - Par exemple :
wp-config.php(secrets),wp-content/uploads/(médias),node_modules/(et le cœur/plugins tiers gérés via Composer plutôt que commités).
🧠 Quiz de révision
1. Quels sont les trois environnements d’un workflow pro ?
Local, staging (copie proche prod) et production.
2. La base de données se déploie-t-elle comme le code ?
Non : elle contient des données réelles ; on fait évoluer le schéma par routine d’upgrade, sans écraser les données de prod.
3. Comment gère-t-on un changement de schéma de plugin ?
Par une routine d’upgrade idempotente déclenchée par un numéro de version de schéma.
4. Où vivent les secrets lors d’un déploiement ?
En variables d’environnement/gestionnaire de secrets — jamais dans le dépôt.
5. Que faire juste avant une mise en ligne ?
Une sauvegarde complète (code + base + uploads) et une validation en staging.
Chapitre suivant : Accessibilité & i18n avancée.