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.
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.tralt 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ır —
web,apiile konuşuyorsa preprodwebde preprodapiile 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
- 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 - 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 - 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 - 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 - 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.