Loading...

CONTAINER APPS · CASO PRÁCTICO

Publique sin miedo: blue/green preprod ⇄ prod con un clic

Un flujo de trabajo real para un equipo que ejecuta una app en vivo en Managed Containers y quiere ciclos largos de deploy/prueba sin tocar production: cree una copia preprod, pruébela todo el tiempo que quiera en su propio subdominio, luego cambie el dominio en vivo hacia ella al instante — y revierta con la misma rapidez si algo se ve mal. Mostrado de dos formas: desde el panel de gestión, y con la CLI cdnctl.

← Volver a Ayuda de la plataforma

El escenario

ajansspor.com se ejecuta en Managed Containers (una container app de prod + un MySQL gestionado). El equipo quiere probar un cambio considerable durante días y luego salir en vivo en segundos con una reversión instantánea garantizada. Con blue/green nunca editamos la app de prod en ejecución: la clonamos a un entorno preprod, probamos ahí y luego movemos el dominio de production.

  • prod (blue) — la app en vivo que sirve ajansspor.com.
  • preprod (green) — un clon, accesible en su propio subdominio ca-*.cdn.com.tr.
  • Promover (Promote) mueve ajansspor.com de prod a preprod en segundos, sin tiempo de inactividad.
  • Revertir (Rollback) lo devuelve — y, para cambios de datos, restaura una instantánea automática de la base de datos.

Cuando el producto es más de una app (web + api + worker)

La mayoría de los productos reales son un stack, no un único contenedor. Blue/green funciona sobre todo el stack como una sola unidad: un proyecto es el conjunto de apps de su cuenta, y una sola acción clona, promueve o revierte todas juntas.

  • Create preprod from all apps clona cada app de prod (web, api, worker, …) en una copia preprod emparejada bajo un mismo proyecto.
  • Los enlaces entre apps se reconectan automáticamente — si web habla con api, el web de preprod habla con el api de preprod. El stack de preprod es autocontenido y nunca apunta de vuelta a production.
  • Promote (whole project) mueve el dominio de production de cada app a su copia preprod a la vez; Rollback (whole project) revierte todas ellas. Un cambio que abarca varios servicios se publica —o se deshace— como una sola unidad.
  • ¿Solo cambió un servicio? Use Create preprod / Promote de una sola app únicamente en esa app.

Cómo lo usaría videoonly: sus apps (front-end, API, workers) viven en una sola cuenta. Haría clic en Create preprod from all apps (estado shared para reutilizar la DB/Redis en vivo, o clone para probar una migración sobre datos copiados), validaría todo el stack en los subdominios ca-*, y luego Promote (whole project) para mover cada hostname de production a las nuevas versiones en segundos — con Rollback (whole project) como vía de escape instantánea.

State: qué comparte preprod con prod

Elija esto al crear el preprod (el --state / lista desplegable):

  • shared — preprod usa la misma DB/Redis gestionada y los mismos buckets de almacenamiento de objetos que prod (mediante referencias seguras entre apps; sin copia). Ideal para cambios de código/UI.
  • clone — preprod obtiene su propio MySQL gestionado con una copia de los datos de prod. Seguro para cambios de datos/esquema; los datos de prod no se tocan.
  • isolated — preprod arranca limpio.

Al hacer Promote, la plataforma toma primero una instantánea automática de la base de datos, de modo que Rollback también puede revertir los datos. Los archivos estáticos/media en un volumen persistente pueden compartirse (RWX) para que las subidas se mantengan consistentes.

Recorrido A — en el panel

  1. Abra su cuenta CDN → la pestaña PlatformsManaged Container Apps. El panel Blue/Green environments se encuentra justo encima de Your apps. (Si esta cuenta todavía sirve vía Pull/Push CDN y aún no tiene apps, primero haga clic en Enable Apps Alongside Current Delivery dentro de Platforms.)
    Panel Blue/Green environments encima de la lista de apps
    Panel Blue/Green environments encima de la lista de apps
  2. Elija un state y haga clic en Create preprod from all apps (todo el producto) — o Create preprod (single app) si solo cambió un servicio.
    Elija un state y luego “Create preprod from all apps” (todo el proyecto) — o cree uno para una sola app
    Elija un state y luego “Create preprod from all apps” (todo el proyecto) — o cree uno para una sola app
  3. La(s) app(s) de preprod aparecen emparejadas con prod bajo un mismo proyecto (cada una en su propio subdominio). Despliéguelas y pruébelas todo el tiempo que necesite — production sigue sirviendo tráfico sin ser tocada.
    El proyecto con sus apps prod y preprod, y Promote / Rollback de todo el proyecto
    El proyecto con sus apps prod y preprod, y Promote / Rollback de todo el proyecto
  4. Cuando esté listo, haga clic en Promote (whole project) → prod. Cada dominio de production cambia a su copia preprod en segundos.
    Promote (whole project) mueve cada dominio de production a su copia preprod
    Promote (whole project) mueve cada dominio de production a su copia preprod
  5. Si algo está mal, haga clic en Rollback (whole project) — el tráfico vuelve a las apps anteriores al instante (y se restaura la instantánea de la base de datos previa al promote). El botón Rollback aparece en el panel una vez que se ha ejecutado un promote.

Las capturas anteriores son capturas reales del panel en vivo de CDN.com.tr (Platforms → Managed Container Apps → Blue/Green environments).

Recorrido B — con cdnctl

El mismo flujo, programable de extremo a extremo. Una sola app:

# 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>

Todo el producto (proyecto multi-app) — los admins/ops lo ejecutan en el servidor con 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>

Las mismas acciones grupales están disponibles en el panel (el panel “Blue/Green environments”: Create preprod from all apps, Promote / Rollback (whole project)) y a través de la API de cliente (POST …/platform/container/project/{create-preprod,promote,rollback}). Bloques de bajo nivel: container-apps:switch-origin (mover un dominio) y container-apps:db clone|snapshot|restore (operaciones de datos de MySQL gestionado).

Por qué es seguro

  • Production nunca se edita en el sitio — usted construye y prueba en una app separada.
  • Instantáneo y reversible — Promote/Rollback es un cambio de titularidad de dominio (segundos), no una recompilación.
  • Los datos también son reversibles — Promote toma una instantánea automática de la base de datos; Rollback la restaura.
  • Por cuenta / por dominio — el DNS y el TLS no se ven afectados; el certificado de production permanece.

Consulte también la guía Entornos Blue/green.