Heroku ile Django projesini yayına almak

2019-05-24

Bir önceki yazımda hatırlarsanız Django ile basit bir proje oluşturmuştuk. Bu sefer o projeyi web ortamında nasıl yayına alabileceğimizden bahsedeceğim ki yaptığınız projeyi tüm dünya ile paylaşabilelim. Bunun için Heroku hesabı oluşturmalısınız ve daha sonra işletim sisteminize uygun olan Heroku'nun CLI'ını indirmeniz gerekiyor. Bu işlemleri hallettiğinizi varsayarak anlatımıma başlıyorum.

Projeyi tercih ettiğiniz bir kod editöründen açın, sanal ortamın aktif olduğundan ve Pipfile dosyasının içerisinde aşağıdaki satırların yer aldığından emin olmanızı istiyorum.

[requires]
python_version = "3.7"

Şimdi Heroku'nun kendine has dosyası olan Procfile adındaki dosyayı Pipfile ile aynı dizinde olacak şekilde projenize ekleyin. Ve içerisine hemen aşağıdaki satırları birebir olarak kopyalayıp yapıştırın.

web: gunicorn helloworld_project.wsgi --log-file -

Yukarıdaki satırlar Heroku'ya, Django'nun içerisinde gelen yerel web sunucusu yerine production ortamı için daha uygun olan gunicorn adındaki web sunucusunu kullanmasını söylüyor. Onu kullanmasını istiyoruz ama projemize de dahil etmemiz lazım. Hemen aşağıdaki komutlar yardımıyla dahil edelim.

pipenv install gunicorn

Deployment hazırlıkları arasındaki son adımımız ise proje klasörü içerisindeki ayarlar dosyasındaki şu satırı güncellemeniz.

ALLOWED_HOSTS = ['*']

Bu işlem aslında oluşturduğumuz Django projesinin hangi hosting ya da alan adını kullanarak siteyi sunabileceğini belirliyor. Şimdilik güvenli olmasa da biz herhangi bir alan adını kabul ediyoruz dedik. Son olarak yaptığım değişiklikleri git ile github hesabıma push ediyorum.

Artık deployment işlemlerine geçebiliriz. Şimdi makalenin en başında bahsettiğim Heroku CLI denilen aracı kullanacağız. Aşağıdaki komut yardımıyla Heroku hesabınıza giriş yapabilirsiniz.

heroku login

Hemen ardından aşağıdaki komut yardımıyla Heroku'dan bizim için bir uygulama oluşturmasını isteyeceğiz. Bu komutu girdikten sonra Heroku size bir uygulama oluşturacak ve alan adını da rastgele olarak belirleyip komut panelinden çıktı olarak gönderecek. Benimki: "whipering-brook-80136" :)

heroku create

Yukarıdaki işlemi de tamamladıktan sonra Heroku için git'e kanca atacağız. Yani bir nevi git ile init edilmiş ve değişikleri takip edilen bu projeyle Heroku'da oluşturduğumuz uygulamanın bağlantısını kuruyoruz. Unutmayın, son girilen parametre Heroku'nun sizin için rastgele oluşturduğu isim olmalı.

heroku git:remote -a whipering-brook-80136

Evet uygulamayı yayına almak baya uzun ve sancılı bir süreç olabiliyor hele de hata mesajlarıyla karşılaşıyorsanız saç baş yoldurabilir. Buraya kadar herhangi bir hatayla karşılaşmadıysak devam edelim. Aksi takdirde Hz.Google'dan yardım isteyelim. :)

heroku config:set DISABLE_COLLECTSTATIC=1

Yukarıdaki komut sayesinde projemizdeki HTML, CSS veya JavaScript gibi statik dosyaları Heroku'dan görmezden gelmesini istemiş oluyoruz. Daha sonra bu konu ile küçük bir makale yazabilirim.

Son olarak yapmamız gereken kodlarımızı Heroku'ya göndermek. Onu da hemen aşağıdaki komutu kullanarak yapıyor olacağız.

git push heroku master

Oluşturduğumuz proje deneme amaçlı olduğundan ve fazla trafik almayacağını bildiğimizden uygulamamızı aşağıdaki komutu kullanarak ücretsiz bir alanda barındırabiliriz.

heroku ps:scale web=1

Birçok adımı başarıyla tamamladık. Artık huzurla yayına aldığımız uygulamayı görebiliriz. Onu da aşağıdaki komutu girdikten sonra Heroku bizim için otomatik olarak web tarayıcımızdan projemizin yayında olduğu adresi yeni bir pencerede açıyor olacak.

heroku open

Tebrikler! Uygulamayı online olarak yayına aldık. Görmek için şurdan buyrun. Görüşmek üzere...