Heroku ile Django Uygulaması Yayınlama

Merhabalar,

Bu yazıda basit şekilde bir Django uygulaması Heroku üzerinden nasıl yayınlanır ondan bahsedeceğim.

Heroku Nedir?

Heroku bir bulut uygulama platformudur. Python, Php, Ruby, Java gibi diller ile uygulamalarınızı hızlı bir şekilde geliştirmenize ve yayınlamanıza olanak sağlar.

Heroku ve Django

Bir Django uygulamasını adım adım nasıl heroku üzerinde yayınlayacağımıza bakalım.

İlk önce https://signup.heroku.com/ adresinden kayıt olmanız gerekmektedir. Kayıt işleminin ardından https://devcenter.heroku.com/articles/heroku-command-line sisteminize uygun olanı indirerek kurulum işlemini tamamlayın.

Kurulum yaptıktan sonra komut satırından takip eden komutu çalıştırın.

$ heroku login

Bu komut ile sizden kullanıcı bilgileri istenecektir. Doğru bir şekilde gierek herokuda oturum açma işlemini tamamlayın.

Django

Django uygulaması oluşturma;

$ virtualenv /opt/venv/heroku
$ source /opt/venv/heroku/bin/active
(heroku)➜ $ pip install Django
(heroku)➜ $ django-admin.py startproject django4heroku
(heroku)➜ $ cd django4heroku

Projemizi oluşturduk. Şimdi proje içerisinde heroku için bazı dosyalar oluşturmamız gerekiyor.

requirements.txt

Bildiğiniz gibi "requirements.txt" dosyası Python projelerinde kullanılan kütüphanelerin listelendiği bir dosyadır. Projeyi deploy etmeye çalıştığımızda heroku bu dosyayı arayacak ve kütüphaneleri kurmak isteyecektir. Eğer bu dosyayı bulamaz ise hata döndürür.

(heroku)➜ $ cat requirements.txt
Django==1.10.2
gunicorn==19.6.0

Gunicorn Django projesini ayağa kaldırmak için kullandığımız bir web serverdır. Deploy işleminden sonra Heroku sunucusunda projeyi gunicorn ile ayağa kaldıracağız.

Procfile

Process file, Heroku bu dosya içerisindeki her bir satırı bir process olarak işleme tabi tutacaktır. Bizim Django projesindeki processimiz ise projenin gunicorn ile ayağa kaldırılmasıdır.

(heroku)➜ $ cat Procfile
web: gunicorn django4heroku.wsgi

runtime.txt

Çalıştığımız Python sürümünü belirttiğimiz dosyadır.

(heroku)➜ $ cat runtime.txt
python-2.7.11

Not: Django projesini deploy etmeye çalıştığımızda Heroku python manage.py collectstatic komutunu çalıştıracaktır. Bu komutun hata vermeden çalışabilmesi için takip eden satırı settings.py dosyası içerisine ekleyin.

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Heroku App Oluşturma

İşin Django tarafını bitirdik. Projenin ana dizininde takip eden komutları çalıştırarak projeyi bir git projesi haline getirelim ve ilk commitimizi yapalım.

(heroku)➜ $ git init
(heroku)➜ $ git:(master) ✗ git add .
(heroku)➜ $ git:(master) ✗ git commit -m"initial commit"

Heroku ile app oluşturalım.

(heroku)➜ $ git:(master) heroku create django4heroku
Creating ⬢ django4heroku... done
https://django4heroku.herokuapp.com/ | https://git.heroku.com/django4heroku.git
(heroku)➜ $ git:(master) heroku apps
=== mazlum.agar@gmail.com Apps
django4heroku

Şimdi projemizi deploy edebiliriz.

(heroku)  $ git:(master) git push heroku master
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (11/11), 2.84 KiB | 0 bytes/s, done.
Total 11 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Python app detected
remote: -----> Installing python-2.7.11
remote:      $ pip install -r requirements.txt
remote:        Collecting Django==1.10.2 (from -r requirements.txt (line 1))
remote:          Downloading Django-1.10.2-py2.py3-none-any.whl (6.8MB)
remote:        Collecting gunicorn==19.6.0 (from -r requirements.txt (line 2))
remote:          Downloading gunicorn-19.6.0-py2.py3-none-any.whl (114kB)
remote:        Collecting wheel==0.24.0 (from -r requirements.txt (line 3))
remote:          Downloading wheel-0.24.0-py2.py3-none-any.whl (63kB)
remote:        Installing collected packages: Django, gunicorn, wheel
remote:        Successfully installed Django-1.10.2 gunicorn-19.6.0 wheel-0.24.0
remote:
remote:      $ python manage.py collectstatic --noinput
remote:        61 static files copied to '/app/static'.
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 41.5M
remote: -----> Launching...
remote:        Released v4
remote:        https://django4heroku.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/django4heroku.git
 * [new branch]      master -> master

Gördüğünüz gibi tüm komutlar heroku sunucusunda başarılı bir şekilde çalıştırıldı. Tarayıcı üzerinden https://django4heroku.herokuapp.com/ adresine gittiğimizde uygulamanın başarılı bir şekilde çalıştığını görebiliyoruz.

Komut Çalıştırma

(heroku)➜  $ git:(master) heroku run python manage.py migrate
(heroku)➜  $ git:(master) heroku run python manage.py runserver

Not: Heroku üzerinde database olarak Postgresql kullanmak zorundasınız. Biz bu yazımızda database işlemleri yapmadık.

Kolay gelsin.