Heroku Python API Deployment

Heroku bulut tabanlı bir platform servisidir. Node.js, Java, Clojure, Python, PHP, Scala ile Go dilleri desteklemektedir. Kısacası bu dillerde geliştirdiğiniz uygulamaları Heroku üzerinde yayınlayabilirsiniz. Bunların dışında aşağıdaki hizmetleri de sunmaktadır.

  • Hem yatay da hem de dikeyde uygulamaları scale etme.
  • Uygulamalar için Redis cache hizmetleri
  • Uygulamaların olmazsa olmazı CA (Sürekli teslimat)
  • Github repo entegrasyonu
  • Uygulama log, hata, cpu v.s izleme

Bu makalemizde örnek olarak Python Flask ile bir API oluşturacağız. Oluşturduğumuz bu api’yi docker container haline getirerek Heroku üzerine deploy edeceğiz.

Uygulama dizinimizi oluşturalım

mkdir PythonApi

Oluşturduğumuz dizine app.py dosyası oluşturarak aşağıdaki şekilde düzenleyelim.

http://urladdress:port/city üzerine gelen isteklere cityList’i dönen bir endpoint yazdık.

Proje ana dizinine requirements.txt dosyası oluşturarak içine aşağıdaki kodu ekleyelim. (Projeye bağımlı kütüphanelerin isimlerini ve versiyonlarını burada tutuyoruz.)

Flask==0.12.3

Evet örnek projemizi tamamladık şimdi projemizi dockerize edelim.

Proje ana dizinine Dockerfile adında bir dosya daha oluşturalım.

FROM ubuntu:latest
MAINTAINER Abdulkerim Karaman "abdulkerimkaraman@gmail.com"
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
ENTRYPOINT ["python"]
CMD ["app.py"]

Şimdi projemizi Heroku üzerine deploy edebiliriz. http://heroku.com adresine giderek üye oluyoruz. Ardından yeni bir app ekliyoruz.

https://devcenter.heroku.com/articles/heroku-cli#download-and-install adresinden heroku CLI yükleyelim.

Evet yeni bir console açarak deploy işlemlerine başlayalım. Aşağıdaki kodu çalıştırarak login olalım.

heroku container:login

Aşağıdaki komut ile uygulamamızı bir image’a çevirerek heroku üzerine deploy ediyoruz.

heroku container:push web --app albarakapythonapi

Push işlemi bittikten sonra image’ı release ortama alalım.

heroku container:release web --app albarakapythonapi

Şimdi uygulamamıza get isteği atarak test edelim.

Evet isteğimiz başarılı şekilde sonuçlandı :)) Heroku üzerinden uygulama loguna baktığımızda aşağıdaki sonucu görüyoruz.

Repo:

Faydalı olması dileğiyle.

Hoşçakalın…

--

--