Takip et

Flask Uygulamasını Gunicorn ile App Platform’a Dağıtma Rehberi

Flask Uygulamasını Gunicorn ile App Platform’a Dağıtma Rehberi Giriş Modern web uygulamaları geliştirme sürecinde, hız, esneklik ve ölçek

Flask Uygulamasını Gunicorn ile App Platform’a Dağıtma Rehberi

Giriş

Modern web uygulamaları geliştirme sürecinde, hız, esneklik ve ölçeklenebilirlik temel öncelikler haline gelmiştir. Python ekosisteminde Flask, hafifliği ve sunduğu minimal yapı sayesinde birçok geliştirici tarafından tercih edilen popüler bir mikro web çerçevesidir. Ancak Flask’ın dahili geliştirme sunucusu, üretim ortamları için tasarlanmamıştır; bu noktada Gunicorn gibi bir WSGI (Web Server Gateway Interface) sunucusu devreye girer. Gunicorn, eşzamanlı istekleri yöneterek ve uygulamanın performansını artırarak Flask uygulamanızı üretim ortamına hazırlar. Dağıtım sürecini basitleştirmek ve altyapı yönetimi yükünü ortadan kaldırmak için ise DigitalOcean’ın App Platform’u gibi tam yönetilen bir Platform as a Service (PaaS) çözümü idealdir.

Bu makalede, Flask uygulamanızı Gunicorn kullanarak DigitalOcean App Platform’a nasıl dağıtacağınızı adım adım detaylı bir şekilde inceleyeceğiz. Bu rehber sayesinde, uygulamanızın geliştirme ortamından canlıya geçiş sürecini sorunsuz ve verimli bir şekilde tamamlayabileceksiniz. Amacımız, hem teorik bilgiyi hem de pratik uygulama adımlarını bir araya getirerek, bu süreci baştan sona anlamanızı ve kendi projelerinizde uygulayabilmenizi sağlamaktır.

Ön Koşullar

Bu rehbere başlamadan önce, aşağıdaki araçlara ve hesaplara sahip olduğunuzdan emin olmalısınız:

* Python 3.x ve pip: Python programlama dilinin ve paket yöneticisi pip’in sisteminizde kurulu olması gerekmektedir.
* Flask ve Gunicorn: Bu paketler, projeniz için bir sanal ortamda kurulacaktır.
* Git: Versiyon kontrol sistemi Git’in bilgisayarınızda kurulu ve yapılandırılmış olması, projenizi bir Git deposuna göndermeniz için zorunludur.
* DigitalOcean Hesabı: Uygulamanızı dağıtmak için aktif bir DigitalOcean hesabına ihtiyacınız olacak.
* GitHub/GitLab/Bitbucket Hesabı: Uygulama kodunuzu barındırmak için bu platformlardan birinde bir uzak depo (remote repository) gereklidir. App Platform, bu depolardan otomatik olarak kodunuzu çeker.
* (İsteğe Bağlı) doctl CLI: DigitalOcean’ın komut satırı arayüzü doctl, uygulamaları otomatize edilmiş bir şekilde dağıtmak ve yönetmek için kullanılabilir. Bu makalede hem kontrol paneli üzerinden hem de doctl ile dağıtım yöntemlerine değineceğiz.

Flask Uygulaması Oluşturma

İlk adım olarak, dağıtacağımız basit bir Flask uygulaması oluşturalım. Bu uygulama, App Platform’a dağıtım sürecini göstermek için yeterli olacaktır.

Proje Dizini ve Sanal Ortam Oluşturma

Öncelikle projeniz için bir dizin oluşturun ve bu dizine gidin:

mkdir my_flask_app
cd my_flask_app

Şimdi, projenizin bağımlılıklarını izole etmek için bir Python sanal ortamı oluşturalım ve etkinleştirelim. Sanal ortamlar, farklı projeler için farklı bağımlılık setlerini yönetmenizi sağlar ve sistem genelindeki Python kurulumunuzu temiz tutar.

python3 -m venv venv
source venv/bin/activate # Linux/macOS

veya

.\venv\Scripts\activate # Windows

Sanal ortam etkinleştirildikten sonra, komut isteminizin başında (venv) gibi bir ibare görmelisiniz.

Flask ve Gunicorn Kurulumu

Sanal ortam etkin durumdayken, Flask ve Gunicorn’u kuralım:

pip install Flask gunicorn

Basit Bir Flask Uygulaması (app.py)

Proje dizininizde app.py adında bir dosya oluşturun ve içine aşağıdaki kodu ekleyin:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Merhaba, App Platform!'

@app.route('/about')
def about():
    return 'Bu bir Flask uygulamasıdır ve DigitalOcean App Platform üzerinde çalışmaktadır.'

if __name__ == '__main__':
    app.run(debug=True)

Bu kod, iki basit rota içeren minimal bir Flask uygulamasıdır: kök dizin (/) “Merhaba, App Platform!” mesajını döndürürken, /about rotası uygulama hakkında bilgi verir. if __name__ == '__main__': bloğu, uygulamayı doğrudan çalıştırdığınızda Flask’ın dahili geliştirme sunucusunu başlatır.

Bağımlılıklar Dosyası (requirements.txt)

App Platform (veya herhangi bir PaaS) uygulamanızı dağıtırken hangi bağımlılıkları yüklemesi gerektiğini bilmelidir. Bunun için requirements.txt dosyasını kullanırız. Mevcut ortamınızda yüklü olan paketleri bu dosyaya kaydedelim:

pip freeze > requirements.txt

Bu komut, Flask ve gunicorn paketlerinin sürümleriyle birlikte requirements.txt dosyasını oluşturacaktır.

Proje dizininiz şu şekilde görünmelidir:

my_flask_app/
├── venv/
├── app.py
└── requirements.txt

Gunicorn ile Uygulamayı Yerelde Çalıştırma

Flask’ın kendi sunucusu geliştirme amacıyla harika olsa da, üretim ortamlarında kullanılması önerilmez. Üretim ortamları için tasarlanmış Gunicorn (Green Unicorn), eşzamanlı istekleri daha verimli bir şekilde yönetebilir, daha sağlam ve performanslı bir çözüm sunar.

Gunicorn Neden Gereklidir?

Flask, bir WSGI uygulamasıdır. WSGI, Python web sunucuları ile Python web uygulamaları arasında standart bir arayüz tanımlar. Flask’ın dahili sunucusu tek iş parçacıklı (single-threaded) ve tek işlemlidir (single-process), bu da aynı anda yalnızca bir isteği işleyebileceği anlamına gelir. Yüksek trafikli bir üretim ortamında bu durum ciddi performans sorunlarına yol açabilir.

Gunicorn gibi bir WSGI sunucusu ise birden fazla worker süreci (işçi süreci) oluşturarak eşzamanlı istekleri paralel olarak işleyebilir. Bu, uygulamanızın daha fazla kullanıcıya hizmet vermesini ve daha kararlı çalışmasını sağlar. Gunicorn, aynı zamanda uygulamanızın çökmesi durumunda worker süreçlerini yeniden başlatma gibi özelliklerle de uygulamanın dayanıklılığını artırır.

Gunicorn ile Yerel Test

Sanal ortamınız hala etkin durumdayken, Gunicorn’u kullanarak Flask uygulamanızı yerel olarak çalıştırabiliriz:

gunicorn -w 4 app:app

Bu komutu inceleyelim:

* gunicorn: Gunicorn sunucusunu başlatır.
-w 4: Dört adet worker süreci kullanmasını belirtir. Worker sayısı genellikle CPU çekirdek sayınızın iki katı artı bir olarak önerilir (örneğin, 2 çekirdekli bir sistem için 22+1 = 5 worker). Ancak bu, uygulamanızın iş yüküne ve sunucunuzun kaynaklarına göre ayarlanmalıdır.
* app:app: Gunicorn’a hangi WSGI uygulamasını çalıştırması gerektiğini söyler. Buradaki ilk app, app.py dosyamızın adıdır (modül adı). İkinci app ise, bu modül içinde Flask uygulamasını temsil eden Flask(__name__) ile oluşturduğumuz değişkenin adıdır.

Komutu çalıştırdıktan sonra, Gunicorn’un 8000 numaralı portta dinlemeye başladığını gösteren bir çıktı görmelisiniz. Tarayıcınızda http://127.0.0.1:8000 adresine giderek uygulamanızın çalıştığını doğrulayabilirsiniz. http://127.0.0.1:8000/about adresini de kontrol etmeyi unutmayın.

DigitalOcean App Platform Hakkında

DigitalOcean App Platform, geliştiricilerin kodlarını dağıtmak, çalıştırmak ve ölçeklendirmek için tasarlanmış tam yönetilen bir Platform as a Service (PaaS) çözümüdür. Altyapı yönetimiyle uğraşmak yerine, geliştiricilerin sadece kod yazmaya odaklanmasını sağlar.

App Platform’un Avantajları:

* Otomatik Derleme ve Dağıtım: Kodunuzu bir Git deposuna (GitHub, GitLab, Bitbucket) bağladığınızda, App Platform kodunuzdaki değişiklikleri otomatik olarak algılar, derler ve dağıtır.
* Yönetilen Altyapı: Sunucu yapılandırması, işletim sistemi güncellemeleri, güvenlik yamaları gibi altyapısal görevlerle uğraşmanıza gerek kalmaz. DigitalOcean bu işleri sizin için yönetir.
* Otomatik Ölçeklendirme: Uygulamanızın trafik yüküne göre otomatik olarak yatay (daha fazla örnek) veya dikey (daha güçlü örnekler) ölçeklenebilir.
* Ücretsiz SSL Sertifikaları: Uygulamalarınız için otomatik olarak ücretsiz SSL sertifikaları sağlar, böylece güvenli HTTPS bağlantıları kurabilirsiniz.
* Yerleşik CI/CD: Her kod commit’i ile otomatik dağıtım, sürekli entegrasyon ve sürekli dağıtım (CI/CD) süreçlerini basitleştirir.
* Çeşitli Bileşen Tipleri: Web servisleri, worker’lar, statik siteler, veritabanları ve cron işleri gibi farklı uygulama bileşenlerini destekler.
* Maliyet Etkinliği: Kullanımınıza göre ödeme yaparsınız ve başlangıç seviyesi projeler için genellikle uygun fiyatlı seçenekler sunar.

App Platform, uygulamanızın dilini veya çerçevesini (örneğin Python, Node.js, Go, PHP, Ruby) otomatik olarak algılamak için buildpack’leri kullanır. Python uygulamaları için, requirements.txt dosyasını ve Procfile‘ı tarayarak gerekli bağımlılıkları yükler ve uygulamanızı çalıştırır.

Uygulamayı DigitalOcean App Platform’a Hazırlama

Uygulamamızı App Platform’a dağıtmadan önce son bir adım olarak, App Platform’a uygulamanın nasıl çalıştırılacağını bildirmemiz gerekiyor.

Procfile Oluşturma

Procfile, uygulamanızın farklı süreç türlerini (web, worker, vb.) nasıl başlatması gerektiğini tanımlayan basit bir metin dosyasıdır. App Platform, Python uygulamaları için bu dosyayı otomatik olarak arar. Proje dizininizin kökünde Procfile adında bir dosya oluşturun (dosya uzantısı yok) ve içine aşağıdaki satırı ekleyin:

web: gunicorn -w ${WEB_CONCURRENCY:-4} app:app

Bu satır:

* web: Bu sürecin bir web servisi olduğunu belirtir. App Platform, HTTP isteklerini bu sürece yönlendirecektir.
* gunicorn -w ${WEB_CONCURRENCY:-4} app:app: Gunicorn’u başlatma komutumuzdur. Burada WEB_CONCURRENCY bir ortam değişkenidir. Eğer App Platform bu değişkeni ayarlamazsa (varsayılan olarak ayarlamaz), Gunicorn 4 worker ile çalışacaktır. Bu, uygulamanızın worker sayısını App Platform arayüzünden veya app.yaml dosyasından kolayca yapılandırmanıza olanak tanır.

Git Deposuna Gönderme

App Platform, kodunuzu bir Git deposundan çekeceği için, projenizi bir Git deposuna eklemeli ve uzak bir depoya göndermelisiniz.

1. Git deposunu başlat: Proje dizininizde (sanal ortamın dışında) aşağıdaki komutları çalıştırın:

git init

2. .gitignore dosyası oluştur (isteğe bağlı ama şiddetle tavsiye edilir): Sanal ortam dosyaları gibi gereksiz dosyaların depoya yüklenmesini engellemek için .gitignore dosyası oluşturun.

venv/
    __pycache__/
    .DS_Store
    *.pyc

3. Dosyaları ekle ve commit et:

git add .
    git commit -m "Initial Flask app for App Platform deployment"

4. Uzak depo oluştur ve push et: GitHub, GitLab veya Bitbucket gibi bir platformda yeni bir boş depo oluşturun. Ardından, yerel deponuzu bu uzak depoya bağlayın ve kodunuzu gönderin. Örneğin, GitHub için:

git branch -M main
    git remote add origin https://github.com/your-username/my-flask-app.git # Kendi depo URL'nizle değiştirin
    git push -u origin main

Kodunuz artık uzak depoda ve App Platform’a dağıtılmaya hazır.

DigitalOcean App Platform’a Dağıtım

Uygulamanızı App Platform’a dağıtmanın iki ana yolu vardır: DigitalOcean kontrol paneli üzerinden veya doctl CLI aracıyla. Her iki yöntemi de adım adım inceleyelim.

Yöntem 1: DigitalOcean Kontrol Paneli Üzerinden Dağıtım

Bu yöntem, yeni başlayanlar için daha görsel ve kolaydır.

1. DigitalOcean Hesabına Giriş: DigitalOcean kontrol panelinize giriş yapın.
2. Yeni Uygulama Oluştur: Sol kenar çubuğundaki menüden “Apps” seçeneğine tıklayın, ardından “Create App” veya “Launch Your First App” düğmesine basın.
3. Kaynak Seçimi: Uygulama kodunuzun bulunduğu Git sağlayıcısını seçin (GitHub, GitLab veya Bitbucket). Eğer daha önce yetkilendirmediyseniz, DigitalOcean’ın Git hesabınıza erişimi için yetkilendirme yapmanız istenecektir.
4. Depo ve Branch Seçimi: Açılır listeden az önce oluşturduğunuz my_flask_app deposunu ve main (veya kullandığınız branch) branch’ini seçin. “Next” düğmesine tıklayın.
5. Kaynak Yapılandırması: App Platform, deponuzu tarayacak ve Python uygulamanızı otomatik olarak algılayacaktır. Bir web servisi olarak yapılandırma önerisi göreceksiniz.
* Resource Type: “Web Service” olarak kalmalıdır.
* Name: Uygulamanız için benzersiz bir isim girin (örneğin, my-flask-app).
* Source: Git deponuz ve branch’iniz burada görünmelidir.
* Build Command: App Platform, Python uygulamaları için genellikle pip install -r requirements.txt komutunu otomatik olarak algılar. Bu komut, bağımlılıkları yüklemek için kullanılır.
* Run Command: Procfile dosyanızdaki komut ( gunicorn -w ${WEB_CONCURRENCY:-4} app:app) burada otomatik olarak görünmelidir. Eğer görünmüyorsa, manuel olarak girebilirsiniz.
* HTTP Port: Varsayılan olarak 8080 olarak ayarlanmalıdır. App Platform, gelen istekleri otomatik olarak bu porta yönlendirir.
* Environment Variables: Uygulamanız için herhangi bir ortam değişkeni ayarlamanız gerekiyorsa (örneğin, veritabanı bağlantı dizeleri, API anahtarları), bu bölümde “Add” düğmesine tıklayarak ekleyebilirsiniz. Bu konuya daha sonra değineceğiz.
* “Next” düğmesine tıklayın.
6. Uygulama Bilgileri ve Dağıtım:
* Name: Uygulamanızın genel adını onaylayın.
* Project: Uygulamanızı atamak istediğiniz DigitalOcean projesini seçin.
* Region: Uygulamanızı dağıtmak istediğiniz bölgeyi seçin. Kullanıcılarınıza en yakın bölgeyi seçmek gecikmeyi azaltır.
* Plan: Uygulamanız için bir plan seçin (Basic, Professional). Başlangıç için “Basic” plan yeterli olacaktır. Bu planlar, uygulamanızın kaynaklarını (CPU, RAM) ve maliyetini belirler.
* “Create Resources” düğmesine tıklayın.

App Platform şimdi uygulamanızın derleme ve dağıtım sürecini başlatacaktır. Bu işlem birkaç dakika sürebilir. İşlem tamamlandığında, uygulamanızın genel bir URL’si (örneğin, my-flask-app-xxxx.ondigitalocean.app) size sunulacaktır. Bu URL’yi tarayıcınızda açarak uygulamanızın canlıda çalıştığını doğrulayabilirsiniz.

Yöntem 2: doctl CLI ile Dağıtım (Gelişmiş Yöntem)

doctl, DigitalOcean kaynaklarınızı komut satırından yönetmek için güçlü bir araçtır. Uygulama dağıtımlarını otomatikleştirmek veya CI/CD boru hatlarına entegre etmek için idealdir.

1. doctl Kurulumu: doctl henüz kurulu değilse, DigitalOcean’ın resmi belgelerinden işletim sisteminize uygun kurulum adımlarını takip edin.
2. doctl Yetkilendirme: doctl‘ı DigitalOcean hesabınızla yetkilendirin:

doctl auth init

Bu komut, bir tarayıcı açacak ve DigitalOcean kontrol panelinde bir API token’ı oluşturmanızı isteyecektir. Token’ı kopyalayıp terminale yapıştırın.
3. app.yaml Dosyası Oluşturma: Uygulamanızın yapılandırmasını tanımlayan bir app.yaml dosyası oluşturun. Bu dosya, kontrol panelindeki adımları kod olarak temsil eder. Proje dizininizin kökünde app.yaml adında bir dosya oluşturun:

name: my-flask-app-cli
    region: nyc3 # Uygulamanızı dağıtmak istediğiniz bölgeyi seçin (örneğin, nyc3, fra1)
    services:
    - name: web
        git:
        branch: main
        repo: https://github.com/your-username/my-flask-app # Kendi depo URL'nizle değiştirin
        build_command: pip install -r requirements.txt
        run_command: gunicorn -w ${WEB_CONCURRENCY:-4} app:app
        environment_variables:
        - key: FLASK_ENV
            scope: RUN_TIME
            value: production
        routes:
        - path: /

Bu app.yaml dosyasında:
* name: Uygulamanızın benzersiz adı.
* region: Uygulamanın dağıtılacağı DigitalOcean bölgesi.
* services: Uygulamanın bileşenlerini tanımlar.
* name: web: Web servis bileşenimiz.
* git: Depo bilgilerini içerir.
* build_command: Uygulama derlenirken çalışacak komut.
* run_command: Uygulama başlatıldığında çalışacak komut.
* environment_variables: Ortam değişkenleri tanımlanır. FLASK_ENV değişkenini production olarak ayarladık.
* routes: Gelen isteklerin hangi yola yönlendirileceğini belirtir.
4. Uygulamayı Dağıtma: app.yaml dosyasını kullanarak uygulamayı dağıtın:

doctl apps create --spec app.yaml

Eğer uygulamayı güncellemek isterseniz (örneğin, app.yaml dosyasında değişiklik yaptınız), uygulamanızın ID’sini almanız ve aşağıdaki komutu kullanmanız gerekir:

doctl apps list # Uygulamanızın ID'sini almak için
    doctl apps update  --spec app.yaml

doctl komutu, dağıtım sürecini başlatacak ve tamamlandığında size uygulamanızın URL’sini ve durumunu gösterecektir.

Ortam Değişkenleri Yönetimi

Üretim ortamlarında hassas bilgileri (veritabanı şifreleri, API anahtarları, gizli anahtarlar vb.) doğrudan kod içine yazmak büyük bir güvenlik riskidir. Ortam değişkenleri, bu tür bilgileri uygulamanızdan ayrı tutmanın ve güvenli bir şekilde yönetmenin standart yoludur.

DigitalOcean App Platform, ortam değişkenlerini kolayca ayarlamanıza olanak tanır:

* Kontrol Paneli Üzerinden: Uygulamanızın bileşen ayarlarına gidin. “Environment Variables” bölümünde “Add” düğmesine tıklayarak yeni değişkenler ekleyebilirsiniz. Her değişken için bir anahtar (Key), bir değer (Value) ve bir kapsam (Scope) belirtmeniz gerekir.
* Scope:
* BUILD_TIME: Değişken, uygulamanın derleme (build) aşamasında kullanılabilir.
* RUN_TIME: Değişken, uygulamanın çalışma (runtime) aşamasında kullanılabilir. Hassas bilgiler genellikle RUN_TIME kapsamında olmalıdır.
* Encrypt: Hassas değerleri şifrelemek için bu seçeneği işaretleyebilirsiniz.
* app.yaml ile: Yukarıdaki app.yaml örneğinde gösterildiği gibi, environment_variables altında anahtar-değer çiftleri olarak tanımlayabilirsiniz.

Uygulamanız içinde bu ortam değişkenlerine Python’da os.environ.get('YOUR_VARIABLE_NAME') kullanarak erişebilirsiniz.

import os

secret_key = os.environ.get('FLASK_SECRET_KEY', 'default_secret_key_for_dev')
database_url = os.environ.get('DATABASE_URL')

Uygulamanızda bu değişkenleri kullanabilirsiniz

Logları İzleme ve Hata Ayıklama

Uygulamanız canlıya alındıktan sonra, performansını ve sağlığını izlemek, olası sorunları tespit etmek ve hata ayıklamak kritik öneme sahiptir. App Platform, bu süreçleri kolaylaştıran kapsamlı günlük (log) ve izleme araçları sunar.

Loglara Erişim

DigitalOcean kontrol panelinde uygulamanızın sayfasına gittiğinizde, her bir bileşen (web servisi, worker, veritabanı vb.) için ayrı log akışlarını göreceksiniz.

* Build Logs: Uygulamanızın derleme aşamasında (bağımlılıkların yüklenmesi, kodun derlenmesi) oluşan çıktıları ve hataları gösterir. Eğer uygulamanız dağıtılamıyorsa, ilk bakmanız gereken yer burasıdır.
* Runtime Logs: Uygulamanızın çalışma zamanında ürettiği tüm çıktıları (örneğin, print() ifadeleri, Flask’ın hata mesajları, Gunicorn’un erişim logları) gösterir. Uygulamanızın beklenmedik davranışlar sergilemesi veya çökmesi durumunda bu loglar size yol gösterecektir.

Logları gerçek zamanlı olarak takip edebilir veya geçmiş logları inceleyebilirsiniz.

Yaygın Hatalar ve Çözümleri

* Uygulama Başlatılamıyor (Procfile Hatası):
* Sorun: Procfile dosyası doğru yerde değil (proje kökünde olmalı), dosya adı yanlış yazılmış (Procfile yerine procfile veya Procfile.txt), veya içindeki komut hatalı.
* Çözüm: Procfile adının ve içeriğinin doğru olduğundan emin olun. Gunicorn komutunun yerel olarak çalıştığını doğrulayın.
* Bağımlılık Yükleme Hatası:
* Sorun: requirements.txt dosyası eksik, yanlış biçimlendirilmiş veya eksik bağımlılıklar içeriyor.
* Çözüm: pip freeze > requirements.txt komutunu kullanarak requirements.txt dosyasını yeniden oluşturun ve tüm gerekli paketlerin orada olduğundan emin olun.
* Port Hatası:
* Sorun: Uygulamanızın 8080 numaralı portta dinlemediği bir durum. App Platform, web servislerinden 8080 portunda dinlemesini bekler.
* Çözüm: Gunicorn komutunuzun varsayılan olarak 8080 portunda dinlediğinden emin olun. Genellikle gunicorn komutu varsayılan olarak 8000 portunu kullanır. Eğer Procfile‘ınızda port belirtmezseniz, App Platform genellikle Gunicorn’u 8080’e yönlendirir. Ancak emin olmak için gunicorn -b 0.0.0.0:8080 -w ${WEB_CONCURRENCY:-4} app:app şeklinde açıkça belirtebilirsiniz.
* Ortam Değişkeni Eksikliği:
* Sorun: Uygulamanızın ihtiyaç duyduğu bir ortam değişkeni App Platform’da ayarlanmamış veya yanlış yazılmış.
* Çözüm: Uygulamanızın ihtiyaç duyduğu tüm ortam değişkenlerinin App Platform kontrol panelinde veya app.yaml dosyasında doğru anahtar ve değerlerle tanımlandığından emin olun. RUN_TIME kapsamına dikkat edin.
* Git Deposu Senkronizasyon Sorunları:
* Sorun: En son kod değişiklikleriniz App Platform’a yansımıyor.
* Çözüm: Kodunuzu uzak Git deponuza git push ile başarıyla gönderdiğinizden emin olun. App Platform’daki dağıtım geçmişini kontrol edin ve yeni bir dağıtım tetiklemeyi deneyin.

Ölçeklendirme ve Performans İpuçları

Uygulamanızın kullanıcı sayısı arttıkça veya iş yükü yoğunlaştıkça, performansını korumak ve kesintisiz hizmet vermek için ölçeklendirme hayati önem taşır. DigitalOcean App Platform, bu konuda esnek ve güçlü araçlar sunar.

App Platform’da Ölçeklendirme Seçenekleri

1. Dikey Ölçeklendirme (Vertical Scaling):
* Uygulamanızın mevcut örneklerinin (instance) CPU ve RAM gibi kaynaklarını artırmayı ifade eder. App Platform’da, uygulamanızın web servisi veya worker bileşeninin planını (örneğin, Basic’ten Professional’a veya daha yüksek bir boyuta) değiştirerek bunu yapabilirsiniz. Daha güçlü bir plan, daha fazla işlem gücü ve bellek sağlar.
2. Yatay Ölçeklendirme (Horizontal Scaling):
* Uygulamanızın çalışan örneklerinin sayısını artırmayı ifade eder. Her örnek, uygulamanızın ayrı bir kopyasını çalıştırır ve gelen trafiği bu örneklere dağıtarak yükü paylaşır. App Platform, web servisleri için birden fazla instance çalıştırmanıza olanak tanır.
* Otomatik Ölçeklendirme: App Platform, uygulamanızın CPU kullanımı veya gelen HTTP isteği sayısı gibi metrikleri izleyerek otomatik olarak yeni örnekler ekleyebilir veya gereksiz örnekleri kaldırabilir. Bu, trafik dalgalanmalarına dinamik olarak yanıt vermenizi sağlar ve maliyetleri optimize etmenize yardımcı olur. Kontrol panelinde uygulamanızın bileşen ayarlarında otomatik ölçeklendirme kurallarını yapılandırabilirsiniz.

Gunicorn Worker Sayısı Ayarlama

Gunicorn’un worker sayısı, uygulamanızın eşzamanlı istekleri ne kadar iyi işleyebileceğini doğrudan etkiler. Optimal worker sayısı, uygulamanızın doğasına (CPU yoğun mu, I/O yoğun mu), sunucunuzun kaynaklarına ve beklenen trafik yüküne bağlıdır.

Genel Kural: Genellikle, CPU çekirdek sayınızın iki katı artı bir worker önerilir (2 CPU_Çekirdeği + 1). Örneğin, 2 çekirdekli bir sunucuda 5 worker.
* WEB_CONCURRENCY Ortam Değişkeni: Procfile‘ımızda kullandığımız ${WEB_CONCURRENCY:-4} yapısı, App Platform’da bu değişkeni ayarlamanıza olanak tanır. App Platform kontrol panelinden veya app.yaml dosyasından WEB_CONCURRENCY adlı bir ortam değişkeni tanımlayarak Gunicorn’un worker sayısını dinamik olarak ayarlayabilirsiniz. Bu, uygulamanızı yeniden dağıtmadan worker sayısını değiştirebilmeniz anlamına gelir.

Diğer Performans İpuçları

* Veritabanı Entegrasyonu: Eğer uygulamanız bir veritabanı kullanıyorsa, DigitalOcean Managed Databases (PostgreSQL, MySQL, Redis) ile entegrasyonu düşünebilirsiniz. Yönetilen veritabanları, performans, yedekleme ve güvenlik gibi konularda size büyük kolaylıklar sağlar. Uygulamanız ile veritabanı arasındaki bağlantı, App Platform’un otomatik olarak sağladığı güvenli iç ağ üzerinden gerçekleşir.
* Statik Dosyalar ve CDN: Flask uygulamaları genellikle HTML, CSS, JavaScript ve resimler gibi statik dosyalar sunar. Bu dosyaları doğrudan Flask üzerinden sunmak yerine, App Platform’daki “Static Site” bileşenini kullanarak veya bir Content Delivery Network (CDN) entegre ederek uygulamanızın performansını artırabilirsiniz. Bu, web servisinizin yükünü azaltır ve son kullanıcılar için daha hızlı yükleme süreleri sağlar.
* Önbellekleme: Uygulamanızda sıkça erişilen veriler veya sayfalar için önbellekleme stratejileri uygulayın (örneğin, Redis veya Memcached kullanarak). Bu, veritabanı sorgularının veya pahalı hesaplamaların tekrar tekrar yapılmasını önler.

Sonuç

Bu kapsamlı rehberde, Flask uygulamanızı Gunicorn ile DigitalOcean App Platform’a dağıtmanın tüm adımlarını detaylı bir şekilde inceledik. Flask’ın esnekliği, Gunicorn’un üretim ortamı sağlamlığı ve App Platform’un yönetilen PaaS yetenekleri bir araya geldiğinde, geliştiriciler için güçlü, ölçeklenebilir ve bakımı kolay web uygulamaları oluşturmanın yolu açılır.

Artık basit bir Flask uygulamasını nasıl oluşturacağınızı, Gunicorn ile yerel olarak nasıl test edeceğinizi, uygulamanızı App Platform’a dağıtım için nasıl hazırlayacağınızı (özellikle Procfile kullanımı), DigitalOcean kontrol paneli veya doctl CLI aracılığıyla nasıl dağıtacağınızı, ortam değişkenlerini nasıl yöneteceğinizi, logları nasıl izleyip hata ayıklayacağınızı ve son olarak uygulamanızın performansını ve ölçeklenebilirliğini nasıl optimize edeceğinizi biliyorsunuz.

DigitalOcean App Platform, altyapı yönetimi yükünü ortadan kaldırarak geliştiricilerin ana işlerine, yani harika uygulamalar yazmaya odaklanmasını sağlar. Bu rehberdeki bilgileri kullanarak, kendi Flask projelerinizi güvenle canlıya taşıyabilir ve modern web geliştirmenin sunduğu tüm avantajlardan yararlanabilirsiniz. Unutmayın, her dağıtım bir öğrenme sürecidir ve sürekli izleme ve iyileştirme, başarılı bir üretim uygulamasının anahtarıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.