Loading...

Öğren / Deploy

Docker Compose ile Çok Servisli Uygulamayı Deploy Etme

Elinde web servisi, worker ve veritabanı olan bir docker-compose.yml mi var? cdn.com.tr onu yönetilen container app'lere ve add-on'lara dönüştürür — önce planı önizle, sonra tek komutla uygula. Küme işletmek yok, veritabanına dadılık etmek yok.

8 dk okuma Orta Güncellendi

Docker Compose ile Çok Servisli Uygulamayı Deploy Etme

Neye ihtiyacın var

Bir docker-compose.yml ile tanımlı bir uygulamaya — genelde bir web servisi, belki bir arka plan worker'ı ve veritabanı ile Redis gibi destek servisleri — ve bir cdn.com.tr hesabına ihtiyacın var. Kubernetes kümesi işletmeyecek, veritabanı sunucusu yönetmeyecek veya TLS'i elle bağlamayacaksın. cdn.com.tr compose dosyanı okur ve her parçayı yönetilen bir bileşene eşler: uygulama servisleri container app olur, Postgres, MySQL veya Redis gibi durumlu servisler ise yedeklenen ve bağlantı bilgileri uygulamalarına ortam değişkeni olarak verilen yönetilen add-on'lar olur.

Compose dosyan nasıl eşlenir

Fikir basit: trafik sunan veya kod çalıştıran her şey container app olur, veri saklayan her şey yönetilen add-on olur. Bir 'web' servisi alan adı olan bir app olur; bir 'worker' public port'u olmayan bir app olur; Postgres veya MySQL imajı kullanan bir 'db' yönetilen veritabanı olur; bir 'redis' servisi yönetilen Redis olur. Servislerin birbirleriyle isimle konuşmaya devam eder ve yönetilen add-on'ların bağlantı bilgileri uygulamalarına otomatik verilir — yani riskli, kendi kendine barındırdığın veritabanı container'ını silip işletmeyi platforma bırakırsın.

Örnek bir compose dosyası

İşte küçük, çok servisli bir uygulama: bir web API, bir arka plan worker'ı, bir Postgres veritabanı ve Redis. Bunu deponuna docker-compose.yml olarak ekle.

docker-compose.yml

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on: [db, redis]

  worker:
    build: .
    command: ["python", "worker.py"]
    depends_on: [db, redis]

  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: app

  redis:
    image: redis:7

Önce planı önizle

Bir şeyi değiştirmeden önce cdn.com.tr'ye ne oluşturacağını sor. Önizleme compose dosyanı okur ve planı gösterir: hangi servisler container app olur, hangileri yönetilen add-on olur ve nasıl bağlanırlar. Henüz hiçbir şey oluşturulmaz — sadece ne olacağını görürsün.

cdnctl — önizle
cdnctl login
cdnctl accounts use <account_uuid>

cdnctl container compose preview --file docker-compose.yml
# web, worker  -> container app
# db           -> yonetilen veritabani (postgres)
# redis        -> yonetilen redis

Uygula

Plandan memnun musun? Uygula. cdn.com.tr container app'leri ve add-on'ları oluşturur, bağlantı bilgilerini uygulamalarına bağlar ve her şeyi başlatır. Bunu panelden de yapabilirsin — compose dosyasını içe aktar, planı gözden geçir, onayla — ama tek komut onu CI'nda veya bir script'te tutar.

cdnctl — uygula
cdnctl container compose apply --file docker-compose.yml --yes

# sonra istedigin zaman:
cdnctl container apps list
cdnctl container apps logs --app <web_app_uuid> --tail 100

Alan adı, HTTPS ve edge

Alan adını web app'ine yönlendir; cdn.com.tr SSL'i otomatik alır ve yeniler. Servislerin artık CDN edge arkasında yönetilen app'ler olarak çalışır, önünde WAF vardır ve ani trafik edge'de karşılanır; veritabanı ve Redis yönetilir ve yedeklenir. Güncelleme yayınlamak için imajını yeniden derle ve tekrar uygula — hatalı bir build önceki sürümü ayakta tutar. Altında bir küme veya veritabanı işletmeden çok servisli, üretim düzeyinde bir deploy'a sahip olursun.

İyi uyan senaryolar

Web + worker + queue uygulamaları

Web katmanı, arka plan worker'ları ve veritabanı olan uygulamalar app'lere artı yönetilen add-on'lara temiz eşlenir.

Mevcut stack'i taşıma

Çalışan bir docker-compose.yml'in mi var? Deploy'unu sıfırdan kurmak yerine olduğu gibi içe aktar.

Önizle-sonra-uygula değişiklikleri

Önizleme, hiçbir şey çalışmadan ne değişeceğini tam gösterir — CI'dan veya bir script'ten güvenle kullanılır.

Docker Compose deploy — sık sorulanlar

docker-compose'u bir VM'de olduğu gibi mi çalıştırır?

Hayır — compose dosyanı yönetilen kaynaklara dönüştürür: servisler container app, durumlu servisler yönetilen add-on olur. Yani yamalanacak bir VM ve senin yerine işletilen, yedeklenen bir veritabanı olur; uygulaman aynı şekli korur.

Veritabanı ve Redis servislerime ne olur?

Bir Postgres, MySQL veya Redis servisi yönetilen bir add-on'a dönüşür. Compose dosyandaki container olduğu gibi çalıştırılmaz; bunun yerine yönetilen add-on bağlantı bilgilerini uygulamalarına ortam değişkeni olarak verir.

Uygulamadan önce ne olacağını görebilir miyim?

Evet. 'cdnctl container compose preview' hiçbir şey oluşturmadan tam planı gösterir — hangi servisler app olur, hangileri add-on olur ve nasıl bağlanırlar. Plan doğru göründüğünde uygula.