Loading...

CONTAINER APPS · VAKA ETÜDÜ

Korkmadan yayınlayın: tek tıkla blue/green preprod ⇄ prod

Managed Containers üzerinde canlı bir uygulama çalıştıran ve uzun deploy/test döngülerini production'a dokunmadan yürütmek isteyen bir ekibin gerçek iş akışı: bir preprod kopyası kurun, kendi alt alan adında dilediğiniz kadar test edin, sonra canlı alan adını ona anında geçirin — bir terslik görürseniz aynı hızla geri alın. İki yolla gösteriyoruz: yönetim panelinden ve cdnctl CLI ile.

← Platform Yardımı'na dön

Senaryo

ajansspor.com Managed Containers üzerinde çalışıyor (bir prod container app + yönetilen MySQL). Ekip büyükçe bir değişikliği günlerce test etmek, sonra saniyeler içinde ve garantili anlık geri almayla canlıya çıkmak istiyor. Blue/green ile çalışan prod uygulamasını asla yerinde düzenlemeyiz: preprod ortamına klonlar, orada test eder, sonra production alan adını taşırız.

  • prod (mavi) — ajansspor.com'u sunan canlı uygulama.
  • preprod (yeşil) — kendi ca-*.cdn.com.tr alt alan adından erişilen bir klon.
  • Yayına al (Promote), ajansspor.com'u saniyeler içinde, kesintisiz olarak prod'dan preprod'a taşır.
  • Geri al (Rollback) geri taşır — veri değişikliklerinde otomatik DB anlık görüntüsünü de geri yükler.

Ürün tek uygulamadan fazlaysa (web + api + worker)

Gerçek ürünlerin çoğu tek konteyner değil bir stack'tir. Blue/green tüm stack'i tek birim olarak ele alır: proje, hesabınızdaki uygulamalar kümesidir; tek bir işlem hepsini birlikte klonlar, yayına alır ya da geri alır.

  • Tüm uygulamalardan preprod oluştur, her prod uygulamasını (web, api, worker, …) tek proje altında eşleşmiş bir preprod kopyasına klonlar.
  • Uygulamalar arası bağlantılar otomatik yeniden bağlanırweb, api ile konuşuyorsa preprod web de preprod api ile konuşur. Preprod stack'i kendi içinde bütündür, asla production'a geri işaret etmez.
  • Yayına al (tüm proje) her uygulamanın production alan adını preprod kopyasına aynı anda taşır; Geri al (tüm proje) hepsini geri çevirir. Birden çok servise yayılan bir değişiklik tek birim olarak canlıya çıkar — ya da geri alınır.
  • Yalnızca bir servis mi değişti? Sadece o uygulamada tek-uygulama Preprod oluştur / Yayına al'ı kullanın.

videoonly bunu nasıl kullanırdı: uygulamaları (ön yüz, API, worker'lar) tek hesapta. Tüm uygulamalardan preprod oluştur'a tıklarsınız (canlı DB/Redis'i kullanmak için state shared, kopyalanmış veride migration test etmek için clone), tüm stack'i ca-* alt alan adlarında doğrular, sonra Yayına al (tüm proje) ile tüm production hostname'lerini saniyeler içinde yeni sürümlere taşırsınız — Geri al (tüm proje) her an elinizin altındaki acil çıkış.

State: preprod, prod ile neyi paylaşır

Bunu preprod'u oluştururken seçersiniz (--state / açılır liste):

  • shared — preprod, prod ile aynı yönetilen DB/Redis ve object-storage bucket'larını kullanır (güvenli çapraz-uygulama referanslarıyla; kopya yok). Kod/arayüz değişiklikleri için en iyisi.
  • clone — preprod, prod verisinin kopyasıyla kendi yönetilen MySQL'ini alır. Veri/şema değişiklikleri için güvenli; prod verisine dokunulmaz.
  • isolated — preprod temiz başlar.

Yayına al sırasında platform önce otomatik bir DB anlık görüntüsü alır; böylece Geri al veriyi de eski haline döndürebilir. Kalıcı disk üzerindeki statik/medya (RWX) paylaşılabilir; yüklemeler tutarlı kalır.

Adım adım A — panelden

  1. CDN hesabınızı açın → Platformlar sekmesi → Managed Container Apps. Blue/Green ortamları paneli Your apps'ın hemen üstündedir. (Bu hesap hâlâ Pull/Push CDN ile yayın yapıyorsa ve henüz uygulaması yoksa, önce Platformlar altında Enable Apps Alongside Current Delivery'e tıklayın.)
    Uygulama listesinin üstündeki Blue/Green ortamları paneli
    Uygulama listesinin üstündeki Blue/Green ortamları paneli
  2. Bir state seçip Tüm uygulamalardan preprod oluştur'a tıklayın (tüm ürün) — yalnızca bir servis değiştiyse Preprod oluştur (tek uygulama).
    State seçin, sonra “Tüm uygulamalardan preprod oluştur” (tüm proje) — ya da tek uygulama için oluşturun
    State seçin, sonra “Tüm uygulamalardan preprod oluştur” (tüm proje) — ya da tek uygulama için oluşturun
  3. preprod uygulama(lar)ı tek proje altında prod ile eşleşmiş görünür (her biri kendi alt alan adında). İhtiyacınız olduğu kadar deploy edip test edin — production trafiğe dokunulmadan sunmaya devam eder.
    Prod ve preprod uygulamalarıyla proje ve tüm-proje Yayına al / Geri al
    Prod ve preprod uygulamalarıyla proje ve tüm-proje Yayına al / Geri al
  4. Hazır olunca Yayına al (tüm proje) → prod'a tıklayın. Her production alan adı saniyeler içinde preprod kopyasına geçer.
    Yayına al (tüm proje) her production alan adını preprod kopyasına taşır
    Yayına al (tüm proje) her production alan adını preprod kopyasına taşır
  5. Bir terslik olursa Geri al (tüm proje)'ya tıklayın — trafik anında önceki uygulamalara döner (yayına-alma öncesi DB anlık görüntüsü geri yüklenir). Geri al düğmesi, bir yayına alma çalıştıktan sonra panelde belirir.

Yukarıdaki ekran görüntüleri canlı CDN.com.tr panelinin gerçek kayıtlarıdır (Platformlar → Managed Container Apps → Blue/Green ortamları).

Adım adım B — cdnctl ile

Aynı akış, uçtan uca betiklenebilir. Tek uygulama:

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

Tüm ürün (çok uygulamalı proje) — yöneticiler/ops sunucuda artisan ile çalıştırır:

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

Aynı grup işlemleri panelde (“Blue/Green ortamları” paneli: Tüm uygulamalardan preprod oluştur, Yayına al / Geri al (tüm proje)) ve müşteri API'sinde (POST …/platform/container/project/{create-preprod,promote,rollback}) mevcuttur. Alt seviye yapı taşları: container-apps:switch-origin (tek alan adını taşı) ve container-apps:db clone|snapshot|restore (yönetilen MySQL veri işlemleri).

Neden güvenli

  • Production asla yerinde düzenlenmez — ayrı bir uygulamada kurar ve test edersiniz.
  • Anlık + geri alınabilir — Yayına al/Geri al bir alan adı sahipliği anahtarıdır (saniyeler), yeniden derleme değil.
  • Veri de geri alınabilir — Yayına al DB'yi otomatik anlık görüntüler; Geri al onu geri yükler.
  • Hesap / alan adı başına — DNS ve TLS etkilenmez; production sertifikası yerinde kalır.

Ayrıca Blue/green ortamları rehberine bakın.