FastAPI Uygulamasını Heroku’ya Deploy Etmek

Kategori Python
12.12.2023
61 Okunma

FastAPI’ye Giriş

FastAPI, tüm endpointler noktaları için otomatik OpenAPI (Swagger) ve ReDoc belge oluşturma özelliklerine sahip Python tabanlı bir Yüksek Performanslı Web API Çerçevesidir. REST API’lerinin veya Mikro Hizmetlerin hızlı bir şekilde geliştirilmesi için son derece uygundur.

FastAPI, Starlette (Starlette, yüksek performanslı asenkron hizmetler oluşturmak için ideal olan hafif bir ASGI çerçevesi/araç setidir) ve Pydantic (Python türü açıklamaları kullanan bir çalışma zamanı veri doğrulama ve ayar yönetimi) ile tam uyumludur. Starlette’in gücünden yararlanan FastAPI, WebSockets ve GraphQL için tam destek alır.

Ön Gereksinimler

Devam etmeden önce, bu yazıyla ilgileniyorsanız, aşağıdaki listedekilere sahip olmanız/karşılamanız önerilir.

  • Ücretsiz bir GitHub hesabı
  • Ücretsiz bir Heroku hesabı
  • Visual Studio Code IDE (Veya Python programlamayı destekleyen tercih ettiğiniz herhangi bir Programlama IDE’si)
  • Python 3.6 veya en son sürümü yüklü bir bilgisayar

Bu öğreticide Visual Studio Code (VS Code) kullandığınız varsayılır ve bu nedenle adımlarda bu öğreticinin gözden geçirilmesi sırasında VS Code hakkında bilgi verilir.

Ek olarak, bu FastAPI yazısı, programlamaya yeni başlayanları da hedeflemektedir. Bu nedenle, programcı olmayanların da bu öğreticiyi uygulamalarına yardımcı olan adımları mümkün olduğunca ayrıntılı olarak açıklamaya çalışıyorum.

Basit Bir FastAPI Uygulaması Oluşturun

Tek bir endpoint ile çok basit bir FastAPI uygulaması oluşturacağız ve ardından FastAPI uygulamasını Heroku platformuna deploy edeceğiz.

Bu makalenin tam kaynak kodu GitHub’da barındırılmaktadır. Endpointimiz JSON (JavaScript Object Notation) biçiminde bir yanıt döndürecektir.Komut istemini açın ve yeni bir uygulama oluşturmak istediğiniz konuma gidin. fastapi-demo adında bir dizin oluşturun ve aşağıdaki komutları çalıştırarak geçerli dizini bu dizinin üzerine ayarlayın.

Şimdi komut isteminden VS Code’u yazarak başlatın kod . ve enter tuşuna basın. Ya da klasörü vs codeu açtıktan sonra vs code içerisine ekleyebilirsiniz.

code .

PC’de yüklü olan Python Sürümünü kontrol edin

Terminalde aşağıdaki komutu çalıştırarak PC’nizde yüklü olan Python sürümünü kontrol edin.

Python sürüm 3.6 veya sonraki bir sürümünün yüklü olduğundan emin olun. Bilgisayarımda Python 3.8.0 yüklü.

Sanal Ortam Oluşturma

Uygulamaya geçmeden önce,  projemiz üzerinde çalışmak için bir Python Sanal Ortamı oluşturacağız.

Python Sanal Ortamı Windows İşletim Sistemi oluşturma komutu

Windows işletim sisteminden, aşağıdaki komutu yazarak env veya istediğiniz herhangi bir ad adlı bir Sanal Ortam oluşturun

Python Sanal Ortamı Unix tabanlı işletim sistemi oluşturma komutu

Unix tabanlı işletim sisteminden,  aşağıdaki komutu yazarak komut terminalinden env adında bir Sanal Ortam oluşturunuz

Sanal Ortamı Etkinleştirin

Sanal ortamı etkinleştirmek için işletim sisteminize bağlı olarak aşağıdaki komutu yazın.

Windows işletim sistemi için Python Sanal Ortamını etkinleştirme komutu

Unix tabanlı işletim sistemi için Python Sanal Ortamını etkinleştirme komutu

Sanal ortamın başarılı bir şekilde etkinleştirilmesinden sonra, oluşturulan ortamın adının komut satırı terminaline önek olarak ekleneceğini göreceksiniz.

Pip’i Güncelle

pip, Python’da bir modül yükleyicisidir. Basitçe söylemek gerekirse, bizim durumumuzda pip, uygulamamızda kullanabilmemiz için FastAPI modülünü kurmamıza yardımcı olacaktır. pip kendi içinde Python kurulumu ile varsayılan olarak gelen bir modüldür. Pip için sık sık yükseltmeler vardır. Bu nedenle, projemiz için her zaman en son bağımlılıkları alması için pip’i yükseltmek en iyi uygulamadır. pip’i yükseltmek için aşağıdaki komutu çalıştırın.

FastAPI modülünü kurun

FastAPI kullanarak bir Restful API oluşturmak için yalnızca FastAPI ve uygulamaya özel bağımlılıkları yüklemek için aşağıdaki komutu çalıştırın.

Yaklaşım 1: FastAPI İsteğe Bağlı Kurulum

Bu yaklaşımda FastAPI’yi ve ardından Uvicorn’u ayrı ayrı kuruyoruz.

Bu durumda, aşağıdaki komutla uvicorn’u ayrı olarak kurmanız gerekir. Uvicorn, FastAPI uygulamanızı çalıştırmak için altyapı sağlayan bir ASGI (Asenkron Sunucu Ağ Geçidi Arayüzü) sunucusudur.

Bu, FastAPI’nin uygulama geliştirme çerçevesinin çalıştırdığı sunucudan tamamen ayrıldığı anlamına gelir. Bu, FastAPI’nin WSGI (Web Sunucusu Ağ Geçidi Arayüzü) sunucusunda da çalışmasını kolaylaştırır. FastAPI’nin güzelliği budur.

Yaklaşım 2: FastAPI Tam Kurulum

FastAPI’yi Uvicorn ile birlikte kurmak istiyorsanız aşağıdaki komutu çalıştırınız.

Tam kurulumla ilgili zorluklar, bir Windows 10 PC’deyseniz ve Microsoft Visual C++ 14.0’ı yüklemediyseniz, pip’in FastAPI’yi yükleyememesidir. Bu nedenle, başarılı bir kuruluma sahip olmanız için çok büyük bir yazılım olan Microsoft Visual C++ 14.0’ı indirmeniz gerekir. Bu yazılımın yüklü olması gerekli değildir. Bu nedenle, FastAPI’nin İsteğe bağlı kurulumunun Yaklaşım 1’i ile gitmeniz önerilir.

Gunicorn Kurulumu

Heroku’daki uygulamamızı sunmak için Gunicorn kullanıyoruz. Gunicorn’u yüklemek için aşağıdaki komutu çalıştırın.

Tüm proje bağımlılıklarını bir dosyaya kaydetme

Şimdiye kadar, tüm bağımlılıkları kurabiliyoruz. Ancak, gerekli bağımlılıkların yüklenmesini otomatikleştirmek de önemlidir. Bunun nedeni, bu depo diğer geliştiriciler tarafından farklı bir bilgisayarda kullanılıyorsa veya çeşitli başka ortamlara dağıtırsak, kendi başlarına yüklediklerinde modüllerin uygun olmayan sürümleriyle ilgili sorunlarla karşılaşmamaları gerektiğidir. Bu yüzden proje ile ilgili bağımlılıkları donduracağız ve projenin kök dizininden cmd terminalinde aşağıdaki komutu çalıştırarak bir dosyada saklayacağız.

Yukarıdaki komut tüm modüllerin sürümlerini yakalayacak ve bunları projenin kök dizinindeki requirements adlı bir metin dosyasına yazacaktır. Dosyanın adı sizin seçiminizdir, ancak requirements.txt en yaygın olarak Python topluluğu tarafından kullanılır.requirements.txt dosyasında belirtilen bağımlılıkları kurmak için tek yapmanız gereken aşağıdaki komutu çalıştırmaktır.

Yukarıdaki komut, requirements.txt dosyasını satır satır okuyacak ve dosyada belirtilen belirli sürümlere sahip tüm paketleri yükleyecektir.

FastAPI’de Basit Bir Uç Nokta Oluşturun

Basit bir JSON döndüren bir GET endpoint’i oluşturacağız. Bunun için  fastapi-demo projemizin kök dizininde main.py isminde bir dosya oluşturun.

FastAPI modülünü içe aktarın ve başlatın

main.py aşağıdaki satırı ekleyin, böylece fastapi modülü tarafından sunulan FastAPI adlı sınıf yardımıyla endpoint’imizi oluşturmaya başlayabiliriz.

 

Şimdi aşağıdaki gibi basit bir JSON nesnesi döndürmek için bir endpoint oluşturacağız.

 

GET Uç Noktasını Uygulama

Main.py dosyası aşağıdaki gibi olacaktır.

Yukarıdaki kodda def anahtar kelimesi ile hello isminde  bir metot tanımladık. Bu yöntemin yaptığı tek şey,  Python’da sözlük türünde bir nesne döndürmektir.

#1 çizgisi, tüm sihrin gerçekleştiği yerdir. @app.get(“/”) hello yöntemimizin dekoratörüdür  ve bu yöntemi GET HTTP yöntemi isteklerini kabul eden bir uç noktaya dönüştürür. Bizim  durumumuzda uygulamaya atanan FastAPI örneği  , sözlük türünün dönüş değerini otomatik olarak  JSON biçimi.

FastAPI uygulamasını yerel PC’de çalıştırın

Oluşturduğumuz Python ortamının aktif olduğu komut istemine aşağıdaki komutu yazıp enter tuşuna basın.

  • Yukarıdaki komut ile aşağıdaki altyapı ayarları ile Uvicorn ASGI sunucusuna çağrı çağırıyoruz.
  • host 127.0.0.1, uvicorn’u uygulamamızı PC’nin localhost’unda çalıştıracak şekilde yapılandırdığımız anlamına gelir. host parametresi için diğer olası değerler 0.0.0  veya localhost’tur.  FastAPI’yi üretim ortamlarına dağıtırken 0.0.0.0 önerilir.
  • 5000 numaralı port, uygulamamızın çalışmasını istediğimiz porttur. Bu bağlantı noktasında zaten çalışan başka bir uygulamanız veya hizmetiniz varsa, yukarıdaki komut yürütülemez. Böyle bir durumda, uygulamanın kullanması için ücretsiz olarak kullanılabilir olduğu tespit edilen seçtiğiniz başka bir dört basamaklı sayıyla değiştirmeyi deneyin.
  • yeniden yükle Bu bayrağın yalnızca geliştirme amacıyla ayarlanması önerilir. Bu bayrağın etkinleştirilmesi, geliştirme sırasında kodunuzda yaptığınız değişikliklerle uvicorn sunucusunu otomatik olarak yeniden başlatır. Herhangi bir çalışma zamanı hatası olması durumunda, uvicorn sunucusunun yeniden başlatılamamasına neden olan hata izinden bu değişiklikleri hızlı bir şekilde tanımlayacağınız açıktır.
  • reload bayrağı, modern JavaScript kitaplıklarıyla birlikte gelen sıcak kod yeniden yükleme özelliği ile karıştırılmamalıdır. React ve Vue tarafından sağlanan uvicorn’un yeniden yüklemesi ile sıcak kod yeniden yüklemesi arasındaki temel fark, uvicorn’un yeniden yüklemesinin sunucuyu yeniden başlatması ve sıcak kod yeniden yüklemesinin hem sunucuyu yeniden başlatması hem de kullanıcı arayüzünü yeniden yüklemesidir.
  • main:app Bu, aşağıda ayrıntılı olarak açıklandığı gibi bir model izler.
    • main, FastAPI’nin başlatıldığı modüldür. Bizim durumumuzda, sahip olduğumuz tek şey kök düzeyinde main.py. FastAPI değişkenini diğer dizinlerin altında bir yerde başlatıyorsanız, uvicorn’un yapılandırmayı doğru bir şekilde tanımlayabilmesi için bir __init__.py dosyası eklemeniz ve bu modülü kullanıma sunmanız gerekir. Bizim durumumuzda ana modül olur.
    • app, FastAPI örneğiyle atanan değişkenin adıdır. Bu adları değiştirmekte özgürsünüz, ancak module-name:fastapi-initialization-variable desenini izleyen aynı sözdizimini yansıtıyorsunuz.

Seçtiğiniz bir tarayıcıda aşağıdaki uç noktaya giderek uygulamaya erişin ve uygulamayı görün.

FastAPI kullanarak bir Web API’si uygularken, isteği Postman veya Postwoman gibi herhangi bir API geliştirme aracı aracılığıyla bu uç noktaya göndermeniz önerilir. Postman, API geliştirme ve test etme için bir yazılımdır. Bir API’ye gönderilen istekleri özelleştirmenize olanak tanır. İstekte GET, PUT, POST, DELETE gibi özel HTTP Fiilleri gönderme ve yetkilendirme veya içerik anlaşması gibi özel başlıklar ekleme gibi özellikler. Ancak basit uç noktamız için tarayıcı aracılığıyla bir GET isteği göndermekte sorun yok.

Tarayıcıda, Merhaba Tutlinks.com mesajını içeren JSON yanıtını göreceksiniz. Başarılı, örnek yanıtla basit bir Web API’si oluşturma konusunda uzmanlaştınız.  Bunu, ücretsiz hesaplarla sınırlı dinozorlar sunan Heroku gibi üretim ortamlarına nasıl dağıtacağınızı anlamanız her zaman önerilir. Bu yetenek, çalışmalarınızı arkadaşlarınıza, iş arkadaşlarınıza göstermenize veya teknik becerilerinizle övünmek için çalışmalarınızı LinkedIn gibi profesyonel ağ sitelerinde paylaşmanıza yardımcı olacaktır.

Heroku için Dağıtım Yapılandırması Procfile Oluşturma

Procfile, Heroku’ya özgü bir dosyadır ve Heroku’da gerçekleşen etkin bir dağıtım sırasında dağıtım yapılandırmaları tarafından okunur. Heroku otomatik olarak Procfile’ın varlığını arar ve içinde bulunan komutları yürütür.

FastAPI uygulamasını Heroku’ya Dağıtma Komutu

Herhangi bir uzantı olmadan Procfile adlı bir dosya oluşturun  . FastAPI uygulamanızı Procfile’daki Heroku’da çalıştırmak için aşağıdaki komutu yerleştirin.

  • web: yanındaki komutla bir web uygulamasını başlatmak için Heroku dağıtım işlemini tanımlamaya yardımcı olacak Procfile komut kuralına özgüdür.
  • gunicorn, uygulamamızı aşağıdaki yapılandırmayla çalışacak şekilde yapılandırdığımız WSGI sunucusudur.
  • -w 4 uygulamamızın gunicorn üzerinde 4 worker process ile çalışmasına ihtiyacımız olduğunu belirtir.
  • -k uvicorn.workers.UvicornWorker, gunicorn’a uygulamayı workers.UvicornWorker worker worker sınıfını kullanarak çalıştırmasını söyler.
  • main:app, FastAPI() uygulamamızın başlatıldığı ana modülümüzdür.

Ana bilgisayarı ve bağlantı noktasını da belirtebilirsiniz. Ancak Heroku bunları otomatik olarak çözecek ve bu demo için ekstra bir yapılandırmaya gerek yok.

Deponuzu GitHub’a gönderme

GitHub, yazılımla ilgili kod dosyalarınızı barındırmak için açık bir platformdur. Kodunuzu herkese açık olacak şekilde yapılandırabilir veya ihtiyacınıza göre özel hale getirebilirsiniz. GitHub’da yeniyseniz, bunun için gidin ve ücretsiz kaydolun. Mevcut projenizi GitHub’a eklemek için bu ayrıntılı öğreticiyi izleyin.

Heroku’da FastAPI Dağıtımını Yapılandırma

Henüz sahip değilseniz ücretsiz bir Heroku hesabı için kaydolun. Heroku, geliştiricilerin uygulamaları tamamen bulutta oluşturmasına, çalıştırmasına ve çalıştırmasına olanak tanıyan bir hizmet olarak platformdur (PaaS). Doğrulanmış bir e-posta hesabıyla kaydolduktan sonra, bir uygulama oluşturmaya devam edin.

Heroku’da uygulama oluşturma ve yapılandırma

Heroku’da Uygulama Oluştur

  • Kayıtlı e-posta ile doğrulanmış Heroku hesabınıza giriş yapın.
  • Kontrol panelinde Yeni uygulama oluştur düğmesine tıklayın. Zaten uygulamalarınız varsa, Yeni’ye tıklayın ve Yeni uygulama oluştur’u seçin.
  • Kullanılabilir bir Uygulama adı verin . Uygulama adının, kendisine kayıtlı tüm kullanıcılardaki diğer tüm Heroku uygulamalarında benzersiz olması gerektiğinden emin olmalısınız. Aksi takdirde Heroku, uygulamayı oluşturmanıza izin vermez.
  • Bir bölge seçin veya Amerika Birleşik Devletleri olarak seçilen varsayılan bölgeye bırakın
  • Dağıtım işlem hattı yapılandırmak istemiyorsanız İşlem hattına ekle seçeneğini yoksayın.
  • Uygulama oluştur düğmesine tıklayın.
  • Ardından Vscode üzerinden aşağıdaki adımları takip ediniz.

Install the Heroku CLI

Download and install the Heroku CLI.

If you haven’t already, log in to your Heroku account and follow the prompts to create a new SSH public key.

Clone the repository

Use Git to clone fastapi-demo1’s source code to your local machine.

Deploy your changes

Make some changes to the code you just cloned and deploy them to Heroku using Git.

GitHub’a bağlanma

  • Dağıtım yöntemi altında GitHub seçeneğini belirleyin ve GitHub’a bağlanın.
  • İlk kez kullanıcıların, deponun gönderildiği hesapta oturum açarak GitHub hesabını bağlaması gerekir. Mevcut kullanıcılar, bir depoda arama yapma seçeneğini otomatik olarak görecektir.
  • Bağlandıktan sonra, bağlanmak için bir depo arayın. GitHub’da yeni bir depo oluştururken verdiğiniz ada göre depoyu arayın.
  • Arama sonuçlarında FastAPI uygulamamızın bulunduğu depoyu bulun ve bağlanın.

GitHub’dan Heroku’da Otomatik Dağıtımı Yapılandırma

Depoya başarıyla bağlandıktan sonra Otomatik Dağıtımları Yapılandır seçeneğini görürsünüz. Ana dağıtıma dağıtılacak bir dal seçin  seçeneğini bırakın ve Otomatik Dağıtımları Etkinleştir’e tıklayın. Bu ayar, yeni kod değişikliklerini ana dala her gönderdiğinizde en son değişiklikleri derleyen ve yayımlayan dağıtımı otomatik olarak tetikler. El ile dağıtma bölümünden, ana olarak dağıtılacak dalın adını girin ve Dalı Dağıt’a tıklayın.

Dağıtım işleminin tamamlanmasını bekleyin. İşiniz bittiğinde, Uygulamanız başarıyla dağıtıldı ifadesini görmeniz gerekir.Heroku’ya dağıtılan ilk Python tabanlı FastAPI uygulamanızı görmek için Görüntüle  düğmesine
tıklayın.????

Video öğretici

FastAPI’nin temellerine aşina olmanız durumunda, FastAPI uygulamasını Heroku’ya nasıl dağıtacağınızı anlamak isteyebilirsiniz. Aşağıdaki eğitim videosu, bunu sadece 6 dakika içinde yapmanız için size rehberlik edecektir.

Source : https://tutlinks.com/create-and-deploy-fastapi-app-to-heroku/#introduction-to-fastapi

Comments of this post

Henüz yorum bulunmuyor!