{"id":150,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/fr\/deployer-wordpress-sans-interruption-avec-trellis\/"},"modified":"2026-01-20T06:32:41","modified_gmt":"2026-01-20T05:32:41","slug":"deployer-wordpress-sans-interruption-avec-trellis","status":"publish","type":"post","link":"https:\/\/helloblog.io\/fr\/deployer-wordpress-sans-interruption-avec-trellis\/","title":{"rendered":"D\u00e9ployer WordPress sans interruption avec Trellis : le principe des d\u00e9ploiements atomiques"},"content":{"rendered":"\n<p>Dans l\u2019\u00e9cosyst\u00e8me WordPress, on voit encore tr\u00e8s souvent des mises en production via FTP, <code>rsync<\/code> ou des m\u00e9canismes \u201cone-click\u201d c\u00f4t\u00e9 h\u00e9bergeur. \u00c7a marche\u2026 jusqu\u2019au jour o\u00f9 un utilisateur tombe au mauvais moment sur un m\u00e9lange de fichiers anciens et nouveaux, ou qu\u2019un d\u00e9ploiement se passe mal et qu\u2019il faut improviser un retour arri\u00e8re.<\/p>\n\n\n\n<p>Trellis (le stack serveur + d\u00e9ploiement de Roots) apporte une approche beaucoup plus proche de ce qu\u2019on pratique sur des apps modernes : le <strong>d\u00e9ploiement atomique<\/strong>. Concr\u00e8tement, le site continue de r\u00e9pondre normalement pendant toute la pr\u00e9paration de la nouvelle release, puis on bascule <em>d\u2019un coup<\/em> sur la nouvelle version. Pas d\u2019\u00e9tat interm\u00e9diaire, pas de site \u201c\u00e0 moiti\u00e9 mis \u00e0 jour\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Z\u00e9ro downtime : de quoi parle-t-on exactement ?<\/h2>\n\n\n\n<p>Un d\u00e9ploiement \u201cz\u00e9ro downtime\u201d vise un objectif simple : <strong>le site reste accessible et fonctionnel pendant toute la mise en production<\/strong>. La nuance est importante : on ne parle pas seulement d\u2019\u00e9viter une coupure serveur, mais aussi d\u2019\u00e9viter les erreurs applicatives caus\u00e9es par un code d\u00e9ploy\u00e9 partiellement.<\/p>\n\n\n\n<p>Dans un d\u00e9ploiement classique WordPress, tu remplaces des fichiers \u00e0 la vol\u00e9e. Pendant quelques secondes (ou minutes), PHP peut charger une partie de l\u2019ancien code et une partie du nouveau. C\u2019est typiquement l\u00e0 qu\u2019apparaissent des erreurs fatales, des classes introuvables, ou des incoh\u00e9rences c\u00f4t\u00e9 assets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi les d\u00e9ploiements WordPress \u201ctraditionnels\u201d posent probl\u00e8me<\/h2>\n\n\n\n<p>Les strat\u00e9gies les plus courantes ont toutes le m\u00eame d\u00e9faut : elles modifient le code <strong>en place<\/strong> (in-place) alors que le site est en train de servir du trafic.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>FTP<\/strong> : upload manuel, \u00e9crasement des fichiers existants. C\u2019est lent et le risque d\u2019incoh\u00e9rence est \u00e9lev\u00e9 pendant l\u2019envoi.<\/li>\n\n\n<li><strong>Synchronisation (ex. <code>rsync<\/code>)<\/strong> : plus rapide, mais on reste sur de la copie\/\u00e9crasement pendant que l\u2019application tourne.<\/li>\n\n\n<li><strong>D\u00e9ploiement via plugin \/ outil de l\u2019h\u00e9bergeur<\/strong> : pratique, mais g\u00e9n\u00e9ralement sans vraie isolation de release ni m\u00e9canisme de rollback fiable et imm\u00e9diat.<\/li>\n\n<\/ul>\n\n\n\n<p>R\u00e9sultat : pendant la fen\u00eatre de d\u00e9ploiement, le site peut se comporter de mani\u00e8re impr\u00e9visible. Et si \u00e7a casse, le rollback d\u00e9pend souvent d\u2019une sauvegarde, d\u2019un zip, ou d\u2019un \u201con remet les fichiers d\u2019avant\u201d \u00e0 la main.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La solution Trellis : d\u00e9ploiements atomiques et immuables<\/h2>\n\n\n\n<p>Trellis applique une strat\u00e9gie <strong>atomique<\/strong> : la nouvelle version est pr\u00e9par\u00e9e dans un r\u00e9pertoire isol\u00e9, puis un simple switch (quasi instantan\u00e9) fait pointer le site vers cette nouvelle release.<\/p>\n\n\n\n<p>On parle aussi de d\u00e9ploiement <strong>immutable<\/strong> (immuable) : une fois une release d\u00e9ploy\u00e9e, ses fichiers ne sont pas modifi\u00e9s. Chaque d\u00e9ploiement cr\u00e9e un nouveau r\u00e9pertoire de release complet. \u00c7a change tout pour la fiabilit\u00e9\u2026 et pour le rollback.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La structure de r\u00e9pertoires sur le serveur<\/h3>\n\n\n\n<p>Lors d\u2019un d\u00e9ploiement, Trellis met en place une arborescence stable. Le serveur web (Nginx, dans Trellis) sert toujours le site via un r\u00e9pertoire <code>current\/<\/code> qui n\u2019est en r\u00e9alit\u00e9 qu\u2019un <strong>symlink<\/strong> (lien symbolique) vers la release active.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/srv\/www\/example.com\/\n\u251c\u2500\u2500 current\/             # Symlink vers la release active\n\u251c\u2500\u2500 releases\/            # Historique des releases d\u00e9ploy\u00e9es\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # La plus r\u00e9cente\n\u251c\u2500\u2500 shared\/              # \u00c9l\u00e9ments partag\u00e9s entre releases\n\u2502   \u2514\u2500\u2500 uploads\/\n\u2514\u2500\u2500 logs\/\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">\/srv\/www\/example.com\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> current\/<\/span><span style=\"color:#6A737D\">             # Symlink vers la release active<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> releases\/<\/span><span style=\"color:#6A737D\">            # Historique des releases d\u00e9ploy\u00e9es<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930124530\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930083045\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930141622\/<\/span><span style=\"color:#6A737D\">  # La plus r\u00e9cente<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> shared\/<\/span><span style=\"color:#6A737D\">              # \u00c9l\u00e9ments partag\u00e9s entre releases<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> uploads\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> logs\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Le point cl\u00e9, c\u2019est <code>current<\/code>. Tant que le symlink n\u2019a pas bascul\u00e9, tes visiteurs restent sur l\u2019ancienne release, intacte.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ce qui se passe lors d\u2019un <code>trellis deploy production<\/code><\/h3>\n\n\n\n<p>Quand tu lances la commande de d\u00e9ploiement, Trellis orchestre une suite d\u2019\u00e9tapes (automatis\u00e9es) pour construire une release compl\u00e8te avant de basculer.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>Initialize<\/strong> : v\u00e9rifie\/cr\u00e9e l\u2019arborescence et pr\u00e9pare un nouveau dossier de release horodat\u00e9.<\/li>\n\n\n<li><strong>Update<\/strong> : r\u00e9cup\u00e8re le dernier code depuis ton d\u00e9p\u00f4t Git dans un r\u00e9pertoire source s\u00e9par\u00e9 (hors du site servi).<\/li>\n\n\n<li><strong>Prepare<\/strong> : copie les fichiers vers le dossier de release cible.<\/li>\n\n\n<li><strong>Build<\/strong> : ex\u00e9cute <code>composer install<\/code> pour installer les d\u00e9pendances PHP.<\/li>\n\n\n<li><strong>Share<\/strong> : relie (symlink) les \u00e9l\u00e9ments partag\u00e9s \u2014 typiquement <code>uploads<\/code> \u2014 depuis <code>shared\/<\/code> vers la nouvelle release.<\/li>\n\n\n<li><strong>Finalize<\/strong> : bascule le symlink <code>current<\/code> vers la nouvelle release.<\/li>\n\n<\/ul>\n\n\n\n<p>Ce dernier point est la bascule atomique : on passe d\u2019une release \u00e0 l\u2019autre sans p\u00e9riode de \u201cmix\u201d entre deux versions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et la base de donn\u00e9es dans tout \u00e7a ?<\/h2>\n\n\n\n<p>Point \u00e0 ne pas rater : Trellis g\u00e8re le z\u00e9ro downtime c\u00f4t\u00e9 <strong>fichiers \/ code<\/strong>. En revanche, les changements de sch\u00e9ma en base (migrations) ne sont pas inclus automatiquement dans un d\u00e9ploiement Trellis.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Database migrations to a new schema are not included as part of a Trellis deploy.<\/p>\n<cite>Trellis documentation (Roots)<\/cite><\/blockquote>\n\n\n\n<p>Si tu utilises Acorn (le runtime Laravel-like pour WordPress c\u00f4t\u00e9 Roots), tu peux cr\u00e9er des migrations de style Laravel et les ex\u00e9cuter dans ton processus de d\u00e9ploiement, mais c\u2019est un sujet distinct : il faut g\u00e9rer la compatibilit\u00e9 entre ancienne et nouvelle version (migrations \u201cforward compatible\u201d, phase de transition, etc.).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback int\u00e9gr\u00e9 : revenir en arri\u00e8re en quelques secondes<\/h2>\n\n\n\n<p>L\u2019autre b\u00e9n\u00e9fice imm\u00e9diat des releases immuables, c\u2019est le <strong>rollback<\/strong>. Comme chaque version existe d\u00e9j\u00e0 sur disque, revenir \u00e0 la release pr\u00e9c\u00e9dente revient \u00e0\u2026 repointer <code>current<\/code> vers l\u2019ancien dossier.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>trellis rollback production\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">trellis<\/span><span style=\"color:#9ECBFF\"> rollback<\/span><span style=\"color:#9ECBFF\"> production<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Par d\u00e9faut, Trellis conserve les <strong>cinq<\/strong> releases les plus r\u00e9centes sur le serveur. En cas de souci apr\u00e8s d\u00e9ploiement (bug, d\u00e9pendance cass\u00e9e, config manquante), tu as une marche arri\u00e8re simple et rapide, sans restauration lourde.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hooks de d\u00e9ploiement : adapter Trellis \u00e0 ton pipeline<\/h2>\n\n\n\n<p>Dans la pratique, on a rarement un d\u00e9ploiement \u201cnu\u201d. Purge de cache, backup, notifications, smoke tests\u2026 Trellis expose des <strong>hooks<\/strong> (points d\u2019extension) pour injecter tes t\u00e2ches au bon moment. Un hook, ici, c\u2019est un m\u00e9canisme qui permet d\u2019ex\u00e9cuter des actions avant\/apr\u00e8s une \u00e9tape donn\u00e9e.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>deploy_build_before<\/code> \/ <code>deploy_build_after<\/code> : ajouter des \u00e9tapes de build (assets, validations, etc.).<\/li>\n\n\n<li><code>deploy_finalize_before<\/code> \/ <code>deploy_finalize_after<\/code> : t\u00e2ches juste avant\/apr\u00e8s la bascule (purge cache, warmup, etc.).<\/li>\n\n\n<li>Hooks par \u00e9tape majeure : initialize, update, prepare, build, share, finalize.<\/li>\n\n<\/ul>\n\n\n\n<p>\u00c7a permet notamment d\u2019automatiser des patterns utiles : sauvegarde de base avant d\u00e9ploiement, purge de caches applicatifs\/CDN, envoi de notifications \u00e0 l\u2019\u00e9quipe, ou ex\u00e9cution de smoke tests sur la release fra\u00eechement pr\u00e9par\u00e9e.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00e9marrer rapidement : Trellis juste pour le d\u00e9ploiement<\/h2>\n\n\n\n<p>L\u2019angle int\u00e9ressant, c\u2019est qu\u2019il n\u2019est pas n\u00e9cessaire d\u2019adopter Trellis pour tout ton workflow local. Beaucoup de teams l\u2019utilisent surtout pour profiter du d\u00e9ploiement atomique vers des h\u00e9bergeurs manag\u00e9s (par exemple Kinsta) ou via des outils comme RunCloud, tout en gardant leur environnement local habituel (Valet, Lando, DDEV, etc.).<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Structurer le projet avec <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a> (organisation plus propre d\u2019un projet WordPress).<\/li>\n\n\n<li>Installer <a href=\"https:\/\/roots.io\/trellis\/\">Trellis<\/a> et configurer les param\u00e8tres de d\u00e9ploiement.<\/li>\n\n\n<li>Renseigner <code>wordpress_sites.yml<\/code> avec les infos du d\u00e9p\u00f4t Git \u00e0 d\u00e9ployer.<\/li>\n\n\n<li>Lancer le d\u00e9ploiement en production avec <code>trellis deploy production<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<p>Le premier d\u00e9ploiement est g\u00e9n\u00e9ralement le plus long (mise en place de l\u2019arborescence, installation des d\u00e9pendances). Ensuite, les d\u00e9ploiements deviennent plus rapides \u2014 et surtout beaucoup plus pr\u00e9visibles c\u00f4t\u00e9 disponibilit\u00e9.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c0 retenir<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Le \u201cz\u00e9ro downtime\u201d c\u00f4t\u00e9 WordPress, c\u2019est surtout \u00e9viter l\u2019\u00e9tat interm\u00e9diaire o\u00f9 le site sert un m\u00e9lange de fichiers.<\/li>\n\n\n<li>Trellis y arrive via des releases isol\u00e9es et un symlink <code>current<\/code> qui bascule instantan\u00e9ment.<\/li>\n\n\n<li>Les releases \u00e9tant immuables, le rollback devient une op\u00e9ration simple et rapide.<\/li>\n\n\n<li>La base de donn\u00e9es reste un sujet \u00e0 part : migrations \u00e0 g\u00e9rer explicitement (Acorn peut aider).<\/li>\n\n\n<li>Les hooks de Trellis permettent d\u2019int\u00e9grer les \u00e9tapes indispensables \u00e0 un vrai pipeline de prod.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>R\u00e9f\u00e9rences \/ Sources<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/zero-downtime-wordpress-deployments-with-trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Zero Downtime WordPress Deployments with Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/docs\/deployments\/\" target=\"_blank\" rel=\"noopener noreferrer\">Deployments | Trellis Documentation<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/creating-and-running-laravel-migrations\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating and running Laravel migrations | Acorn Documentation<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>D\u00e9ployer un site WordPress en \u00e9crasant des fichiers \u201cen live\u201d, c\u2019est accepter un risque de pages cass\u00e9es et de rollback laborieux. Trellis applique une strat\u00e9gie moderne (d\u00e9ploiement atomique) pour basculer d\u2019une version \u00e0 l\u2019autre instantan\u00e9ment, sans downtime.<\/p>\n","protected":false},"author":13,"featured_media":149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68],"tags":[70,71,3,69,10],"class_list":["post-150","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infrastructure","tag-deploiement","tag-devops","tag-roots","tag-trellis","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":166,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/posts\/150\/revisions\/166"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/media\/149"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/fr\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}