Bir FastAPI uygulaması nasıl dağıtılır?

How to Deploy an FastAPI Application_
How to Deploy an FastAPI Application_

Çok sayıda barındırma sağlayıcısı olsa da, sadece birkaçı Python barındırmayı desteklemek için Ortak Ağ Geçidi Arayüzü (CGI) veya mod_wsgi modülü sunuyor. Ancak 2023 Stack Overflow Geliştirici Anketi‘ne katılan geliştiriciler arasında Docker ile konteynerleştirme, uygulama geliştirme ve dağıtımı için başı çekiyor.

FastAPI gibi bir çerçeve kullanılarak geliştirilen Python uygulamaları için, bir Hizmet Olarak Konteyner (CaaS) aracılığıyla dağıtım, kodunuzu GitHub’ a göndermek kadar basittir. Bu blogda, FastAPI uygulamanızı dockerize etmeyi ve bir CaaS aracılığıyla dağıtmayı öğreneceksiniz.

Önemli Çıkarımlar

  • Docker ve FastAPI güçlü bir ikilidir; bağımlılıklar dahil olmak üzere kolaylaştırılmış, paketlenmiş dağıtımlara izin verirler.
  • FastAPI, asenkron işlemler, veri doğrulama ve OpenAPI konularında üstündür ancak topluluk desteği ve uyumluluk konusunda yetersiz kalmaktadır.
  • Back4app, FastAPI dağıtımını kolaylaştırıyor, otomatik güncellemeler için GitHub ile senkronize oluyor ve bulut veritabanı kurulumu sunuyor.

FastAPI nedir?

FastAPI, RESTful API’ler geliştirmek için hafif, açık kaynaklı bir Python web çerçevesidir. 2018’de piyasaya sürülen Pydantic modelini ve Starlette’i destekleyerek Node.js ve Golang ile aynı performans seviyesine yerleştirir. Çerçeve ayrıca özelleştirilebilir ve kod tabanınızı esnek bir şekilde tasarlamanıza olanak tanır.

Python’un 3.6 ve sonraki sürümlerinde JSON Schema ve type-hinting desteği ile Pydantic modeli FastAPI’nin verileri kolayca ayrıştırmasına ve çalışma zamanında doğrulamasına olanak tanır.

Starlette çerçevesi FastAPI’ye Asenkron Sunucu Ağ Geçidi Arayüzünü (ASGI) ekler; bu, Python RESTful API’lerinde asenkron işlemler gerçekleştirmenize ve kodunuzu Uvicorn ASGI sunucusunda çalıştırmanıza olanak tanır.

Node.js’deki Nodemon gibi, Uvicorn sunucusu API rotalarındaki değişiklikleri dinler ve her güncelleme için çalışma zamanını yeniden başlatır.

2023 Stack Overflow Geliştirici Anketi ‘ne katılan geliştiricilerin yalnızca %7,42’si FastAPI kullandığını belirtmiş olsa da, bu yazı yazıldığı sırada GitHub toplam kullanıcı sayısını 203 bin olarak gösteriyor. Bu yazının yazıldığı sırada 498’den fazla katılımcısı ve 190 sürümü bulunan FastAPI, sürekli güncellemeler ve yamalar alıyor.

Ancak FastAPI’yi Golang ve Node.js ile aynı performans seviyesine getirmekgeliştiriciler arasında hala bir tartışma konusu.

Diğerleri aynı fikirde olsa da, bazıları Python web geliştirme için önemli bir gelişme olmasına rağmen, FastAPI’nin hala her ikisinin performansıyla karşılaştırılamayacağını savunuyor.

FastAPI’nin Avantajları

  • Asenkron işlemler için destek: Python’un varsayılan senkron işlemlerinin yanı sıra FastAPI, async/await kullanan fonksiyon bildirimlerini de destekler. WebSocket desteği de sağlayan Starlette sayesinde. Bu, programınıza eşzamanlılık katarak uygulamanızın veritabanı sorguları gibi daha yavaş işlemleri beklerken diğer işlemleri gerçekleştirmesine olanak tanır.
  • Veri doğrulama desteği: Pydantic BaseModel’i kullanan FastAPI, verileri ayrıştırırken katılığı korumak için Python’un veri türü ipuçlarından yararlanır. Bu, yanlış veri türünün veritabanına girmesini önler. Bu nedenle, ekstra doğrulama kütüphaneleri gerektiren dinamik modellerin aksine, model doğrulama FastAPI’de basittir ve kolayca kullanılabilir.
  • Tamamen standartlaştırılmıştır: FastAPI, web üzerinden HTTP API’leri sunmaya yönelik OpenAPI spesifikasyonuyla uyumludur ve tüketici uygulamaları ile istemcilerin kullanmak istedikleri bir API’yi anlamalarını kolaylaştırır. Kaputun altında, test ve canlı kullanıcı tarafından gönderilen verilerin veritabanına gönderilmeden önce geçerli olmasını sağlamak için JSON Schema bildirimini de kullanır.
  • Esneklik: Django’nun aksine FastAPI, geliştiriciyi belirli bir kod tabanı mimari standardıyla sınırlamaz. Bunun yerine, bu kararı geliştiriciye bırakır. Bu nedenle, kod tabanınızı esnek adlandırma kurallarıyla tasarlayabilir ve genel uygulama ayarlarını ve birim test paketlerini hareket halindeyken bildirebilirsiniz. Kod modülerleştirme ve ilgi alanı ayrımı (SOC) da basittir.

    Ve önerdiğimiz gibi nesne yönelimli programlama (OOP) kullanıyorsanız, modellerinizi uç nokta sınıflarınızda kolayca oluşturabilirsiniz. Oluştururken, API uç noktalarını rotalarınıza eklemek de kolaydır.
  • Kolay bir öğrenme eğrisine sahiptir: Flask ve Django gibi çerçevelerden daha küçük bir kullanıcı topluluğuna sahip olmasına rağmen FastAPI, kapsamlı dokümantasyonu ve öğreticileriyle öne çıkıyor. Özellikle Python veya JavaScript’te bir geliştirme geçmişine sahipseniz, kolayca öğrenebilirsiniz. Genel basitliği ve esnekliği daha hızlı geliştirme süreçlerine katkıda bulunur.

Sınırlamalar

  • Düşük topluluk desteği: FastAPI’nin Django veya Flask kadar çok kullanıcısı yok. Hala nispeten yeni. Dolayısıyla topluluk desteği daha düşüktür; bu özellikle yeni geliştiriciler için zorlayıcı olabilir.
  • Sınırlı sürüm uyumluluğu: FastAPI, Python 3.6’dan başlayarak yalnızca Python’un sonraki sürümlerini destekler. Bu nedenle, 3.6’dan önceki Python sürümlerini çalıştıran makineler veya sunucular, FastAPI’yi başarıyla yüklemek ve çalıştırmak için yükseltme yapmalıdır.

FastAPI Dağıtım Seçenekleri

Hizmet olarak altyapı (IaaS) ve hizmet olarak konteyner (CaaS), uygulamaların dağıtımı için ölçeklenebilir bulut altyapılarıdır.

Bir FastAPI uygulamasını sanal özel sunucu (VPS) veya paylaşımlı barındırma yoluyla dağıtabilirsiniz, ancak hiçbiri bir IaaS veya CaaS kadar ölçeklenebilir değildir.

IaaS

IaaS, bulutta isteğe bağlı bilgi işlem kaynakları sağlayan bir platformdur. Uygulamanız için bir dağıtım sunucusu kurmak için gereken tüm sanallaştırılmış kaynakları, genellikle kullandıkça öde temelinde sunar.

Bilgi işlem altyapısına ek olarak, bir IaaS depolama ve yük dengeleyiciler, VPN’ler, güvenlik duvarları, DNS yönetimi ve daha fazlası gibi diğer ağ kaynaklarını içerir. Bilgi işlem ortamınızı yönetmekten siz sorumlusunuz ve uygulamanızın gereksinimlerine uyacak şekilde kaynaklarını özelleştirebilir veya ölçeklendirebilirsiniz.

CaaS

CaaS, uygulamanızı bulutta konteynerler olarak dağıtmanıza olanak tanıyan bir hizmet olarak platformdur (PaaS). Bir IaaS’ın aksine, bir CaaS uygulamanızı kaputun altında barındırmak için gereken tüm hesaplama temelini yönetir.

Bunlar arasında konteyner çalışma zamanı ortamı, orkestrasyon, depolama, yük dengeleme ve daha fazlası yer alır. Böylece, altyapı yönetimiyle uğraşmak yerine uygulamanızı oluşturmaya odaklanabilirsiniz.

Uygulamanızı bir konteyner olarak dağıttığınız için, teknik yapılandırmalar hakkında endişelenmeden CI/CD entegrasyonunu kolaylaştırır. Bu, uygulama sürümünü ve güncellemelerini daha hızlı hale getirir.

FAST API Dağıtım Süreci

Ön koşullardan başlayarak dağıtım sürecini adım adım inceleyelim. Ancak FastAPI uygulamamızı Back4App konteynerlerini kullanarak dağıtacağımız için, devam etmeden önce bunların neler olduğunu hızlıca görelim.

Back4app Konteynerlerine Genel Bakış

Back4App Containers, dockerized uygulamaları bulutta hızlı bir şekilde dağıtmanıza olanak tanıyan bir bulut platformudur. Platform, GitHub deponuzla senkronize olur ve her sürüm yayınladığınızda dağıtımınızı otomatik olarak günceller. Bu şekilde, manuel konteyner güncellemelerini ve sunucu kesinti sürelerini ortadan kaldırmaya yardımcı olur.

Back4App Containers ile yalnızca kodunuzu ve sonraki sürümlerinizi yerel makinenizden GitHub’a göndermeniz yeterlidir ve platform, kaputun altında konteyner görüntüsü düzenlemesini gerçekleştirir. Back4App ayrıca gerçek zamanlı dağıtım takibi ve gerçek zamanlı günlük kaydı özelliklerine de sahiptir.

Böylece, dağıtım adımlarını izleyebilir ve varsa hata noktasını belirleyebilirsiniz. Ve uygulamanız çalışma zamanında çökerse (Python gibi yorumlanan bir dil için bu olabilir), gerçek zamanlı günlük kaydı, hataları hızlı bir şekilde düzeltmek için konsolda izlemenize yardımcı olur.

İşte Back4App’ın temel özellikleri:

  • Back4App uygulamanızı GitHub’daki kod tabanı deponuzla kolayca senkronize edin.
  • Kodunuzu ve sonraki güncellemelerinizi GitHub deponuza göndererek uygulamanızı bir Back4App konteyneri aracılığıyla buluta dağıtın.
  • Tek ihtiyacınız olan bir Docker dosyası. Back4App sizin için tüm bağımlılık kurulumlarını gerçekleştirir.
  • Dağıtım ve sonraki sürümler sırasında ortam değişkenlerinizi kolayca şifreleyin.
  • Dağıtımları gerçek zamanlı olarak izleyin ve geri dönüşleri yönetin.
  • Uygulama kullanım geçmişinizi gerçek zamanlı günlüklerle izleyin.
  • Mobil ve web uygulamalarını buluta dağıtın

Python’u İndirin ve Kurun

Biz bu blogda Python 3.10.6 kullanacağız. Ancak siz 3.6’dan daha eski olmayan herhangi bir Python sürümünü kullanabilirsiniz. İşletim sisteminiz için en son uyumlu Python sürümünü indirmek ve yüklemek için python.org adresine gidin – eğer henüz yapmadıysanız. Aksi takdirde, bu bölümü görmezden gelin.

Python açılış sayfası indirme

İndirdikten sonra, kurulum dosyasına tıklayın ve Python’u yerel makinenize kurmak için ekrandaki talimatları izleyin.

Python ‘u sistem değişkeni yolunuza eklemek için Python.exe’yi PATH ‘e ekle seçeneğini işaretlediğinizden emin olun; bu, Python ‘u komut satırı üzerinden çalıştırılabilir hale getirir.

Python kurulum menüsü

Eğer bir Mac kullanıyorsanız, varsayılan olarak Python 2.7 ile gelmektedir. Bunu terminal üzerinden Homebrew kullanarak en son sürüme güncelleyebilirsiniz:

brew install python3

Python sürümünüzü kontrol etmek için terminalinizde aşağıdaki komutu çalıştırın.

python --version

Python Sanal Ortamını Etkinleştirme ve FastAPI Yükleme

Ardından, yeni bir proje dizini oluşturun ve komut satırını bu klasöre açın. Ardından venv kullanarak bir Python sanal ortamını etkinleştirin.

Bu paket Python ile birlikte gelir ve kurulum gerektirmez. Python bağımlılıklarını global olarak yüklemek yerine tek başına yönetmenizi sağlar.

Sanal bir ortam oluşturmak için aşağıdaki komutu terminal üzerinden çalıştırın ve env_name yerine tercih ettiğiniz ortamın adını yazın.

py -m venv env_name

Sanal ortamı etkinleştirmek için aşağıdaki komutu çalıştırın.

.\env_name\Scripts\activate

FastAPI ve Uvicorn’u yükleyin

Bir sonraki adım, FastAPI çerçevesini ve Uvicorn sunucu çalışma zamanını etkin sanal ortama yüklemektir. Bu aynı zamanda Pydantic ve Starlette’i de yükler.

Proje kök dizininizde bir requirements.txt dosyası oluşturun ve aşağıda gösterildiği gibi kurulacak paketleri girin.

fastapi
uvicorn

Aşağıda VSCode’daki gösterim yer almaktadır. İhtiyaç duyulduğunda bu dosyaya daha fazla bağımlılık ekleyebilirsiniz.

VS kodu ile gereksinimler

Listelenen bağımlılıkları yüklemek için terminal üzerinden aşağıdaki komutu çalıştırın. Sanal ortamın hala etkin olduğundan emin olun.

pip install install -r requirements.txt

Komut, belirtilen paketi aşağıda gösterildiği gibi yükler.

Komut satırı bağımlılık kurulumu

Kurulduktan sonra, aşağıdaki komutu kullanarak requirements.txt dosyasını güncelleyin:

pip freeze > requirements.txt

Yukarıdaki komut, requirements.txt dosyasının üzerine doğru sürüm numaraları da dahil olmak üzere kurulu bağımlılıkları yazar. Sanal ortamınıza yeni bir bağımlılık yüklediğinizde bunu yaptığınızdan emin olun.

Gereksinimler.txt dosyası güncellemeden sonra şu şekilde görünür:

Proje Tanıtımı

Basit bir “Hello World” FastAPI uygulaması yazacağız ve ücretsiz Back4App Containers kullanarak dağıtacağız. Projeniz karmaşıksa endişelenmeyin. Dağıtım aynı adımı atar ve ayrıca ne olursa olsun ücretsiz aylık çalışma süresi elde edersiniz.

Ancak, uygulamanız günlük olarak çok sayıda istek alıyorsa, ziyaretçilerinize sıfır kesinti süresiyle daha sorunsuz bir kullanıcı deneyimi sunmak için dağıtımdan sonra yükseltme yapmak isteyebilirsiniz.

Uygulama Kodu

Proje kök klasörünüzde yeni bir router dizini oluşturun ve bu dizinin içinde bir main.py dosyası oluşturun. Bu dosya uygulama API uç noktalarınızı ve yönlendiricinizi yönetir. Zaten dağıtılacak bir projeniz varsa aşağıdaki bölüme geçin.

İşte “Merhaba Dünya” kodu:

from fastapi import FastAPI, APIRouter
import uvicorn

app = FastAPI()
class HelloWorld():
    def read_hello(self):
        return {"data": "Hello World"}
router = APIRouter()
router.add_api_route('/api/v2/hello-world', 
endpoint = HelloWorld().read_hello, methods=["GET"])
app.include_router(router)

if __name__ == "__main__":
   uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)

uvicorn sunucusunu çalıştırmak ve hello-world API uç noktasını test etmek için main.py dosyasını komut satırı üzerinden çalıştırın:

python main.py

Bu, geliştirme sunucusunu belirtildiği gibi 8000 numaralı bağlantı noktasında başlatır.

Bu bir GET isteği olduğu için, herhangi bir web tarayıcısında doğrudan test edebiliriz. Sonuç aşağıdadır.

Uygulamayı Dockerize Edin

Ardından, proje kök klasörünüzde bir Dockerfile oluşturun. Bunu VS Code’da yeni bir dosya oluşturup Dockerfile olarak adlandırarak yapabilirsiniz.

Oluşturulduktan sonra, bir Docker görüntüsü oluşturmak için aşağıdaki komutları yazın:

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "router.main:app", "--host", "0.0.0.0", "--port", "8000"]

GitHub’a itin

GitHub hesabınıza gidin ve Depolar‘a gidin. Sağ üstteki Yeni seçeneğine tıklayarak yeni bir depo başlatın.

GitHub hesabınıza gidin ve Depolar’a gidin. Sağ üstteki Yeni seçeneğine tıklayarak yeni bir depo başlatın.

Kodunuzu GitHub’a zaten gönderdiyseniz, Docker dosyasını yerel makinenizdeki kopyaya ekleyin ve deponuza yeniden gönderin.

Yeni repo GitHub

Deponuza bir ad verin ve sağ alttaki Depo oluştur ‘a tıklayın.

Ardından, gösterildiği gibi init komutunu kullanarak yerel bir depoyu başlatın:

git init

Deponuza göndermemek için .gitignore kullanarak venv klasörünü ve .env dosyanızı yoksayabilirsiniz. Bunu yapmak için, proje kök klasörünüzde bir .gitignore dosyası oluşturun ve aşağıda gösterildiği gibi yok saymak istediğiniz klasörleri ve dosyaları girin.

Kodunuzu deponuza göndermek için terminaliniz üzerinden aşağıdaki komutları birbiri ardına çalıştırın.

1. git add .
2. git commit -m "commit message"
3. git branch -m main
4. git remote add origin <URL of the created repository>
5. git push -u origin main

Uygulamayı Back4App Konteyneriyle Dağıtın

Henüz yapmadıysanız, yeni bir Back4App hesabı oluşturduğunuzdan emin olun. Süreci hızlandırmak için Google veya GitHub oturum açma seçeneğini kullanın.

Back4app Kaydolun

Oturum açtıktan sonra Yeni uygulama oluştur widget’ına tıklayın.

Yeni uygulama kontrol paneli Back4App

Hizmet Olarak Kapsayıcılar’a gidin.

Hizmet Olarak Konteynerler

Sonraki sayfada GitHub Repo’yu İçe Aktar‘a tıklayın. İstendiğinde GitHub’a Back4App’ı yetkilendirmesi için izin verin.

Açılan modalde Depo erişimi altında Depoları seç‘e tıklayın. Dağıtmak istediğiniz projeyi içeren depoyu seçin ve Kaydet‘e tıklayın.

Back4App seçilen depoyu otomatik olarak senkronize edecektir. Back4App’a yönlendirildikten sonra, eklenen GitHub deposunun sağındaki Seç ‘e tıklayın. Ardından, Uygulama Adı alanını tercih ettiğiniz uygulama adıyla doldurun.

Uygulama adı alanı yapılandırması

FastAPI uygulamanızın bir .env dosyası içinde maskelenmiş gizlilikleri varsa, ortam değişkenlerinizi girmek için Ortam Değişkenleri ‘ne tıklayın. Değişken ekle ‘ye tıklayın ve büyük harfler kullanarak değişken adınızı yazın.

İsim hatalarını önlemek için projenizin .env dosyasındaki değişkenlerle aynı isimlendirme kuralını kullandığınızdan emin olun.

Bu adım, değişken değerlerinizi şifreler ve dağıtımınıza ekler. Son olarak, FastAPI uygulamanızı dağıtmak için Uygulama Oluştur ‘a tıklayın.

FastAPI uygulaması için dağıtım örneği aşağıda gösterildiği gibi çalışır.

Uygulamanızın canlı sürümünü görüntülemek için sol kenar çubuğundaki URL’ye tıklayın. Bu durumda https://testapp-omisolaidowu.b4a.run/api/v2/hello-world adresine gitmek beklenen yanıtı döndürür.

Sonuç

Python’un FastAPI’sini kullanarak bir uygulama geliştirmek bir görevdir. Ancak bunu müşterilere hizmet vermek için sorunsuz bir şekilde dağıtmak başka bir şeydir.

Daha hızlı dağıtıma yardımcı olmanın yanı sıra, CaaS daha az tekniktir. Bir FastAPI uygulamasının nasıl dağıtılacağını görmüş olsanız da, hepsi bu kadar değil.

İstemci tarafı uygulamasını ayrı bir kapsayıcı örneğine dağıtmak ve oluşturulan URL’yi temel URL olarak kullanarak FastAPI uç noktalarına bağlanmak isteyebilirsiniz.

Bu makaleyi beğendiyseniz, lütfen Flask uygulaması nasıl dağıtılır başlıklı eğitimimize göz atın.

FastAPI nedir?

FastAPI, Python ile RESTFul API’ler geliştirmek için yüksek performanslı bir web framework’üdür.

FastAPI uygulaması nasıl deploy edilir?

– Projeniz için bir Docker imajı oluşturun, Dockerfile kullanarak.
– Kodunuzu GitHub’a gönderin.
– Back4App hesabınıza giriş yapın ve yeni bir uygulama oluşturun.
– Container instance’ınızı hedef projeyi içeren GitHub reposu ile bağlayın.
– FastAPI uygulamanızı deploy edin ve gerçek zamanlı deployment log’larını görüntüleyin.


Leave a reply

Your email address will not be published.