Skip to content

Instantly share code, notes, and snippets.

@nemanjan00
Last active March 2, 2016 22:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nemanjan00/b5813ee533c7c4cb0d29 to your computer and use it in GitHub Desktop.
Save nemanjan00/b5813ee533c7c4cb0d29 to your computer and use it in GitHub Desktop.
Dokku

Dokku

Dokku je ekstremno jednostavan PaaS (platform as service) . Filozofija koje su se držali programeri dok su razvijali ovaj softver je poprilično jasna. Želeli su da naprave što jednostavniji potpuno funkcionalan klon Heroku platforme. I uspeli su u tome.

Ono što je prednost ovakvog sistema jeste to što vi ne morate (ali možete) da razmišljate o celokupnom kontejneru u kom se izvršava aplikacija već samo o aplikaciji i njenim zahtevima. Sve što treba da uradite jeste da pushujete svoj git repozitorijum i Dokku će od njega napraviti potpuno funkcionalan docker kontejner.

Šta se dešava kada pošaljem git repozitorijum?

Prvo što treba da znate o Dokkuu, Herokuu i sličnim rešenjima jeste to da oni koriste nešto što se zove buildpackovi. Buildpack je u suštini skup dodatnog softvera koji je neophodan za buildovanje i izvršavanje vaše aplikacije. Tako npr. imamo buildpack za PHP, buildpack za Python, za Ruby, etc.


Šta je buildpack i kako se koristi?

Buildpack je skupina od 3 bash skripte koje imaju jednostavnu ulogu.

  • bin/detect - Uloga ove skripte je da utvrdi koristi li vaša skripta ovaj buildpack (ako korisnik ne definiše koji buildpack želi da koristi, pri buildovanju, platforma pokreće po redu ovu skriptu iz svih buildpackova, da bi utvrdila koji buildpack treba da primeni na određenu aplikaciju)

  • bin/compile - Uloga ove skripte je da transformiše vašu aplikaciju u "nešto što može da se izvrši" tako što npr. u slučaju PHPa instalira dependencie koji su definisani u composerjson fajlu i instalira web server i PHP

  • bin/release - Uloga ove skripte je da "kaže" koje komande treba da se pokrenu pri pokretanju worker/web procesa


Dakle, kada pošaljete vašu aplikaciju, neophodno je da se otkrije koji je buildpack pogodan za vašu aplikaciju.

Postoje dve metode. Vi možete sami da podesite koji se buidpack koristi ili da Dokku to sam otkrije.

To se sve dešava tako što Dokku pokrene Herokuish (klon Heroku build kontejnera koji je baziran da Herokuovom osnovnom kontejneru) i prosledi mu vaša podešavanja i vašu aplikaciju. Ako se u tim podešavanjima nalazi buildpack, Herokuish ga skida i instalira. Ako ne, Herokuish prolazi redom kroz lokalne buildpackove dok bin/detect ne da potvrdan odgovor.

Nakon toga, izvršava se bin/compile koji skida neophodne dependencije, kompajlira, ako nešto treba da se kompajlira, itd.

Da bi Herokuish "znao" kako da pokrene vašu aplikaciju, potreban mu je Procfile. Procfile je jako jednostavan fajl koji definiše komandu za pokretanje vaše aplikacije.

Primer:

web: node index.js

Ako vaša aplikacija ne poseduje Procfile, onda se od bin/release skripte očekuje da ga generiše.

Sada kada je vaša aplikacija potpuno buildovana, preostao je još jedan korak. Docker kontejner u kom se sve to desilo se čuva kao docker image koji sadrži vašu aplikaciju.

Kada se pokrene taj docker kontejner, pokreće se i vaša aplikacija.

Ostalo je samo da vaša aplikacija "komunicira" sa "spoljašnjih svetom". Prvo što je neophodno da bi se ta komunikacija ostvarila jeste da vaša aplikacija "sluša" na određenom portu. Da biste znali koji je to port, Dokku vam prosleđuje PORT varijablu u ENVu. Zatim, kreira nginx.conf fajl koji sadrži podešavanja da se "napravi" nginx proxy do vaše aplikacije.

Šta je prednost jednog ovakvog sistema

Pa prednosti su mnogobrojne. Nabrojaću samo neke od njih i objasniću ih što jednostavnije moguće.

  • Koinzistentno okruženje - Sigurno ste da će se jedan kontejner potpuno isto ponašati na različitim serverima kao i da su kontejneri isti zato što se koristi Herokuov standard koji definiše šta svaki kontejner mora da poseduje od aplikacija.

  • Brz deployment i zbog toga što je okruženje relativno lagano, možete da imate i lokalni Dokku

  • Kod je jednostavan, čitljiv i vrlo je jednostavno pisati pluginove za ovaj sistem.

  • Već postoji community ljudi koji koriste Dokku tako da je poprilično testiran i ima mnogobrojne pluginove koji vam mogu biti od pomoći.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment