V tomto článku si ukážeme ako nasadiť web aplikáciu napísanú v v Django frameworku na cloudovú aplikačnú platformu Heroku. Súčasťou návodu bude aj nastavenie databázového pripojenia o ktoré sa stará perzistentná vrstva v podobe Postgresql databázy, ktorá je tiež súčasťou Heroku cloud platformy.

Základná vec pri nasadení aplikácie do cloudovej platformy je existencia súboru Procfile. Tento súbor je vyžadovaný pri spúštaní akejkoľvek aplikácie na Heroku. Tento súbor deklaruje vstupný bod a typ aplikácie. Umiestnenie musí byť vždy v hlavnom priečinku aplikácie.

Výpis Procfile súboru web: gunicorn nazovprojektu.wsgi

Ako je vidieť, v súbore je definované, že aplikácia sa spúšťa prostredníctvom python HTTP WSGI servera Gunicorn. Projekt musí samozrejme obsahovať knižnice Gunicornu v requirements.txt. Predpokladajme, že Django projekt obsahuje v requirements.txt už knižnice Djanga a Postgresql databázy. Potom už stačí inštalovať Gunicorn nasledovne.

Inštalácia Gunicornu pip install gunicorn
Uloženie inštalovanej knižnice do requirements.txt pip freeze > requirements.txt
Výpis Procfile súboru Django==2.0.2 gunicorn==19.7.1 pytz==2017.3 psycopg2==2.7.4

Heroku server umožňuje nasadenie aplikácie pushnutím master vetvy do remote repozitára Heroku alebo nastavenie nasadenia po pushnutí do remote vetvy Vašej github vetvy. Pri tom prvom spôsobe je nutnosťou mať vytvorený repozitár na Heroku. V druhom prípade je potreba pripojiť repozitár githubu s Heroku. Nastavenie (prípadne prepojenie) sa robí po vytvorení aplikácie v časti DEPLOY (deployment method)

Nastavenie Postgresql pluginu

V časti Overview a linku Configure Add-ons si pridáme Heroku Postgres :: Database plugin. Heroku za nás automaticky vytvorí databázu aj používateľský prístup, ktorý si môžeme pozrieť vypísaním systémových konštánt Heroku alebo kliknutím na záložku Settings -> Config Variables na Dashboarde Heroku

Poslednou vecou je nastavenie settings.py Django projektu. Existujú minimálne dva sposoby ako ho nastaviť. Ukážeme si manuálne nastavenie všetkých potrebených premenných a tiež za pomoci django-heroku pluginu, ktorý nám všetko zjednoduší.

Manuálne nastavenie

Všetky citlivé informácie neukladať do settings.py, ale priamo do konfiguračných premenných Heroku. Django projekt si tak načíta premenné z týchto systémových premenných a prepíše defaultné.

Pridaním Postgresql pluginu sa nám automaticky nastavila url adresa databázy DATABASE_URL v systémových konštantách heroku. Tým pádom máme databázu už nastavenú pretože v URL je už nastavené jednak pripojenie na DB ale aj credential, čiže názov DB, user a heslo. Ďalej je potrebné nastaviť povolené hosty, ktoré môže Django aplikácia obslúžiť. Ďalej prístup k statickým súborom.

Nastavenie settings.py ALLOWED_HOSTS = [ 'nazovprojektu.herokuapp.com', ] STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] STATIC_ROOT = os.path.join(BASE_DIR, 'static') MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'

Nastavenie cez plugin

Ako bolo už písané vyššie, citlivé informácie by sme nemali ukladať priamo do settings.py, ale použiť na to systémové premenné Heroku servera. Práve django-heroku plugin túto robotu urobí za nás a automaticky nastaví.

  • pripojenie na databázu
  • test runner
  • statické súbory
  • povolené hostingové url
  • logovanie
  • secret key

Inštalácia pluginu pip install django-heroku
Uloženie inštalovanej knižnice do requirements.txt pip freeze > requirements.txt
Úplne na spodok settings.py je potrebné umiestniť nasledovné # Activate Django-Heroku. django_heroku.settings(locals())

Nasleduje už len samotné nasadenie aplikácie. To sa robí jednoducho pushnutím master vetvy.

Push do Heroku repozitára git push heroku master

Verím, že sa Vám podarilo svoj projekt úspešne rozbehať v prostredí Heroku. Ďakujem všetkým, za čas strávený pri čítaní tohto článku.


Michal Kalman
Michal Kalman
Softvérový vývojár

Softvérový vývojár a podnikateľ zameriavajúci sa na platformu Java, Python a Javascript. Mám dlhoročné profesionálne skúsenosti s vývojom Java/JavaEE aplikácií. Som zakladateľ firmy Morione, ktorá sa venuje návrhom a realizáciou efektívnych webových aplikácií. Podporujem a vyvíjam viaceré startupy. Vo voľnom čase cestujem po svete, behám po horách, píšem blogy a tvorím kreatívne videá.