20 Mart 2017 Pazartesi

Django Projelerini Heroku'da Yayınlama


Üzerinde çalıştığınız Django uygulamalarını web üzerinde yayınlamak için çeşitli hizmetler bulunmakta. Bunlardan birisi de Heroku Bulut Uygulama Platformu. Local makinede çalıştırdığınız uygulamalarınızı kanlı canlı internette görmek istiyorsanız başvuracağınız platform olan Heroku için Türkçe kaynak olup olmadığını bilmiyorum. Yayına alma esnasında atılacak temel adımları buraya not etmek istedim.
Heroku ile ilgilenmeden önce projemizi Github'a atmak yerinde bir hareket olacaktır. Ancak ben bunu yapmak yerine projemi yine yerel makinede bulunan Git deposundan çektim.


Bu işlemler için "herokulive" adında bir klasör oluşturalım. Bu opsiyonel bir adım elbette. Daha sonra klonlama işlemine başlayalım. 

git clone https://github.com/someusername/projectname.git
ya da 
git clone /home/orhan/venv/weird/

Burada son kısımda yazdığımız adresi projemizin bulunduğu herhangi bir klasör olarak girebiliriz. Bu arada tüm bunları virtualenv'de yapmamız gerekiyor. Bazı bağlılıkları kurmalıyız. Bunları kurarak hem web sunucusu için hem de yerel heroku sunucusu için gerekli bağlılıkları gidermiş olacağız. 

pip install dj-database-url gunicorn whitenoise

Tüm bu bağlılıkları Heroku için tanımlamamız lazım. "requirements.txt" adıyla bir dosya yaratıp şunları ekleyelim:

dj-database-url==0.4.2
Django==1.10.4
gunicorn==19.7.0
whitenoise==3.3.0

Bunları otomatik olarak gerçekleştirmek için şu komutu kullanabiliriz:

pip freeze > requirements.txt

Son olarak aynı dosyanın son satırına şunu ekleyelim:

psycopg2==2.7.1

Hangi ortamda çalıştığımızı da Heroku sunucusuna anlatmak için "runtime.txt" adıyla dosya oluşturup çalıştığımız Python sürümünü ekleyelim:

python-3.4.2

Ayrıca "Procfile" adıyla başka bir dosya yaratıp şunu eklememiz gerekiyor:

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

"weird" burada projemizin ismine göre değiştirilmelidir.

Ayrıca 'wsgi.py' dosyamıza şunları ekleyelim:

from whitenoise.django import DjangoWhiteNoise


application = DjangoWhiteNoise(application)

"settings.py" dosyasına şu değişiklikleri yapalım:
"DATABASES" kısmının hemen altına;

#Update database configuration with $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)

"USE_TZ" kısmının hemen altını da şu şekilde değiştirelim:

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'

Tüm bu değişiklikleri yaptıktan sonra static dosyalarını toplamalıyız. İlk olarak "settings.py" dosyasının bulunduğu dizine "static" adıyla bir dizin oluşturduktan sonra aşağıdaki komutu yazalım:

python manage.py collectstatic

Şimdi Heroku ile iletişime geçebiliriz. Proje klasöründe Heroku'ya bağlanalım. Şu linkteki adımları tamamlayarak bağlanalım ve projemizi Heroku'ya yükleyelim.

Projenize Postgresql veritabanı eklemeyi unutmayın:

heroku addons:create heroku-postgresql:hobby-dev

Push sırasında 'static' hatası verirse -ki verecektir- aşağıdaki komut bize yardımcı olacaktır.

heroku config:set DEBUG_COLLECTSTATIC=1

Kaynaklar:

Hiç yorum yok:

Yorum Gönder