Loading...

Case studyler

Docker ve Kubernetes Uygulamasını Managed Container App’e Taşıma

Mevcut Docker container, Kubernetes deployment veya mobil uygulama backendini CDN.com.tr Managed Container App’e; managed Redis, managed database, object storage, scheduled jobs, domain, SSL, CDN ve WAF ile taşıma rehberi.

Platform yardımına dön
Müşteri erişiminde olmayan araç yok

Bu akışta kubectl, SSH, artisan import komutu veya veritabanına doğrudan müdahale kullanılmaz. İç araçlar sadece CDN.com.tr ekibinin doğrulama ve debug tarafında kalır.

Panel UI akışı

1

CDN hesabı oluştur veya mevcut hesabı seç

Önce CDN.com.tr’ye müşteri kullanıcısı ile giriş yapın. Bu uygulama için daha önce oluşturulmuş bir CDN hesabı yoksa CDN Accounts veya kurulum sihirbazından yeni hesap oluşturun, ardından Platforms ekranına geçmeden önce bu hesabı seçin.

  • Kurulum sihirbazı CDN hesabı kabuğunu ve paket ilişkisini oluşturur.
  • Container App migration işlemi hesap oluştuktan sonra Platforms ekranından devam eder.
  • Final domain daha sonra bağlanacaksa api.example.com gibi servis domaini/placeholder ile ilerleyebilirsiniz.
2

Managed platform haklarını doğrula

Uygulamayı oluşturmadan önce Managed Container paket haklarında Container App, Redis, DB, Object Storage, persistent storage ve scheduled job hakkı olduğunu doğrulayın.

  • Redis veya DB hakkı 0 görünüyorsa import öncesi migration destekli paket/entitlement atanmalıdır.
  • Boot sırasında çok worker açan veya büyük DB init eden uygulamalarda Standard veya daha yüksek resource plan ile başlayın.
  • Public route yalnız DNS, SSL ve health check tamamlanınca CDN edge reverse proxy üzerinden açılır.
3

Migration Wizard başlat

Platformlar ekranından Container App oluşturma akışını açın ve kaynak tipini Existing Docker/Kubernetes app olarak düşünerek uygulama bilgilerini girin. Domain için mevcut delivery point seçin veya DNS hazır olana kadar custom domain boş ilerleyin.

  • Image: registry.example.com/acme/mobile-backend
  • Tag: 1.0.0
  • Port: 8080
  • Healthcheck: /health
4

Registry credential ekle

Docker Hub veya private registry için read-only token oluşturun ve Registry Credential alanına girin. Bu bilgi sadece image pull için kullanılır; uygulama env veya secret olarak verilmez.

5

Env değerlerini gir

Secret olmayan runtime ayarlarını Environment alanına KEY=VALUE formatında yazın.

  • PYTHONUNBUFFERED=1
  • PYTHONPATH=/app
  • MEDIA_ROOT=/app/data/media
  • THUMBS_ROOT=/app/data/thumbs
  • IMAGE_CDN_BASE_URL=https://api.example.com
  • APP_URL=https://api.example.com
  • LOG_LEVEL=INFO
6

Secret değerlerini gir

OpenAI, Meta, WhatsApp, WooCommerce, TikTok, kargo servisleri ve shipping sync token değerlerini masked Secret alanına girin. Bu değerler daha sonra GET cevaplarında gösterilmez.

7

Managed Redis aç

Managed Redis seçeneğini etkinleştirin. Host, port veya password girilmez; sistem REDIS_URL değerini uygulamaya secret/env olarak bağlar.

8

Managed DB ve dump import

Managed Database oluşturun, kaynak sistemden aldığınız .sql veya .sql.gz dump dosyasını DB Import alanından yükleyin. Import tamamlanmadan deploy public route açmaz. Import fail olursa düzeltilmiş dump dosyasını tekrar yüklemeden önce failed import kaydını cancel edin.

9

Persistent file archive import

/app/data için persistent storage açın, kaynak media/data arşivini .tar.gz olarak yükleyin ve target mount path değerini /app/data bırakın. Archive import fail olursa retry veya deploy öncesinde failed import kaydını cancel edin.

10

Scheduled job oluştur

order-shipping-sync jobunu disabled oluşturun, önce manuel run ile test edin, başarılıysa schedule enabled yapın.

  • Schedule: */30 * * * *
  • Method: POST
  • Path: /orders/shipping-sync/run?limit=200&min_stale_minutes=120
  • Secret header: X-Order-Shipping-Sync-Token
  • Secret source: ORDER_SHIPPING_SYNC_TOKEN
11

Review, deploy ve doğrula

Özet ekranında image, domain, Redis, DB, storage, secrets ve scheduled jobları kontrol edin. Deploy başlatın, operation timeline, status ve logs ekranlarından ilerlemeyi izleyin.

Credential ve import dosyaları nereden alınır?

Credential kaynakları

  • CDN.com.tr API token: Authorization / API Tokens ekranında oluşturulur ve sadece ilk anda görünür.
  • Docker registry token: registry sağlayıcısından read-only token olarak alınır.
  • OpenAI key: OpenAI dashboard API keys ekranından oluşturulur; eski key görüntülenemiyorsa rotate edilir.
  • Meta, WhatsApp, TikTok tokenları: ilgili developer portalından alınır ve gerektiğinde api.example.com gibi uygulama domaini callback/domain olarak eklenir.
  • WooCommerce key/secret: WordPress admin, WooCommerce, Settings, Advanced, REST API ekranından alınır.

Import dosyaları

  • DB dump: mysqldump, phpMyAdmin export, RDS export veya mevcut hosting panelinden alınır.
  • Persistent archive: upload/media/data klasörü .tar.gz olarak hazırlanır.
  • Shipping sync token: yeni random secret üretilebilir; app secret ve scheduled job header aynı değeri kullanır.
  • Production secret değerleri dokümana, loglara veya ticketlara yazılmaz.

Sık migration blokları

  • Redis veya DB limit exceeded alırsanız hesap paketi bu migration için hazır değildir; workaround olarak managed credential değerlerini görünür env alanına yazmayın.
  • DB/file import sırasında HTTP 413 alınırsa API validation izin verse bile web/PHP upload limiti arşiv boyutundan düşük kalmıştır.
  • Müşteri uygulamasına CDN üzerinden giden uploadlarda paket dosya boyutu da yeterli olmalıdır; edge config bu değeri nginx client_max_body_size olarak kullanır.
  • ErrImagePull genelde registry credential seçilmedi, eksik veya hatalı demektir. Kaydedilmiş read-only credential seçilip yeniden deploy edilmelidir.
  • Exit code 137 genelde memory yetersizliğidir. İlk deployda daha büyük planla başlayın veya worker sayısını azaltın.
  • waiting_dns, hostname henüz hazır bir CDN delivery point değil demektir. Public health beklemeden önce domaini Content Delivery Points altında ekleyip DNS/SSL sürecini tamamlayın.
  • S3 smoke testte put-object çalışıp head-object 403 verirse bucket/key sahipliğini ve CDN S3 passthrough route ayarını kontrol edin.

cdnctl ve AWS CLI ile terminal akışı

Terminal akışında ana araç cdnctl olur. Raw REST/curl örnekleri sadece API eşdeğerliği veya troubleshooting için, AWS CLI ise yalnız S3 uyumlu Object Storage doğrulaması için kullanılır.

Ana cdnctl akışı

cdnctl update --check
cdnctl login --email <customer@example.com> --password <password>
cdnctl accounts list
cdnctl container registry-credentials create --account <account_uuid> --name docker --registry-url https://index.docker.io/v1/ --username <user> --password <token>
cdnctl container apps create --account <account_uuid> --name mobile-backend --image registry.example.com/acme/mobile-backend --tag 1.0.0 --port 8080 --healthcheck /health --domain api.example.com --persistent-mount-path /app/data --persistent-storage-gb 5
cdnctl object-storage buckets create --account <account_uuid> --name app-media
cdnctl object-storage access-keys create --account <account_uuid> --bucket <bucket_uuid>
cdnctl object-storage bindings create --account <account_uuid> --app <app_uuid> --bucket <bucket_uuid> --access-key <key_uuid> --env-prefix S3
cdnctl container imports database --account <account_uuid> --app <app_uuid> --file app.sql.gz
cdnctl container imports files --account <account_uuid> --app <app_uuid> --file app-data.tar.gz --target-path /app/data
cdnctl container jobs create --account <account_uuid> --app <app_uuid> --name order-shipping-sync --schedule "*/30 * * * *" --method POST --path "/orders/shipping-sync/run?limit=200&min_stale_minutes=120" --secret-header-name X-Order-Shipping-Sync-Token --secret-source ORDER_SHIPPING_SYNC_TOKEN
cdnctl container apps deploy --account <account_uuid> --app <app_uuid>
cdnctl container apps wait --account <account_uuid> --app <app_uuid> --status running --timeout 300
cdnctl container apps status --account <account_uuid> --app <app_uuid>
cdnctl container apps logs --account <account_uuid> --app <app_uuid> --tail 100

AWS CLI ve public route doğrulaması

curl -fsS https://api.example.com/health
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required
export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required
aws --endpoint-url https://s3.cdn.com.tr s3api list-buckets
aws --endpoint-url https://s3.cdn.com.tr s3api put-object --bucket <bucket> --key smoke.txt --body ./smoke.txt
aws --endpoint-url https://s3.cdn.com.tr s3api head-object --bucket <bucket> --key smoke.txt