Loading...

CONTAINER APPS · ÉTUDE DE CAS

Publiez sans crainte : blue/green preprod ⇄ prod en un clic

Un workflow réel pour une équipe qui exploite une application en production sur Managed Containers et souhaite des cycles de déploiement/test longs sans toucher à la production : construisez une copie preprod, testez-la aussi longtemps que vous le souhaitez sur son propre sous-domaine, puis basculez le domaine actif vers elle instantanément — et revenez en arrière tout aussi vite si quelque chose ne va pas. Présenté de deux façons : depuis le panneau de gestion, et avec la CLI cdnctl.

← Retour à l'aide de la plateforme

Le scénario

ajansspor.com tourne sur Managed Containers (une container app de prod + un MySQL managé). L'équipe veut tester un changement conséquent pendant plusieurs jours, puis passer en ligne en quelques secondes avec un rollback instantané garanti. Avec le blue/green, nous ne modifions jamais l'application prod en cours d'exécution : nous la clonons vers un environnement preprod, la testons là, puis basculons le domaine de production.

  • prod (blue) — l'application en ligne qui sert ajansspor.com.
  • preprod (green) — un clone, accessible sur son propre sous-domaine ca-*.cdn.com.tr.
  • Promote fait passer ajansspor.com de prod à preprod en quelques secondes, sans interruption.
  • Rollback le ramène en arrière — et, pour les changements de données, restaure un instantané automatique de la base de données.

Quand le produit est composé de plusieurs applications (web + api + worker)

La plupart des produits réels forment une stack, pas un seul conteneur. Le blue/green fonctionne sur toute la stack comme une seule unité : un project est l'ensemble des applications de votre compte, et une seule action clone, promeut ou fait un rollback de toutes à la fois.

  • Create preprod from all apps clone chaque application prod (web, api, worker, …) en une copie preprod appariée, au sein d'un même project.
  • Les liens application-à-application sont reconnectés automatiquement — si web parle à api, le web preprod parle à l'api preprod. La stack preprod est autonome et ne pointe jamais vers la production.
  • Promote (whole project) fait basculer d'un coup le domaine de production de chaque application vers sa copie preprod ; Rollback (whole project) les ramène toutes en arrière. Un changement qui touche plusieurs services passe en ligne — ou est annulé — comme une seule unité.
  • Un seul service a changé ? Utilisez Create preprod / Promote pour une seule application, sur cette application uniquement.

Comment videoonly utiliserait ceci : ses applications (front-end, API, workers) vivent dans un seul compte. Vous cliqueriez sur Create preprod from all apps (state shared pour réutiliser la DB/Redis en ligne, ou clone pour tester une migration sur des données copiées), valideriez toute la stack sur les sous-domaines ca-*, puis Promote (whole project) pour faire basculer chaque nom d'hôte de production vers les nouvelles versions en quelques secondes — avec Rollback (whole project) comme échappatoire instantanée.

State : ce que preprod partage avec prod

Choisissez ceci lors de la création du preprod (le --state / la liste déroulante) :

  • shared — preprod utilise les mêmes DB/Redis managés et buckets object-storage que prod (via des références sécurisées entre applications ; aucune copie). Idéal pour les changements de code/UI.
  • clone — preprod obtient son propre MySQL managé avec une copie des données de prod. Sûr pour les changements de données/schéma ; les données de prod ne sont pas touchées.
  • isolated — preprod démarre à vide.

Lors du Promote, la plateforme prend d'abord un instantané automatique de la base de données, afin que Rollback puisse aussi restaurer les données. Le contenu statique/média sur un volume persistant peut être partagé (RWX) pour que les téléversements restent cohérents.

Étape par étape A — dans le panneau

  1. Ouvrez votre compte CDN → l'onglet PlatformsManaged Container Apps. Le panneau Blue/Green environments se trouve juste au-dessus de Your apps. (Si ce compte sert encore via Pull/Push CDN et n'a pas encore d'applications, cliquez d'abord sur Enable Apps Alongside Current Delivery sous Platforms.)
    Le panneau Blue/Green environments au-dessus de la liste des applications
    Le panneau Blue/Green environments au-dessus de la liste des applications
  2. Choisissez un state et cliquez sur Create preprod from all apps (produit entier) — ou Create preprod (single app) si un seul service a changé.
    Choisissez un state, puis « Create preprod from all apps » (tout le projet) — ou créez-en un pour une seule application
    Choisissez un state, puis « Create preprod from all apps » (tout le projet) — ou créez-en un pour une seule application
  3. Les application(s) preprod apparaissent appariées avec prod au sein d'un même project (chacune sur son propre sous-domaine). Déployez et testez-les aussi longtemps que nécessaire — la production continue de servir le trafic sans être touchée.
    Le project avec ses applications prod et preprod, ainsi que Promote / Rollback pour tout le projet
    Le project avec ses applications prod et preprod, ainsi que Promote / Rollback pour tout le projet
  4. Une fois prêt, cliquez sur Promote (whole project) → prod. Chaque domaine de production bascule vers sa copie preprod en quelques secondes.
    Promote (whole project) fait basculer chaque domaine de production vers sa copie preprod
    Promote (whole project) fait basculer chaque domaine de production vers sa copie preprod
  5. Si quelque chose ne va pas, cliquez sur Rollback (whole project) — le trafic revient instantanément vers les applications précédentes (et l'instantané de la base de données pré-promote est restauré). Le bouton Rollback apparaît sur le panneau une fois qu'un promote a été exécuté.

Les captures d'écran ci-dessus sont de véritables captures du panneau CDN.com.tr en production (Platforms → Managed Container Apps → Blue/Green environments).

Étape par étape B — avec cdnctl

Le même flux, scriptable de bout en bout. Application unique :

# 1) Clone prod → preprod (shared add-ons; use --state clone for isolated DB+data)
cdnctl container apps create-preprod --account <uuid> --app <prod_app_uuid> --state shared

# 2) Deploy + test the preprod app on its own subdomain
cdnctl container apps deploy  --account <uuid> --app <preprod_app_uuid>
cdnctl container apps expose  --account <uuid> --app <preprod_app_uuid>
cdnctl container apps status  --account <uuid> --app <preprod_app_uuid>

# 3) Go live: move the production domain to preprod (instant, no downtime)
cdnctl container apps promote --account <uuid> --app <preprod_app_uuid>

# 4) If needed, roll back (traffic + pre-promote DB snapshot)
cdnctl container apps rollback-promotion --account <uuid> --app <prod_app_uuid>

Produit entier (project multi-applications) — les admins/ops l'exécutent sur le serveur avec artisan :

# Clone EVERY prod app in the account into a paired preprod (one project)
php artisan container-apps:env create-preprod --account <uuid> --all --state shared

# ... deploy & test each preprod app on its ca-* subdomain ...

# Promote the whole project (all production domains move together)
php artisan container-apps:env promote  --account <uuid> --project <project_uuid>

# Roll the whole project back (traffic + DB snapshots for every app)
php artisan container-apps:env rollback --account <uuid> --project <project_uuid>

Les mêmes actions groupées sont disponibles dans le panneau (le panneau « Blue/Green environments » : Create preprod from all apps, Promote / Rollback (whole project)) et via l'API client (POST …/platform/container/project/{create-preprod,promote,rollback}). Briques de bas niveau : container-apps:switch-origin (déplacer un domaine) et container-apps:db clone|snapshot|restore (opérations de données MySQL managé).

Pourquoi c'est sûr

  • La production n'est jamais modifiée sur place — vous construisez et testez sur une application séparée.
  • Instantané + réversible — Promote/Rollback est une bascule de propriété de domaine (quelques secondes), pas une reconstruction.
  • Les données sont réversibles aussi — Promote prend automatiquement un instantané de la base de données ; Rollback le restaure.
  • Par compte / par domaine — le DNS et le TLS ne sont pas affectés ; le certificat de production reste en place.

Voir aussi le guide Environnements Blue/green.