{"id":97,"date":"2017-07-02T17:51:59","date_gmt":"2017-07-02T15:51:59","guid":{"rendered":""},"modified":"2018-09-17T21:51:19","modified_gmt":"2018-09-17T19:51:19","slug":"vyvojarske-prostredie-na-jeden-klik-alebo-vagrant","status":"publish","type":"post","link":"https:\/\/spireng.sk\/en\/vyvojarske-prostredie-na-jeden-klik-alebo-vagrant\/","title":{"rendered":"V\u00fdvoj\u00e1rske prostredie na jeden klik alebo Vagrant"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"imgp_img\" style=\"float: left; margin: 2px 5px;\" src=\"\/sites\/default\/files\/imagepicker\/1\/a4d65f4s6.jpg\" alt=\"Obr\u00e1zok\" width=\"200\" height=\"200\" \/>U\u017e sa v\u00e1m to niekedy stalo? Pri\u0161li ste na nov\u00fd projekt, potrebujete si pripravi\u0165 v\u00fdvoj\u00e1rske prostredie, aby ste mohli pracova\u0165 a zrazu zist\u00edte, \u017ee to nie je tak\u00e9 jednoduch\u00e9. Ostatn\u00ed developeri to maj\u00fa u seba pripraven\u00e9, ale nikto v\u00e1m nevie poveda\u0165 kompletn\u00fd postup, a tak si to krok po kroku lad\u00edte a sk\u00fa\u0161ate a \u010das be\u017e\u00ed. Kedysi som si myslel, \u017ee najlep\u0161ou odpove\u010fou na tento probl\u00e9m je nejak\u00e1 t\u00e1 wiki alebo dokument s popisom, ako si nastavi\u0165 prostredie. St\u00e1le to pova\u017eujem za celkom dobr\u00fa mo\u017enos\u0165, ale o \u010dosi lep\u0161\u00ed je n\u00e1stroj <a href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a> od firmy HashiCorp.<!--more--><!--break--><\/p>\n<p>Vagrant je n\u00e1stroj na vo\u013en\u00e9 pou\u017eitie, ktor\u00e9ho hlavnou \u00falohou je na jeden pr\u00edkaz pripravi\u0165 kompletn\u00e9 developement prostredie. A to nez\u00e1visle od toho, na akom opera\u010dnom syst\u00e9me ho spust\u00edte. Vagrant to rob\u00ed tak, \u017ee to prostredie priprav\u00ed do virtu\u00e1lneho stroja a priprav\u00ed ho na z\u00e1klade skriptu, ktor\u00fd mu nap\u00ed\u0161ete. Po\u010fme si to teraz trochu rozobra\u0165.<\/p>\n<p>Vagrant je nap\u00edsan\u00fd v Ruby a na svoj po\u010d\u00edta\u010d (bez oh\u013eadu na to, ktor\u00fd OS pou\u017e\u00edvate) ho viete jednoducho nain\u0161talova\u0165. \u010co budete okrem toho potrebova\u0165 je e\u0161te takzvan\u00fd <em>provider<\/em><span style=\"font-style: normal;\"> virtu\u00e1lneho stroja. To m\u00f4\u017ee byt VirtualBox alebo VMWare<\/span><span style=\"font-style: normal;\"> alebo Hyper-V alebo aj Docker. Nie\u010do na \u010dom Vagrant spust\u00ed virtu\u00e1lny stroj a za\u010dne ho pripravova\u0165.<\/span><\/p>\n<p><span style=\"font-style: normal;\">Ak <\/span> m\u00e1te in\u0161tal\u00e1ciu za sebou, tak pr\u00e1cu s Vagrantom za\u010dnete pr\u00edkazom<\/p>\n<pre>vagrant init<\/pre>\n<p>v kore\u0148ovom prie\u010dinku v\u00e1\u0161ho projektu. Tento pr\u00edkaz vygeneruje <em>Vagrantfile,<\/em> \u010do je konfigura\u010dn\u00fd s\u00fabor, ktor\u00fd Vagrantu povie,\u010do potrebujete pre svoj projekt. Definuje sa v \u0148om jedna d\u00f4le\u017eit\u00e1 vec a to je, ak\u00fd box chcete pre v\u00fdvoj pou\u017ei\u0165 \u2013 teda ak\u00fd opera\u010dn\u00fd syst\u00e9m sa m\u00e1 spusti\u0165 vo virtu\u00e1lnom stroji. Vybra\u0165 si m\u00f4\u017eete z HashiCopr <a href=\"https:\/\/app.vagrantup.com\/boxes\/search\">katal\u00f3gu<\/a>. Daj\u00fa sa tam n\u00e1js\u0165 minimalistick\u00e9 boxy, ktor\u00e9 obsahuj\u00fa len nevyhnut\u00fd z\u00e1klad, aby ste na virtu\u00e1lnom stroji mali \u010do naj\u010distej\u0161ie prostredie, ako aj hotov\u00e9 v\u00fdvojov\u00e9 prostredia, ktor\u00e9 u\u017e obsahuj\u00fa nain\u0161talovan\u00fd softv\u00e9r. V\u00e4\u010d\u0161ina boxov je linuxov\u00e1, ale daj\u00fa sa tam n\u00e1js\u0165 aj Windows alebo OS X boxy. D\u00f4le\u017eit\u00e9 je, \u017ee boxy s\u00fa ur\u010den\u00e9 len pre niektor\u00fdch providerov, tak\u017ee ak sa rozhodnete napr\u00edklad pre VirtualBox, tak si pod\u013ea toho treba aj vybera\u0165 box.<\/p>\n<p>Ak si box vyberiete, mus\u00edte ho stiahnu\u0165 k sebe na po\u010d\u00edta\u010d. To urob\u00edte pr\u00edkazom<\/p>\n<pre>vagrant box add &lt;nazov boxu&gt;<\/pre>\n<p>Toto v\u00e1m stiahne box na lok\u00e1lny po\u010d\u00edta\u010d. Pri jeho pou\u017eit\u00ed pre konkr\u00e9tny development environment sa z neho vyrob\u00ed k\u00f3pia a do tej sa za\u010dne pripravova\u0165 prostredie pre konkr\u00e9tny projekt. Tak\u017ee stiahnutie boxu prebieha len raz.<\/p>\n<p>Okrem boxu sa vo Vagrantfile nastavuje \u010fal\u0161ia d\u00f4le\u017eit\u00e1 vec a to je tzv. <em>provisioning<\/em><span style=\"font-style: normal;\">. To je vlastne <\/span><span style=\"font-style: normal;\">samotn\u00e1 pr\u00edprava<\/span><span style=\"font-style: normal;\">softv\u00e9ru vo <\/span><span style=\"font-style: normal;\">virt<\/span><span style=\"font-style: normal;\">u<\/span><span style=\"font-style: normal;\">\u00e1ln<\/span><span style=\"font-style: normal;\">om<\/span><span style=\"font-style: normal;\"> stroj<\/span><span style=\"font-style: normal;\">i<\/span><span style=\"font-style: normal;\">. Postup m\u00f4\u017ee by\u0165 zap\u00edsan<\/span><span style=\"font-style: normal;\">\u00fd<\/span><span style=\"font-style: normal;\"> r\u00f4znymi sp\u00f4sobmi: Ansible, Puppet, Chef, Salt, PowerShell alebo jednoducho bash. Viete ho zap\u00edsa\u0165 do extern\u00e9ho s\u00faboru a ten len vola\u0165 <\/span><span style=\"font-style: normal;\">z<\/span><span style=\"font-style: normal;\"> konfigura\u010dn\u00e9ho s\u00fabor<\/span><span style=\"font-style: normal;\">u,<\/span><span style=\"font-style: normal;\"> \u010d\u00edm sa d\u00e1 dosiahnu\u0165 \u013eah\u0161ia spravovate\u013enos\u0165. <\/span><span style=\"font-style: normal;\">Provisioning viete robi\u0165 aj pomocou Dockera. Teda Docker vie fungova\u0165 ako enging, na ktorom to cel\u00e9 be\u017e\u00ed <\/span><span style=\"font-style: normal;\">(provider), <\/span><span style=\"font-style: normal;\">ale tie\u017e ako n\u00e1stroj, ktor\u00fdm sa pripravuje virt<\/span><span style=\"font-style: normal;\">u<\/span><span style=\"font-style: normal;\">\u00e1lny stroj. Pri Vagrante sa v\u00e1m teda znalos\u0165 Dockera naozaj hod\u00ed.<\/span><\/p>\n<p>Ak m\u00e1te postup pripraven\u00fd, m\u00f4\u017eete prostredie spusti\u0165. To sa deje jednoduch\u00fdm pr\u00edkazom<\/p>\n<pre>vagrant up<\/pre>\n<p><span style=\"font-style: normal;\">Ten pr\u00edkaz vytvor\u00ed k\u00f3piu boxu, spust\u00ed ho v provider<\/span><span style=\"font-style: normal;\">y<\/span><span style=\"font-style: normal;\"> a spust\u00ed provision skripty, aby stroj pripravil. Ke\u010f v\u0161etko dopadne dobre, tak za kr\u00e1tky \u010das m\u00e1te hotov\u00e9 lok\u00e1lne be\u017eiace prostredie so v\u0161etk\u00fdm, \u010do treba.<\/span><\/p>\n<p><span style=\"font-style: normal;\">A \u010do \u010falej? Ako dosta\u0165 zdrojov\u00e9 k\u00f3dy na virtu\u00e1lny stroj a ako potom bude prebieha\u0165 v\u00fdvoj? <\/span><span style=\"font-style: normal;\">U\u017e v\u00e1s po\u010dujem, ako hovor\u00edte: \u201eAle ja predsa nechcem vyv\u00edja\u0165 vo vim-e!\u201c. Ni\u010d proti vim-u, som jeho fan\u00fa\u0161ik, ale viem, \u017ee<\/span><span style=\"font-style: normal;\"> tak\u00fdch<\/span><span style=\"font-style: normal;\"> n\u00e1s nie je ve\u013ea. Odpove\u010fou je automatick\u00e1 synchroniz\u00e1cia va\u0161ich projektov\u00fdch s\u00faborov do a z virtu\u00e1lneho stroja. <\/span><\/p>\n<p><span style=\"font-style: normal;\">T\u00fa rob\u00ed Vagrant automaticky po spusten\u00ed virtu\u00e1lneho stroja. Jednoducho v\u0161etko, \u010do je okolo Vagrantfile (rekurz\u00edvne) sa v\u00e1m defaultne synchronizuje do \/vagrant adres\u00e1ra <\/span><span style=\"font-style: normal;\">virtu\u00e1lneho stroja<\/span><span style=\"font-style: normal;\"> (ak je to linuxov<\/span><span style=\"font-style: normal;\">\u00fd<\/span><span style=\"font-style: normal;\"> stroj). <\/span><span style=\"font-style: normal;\">Synchroniz\u00e1ciu viete r\u00f4zne nastavova\u0165 a rovnako s t\u00fdmi s\u00fabormi viete na strane virtu\u00e1lneho stroja robi\u0165, \u010do potrebujete. Tak\u017ee napr\u00edklad kompil\u00e1ciu viete robi\u0165 na lok\u00e1lnom po\u010d\u00edta\u010di a deploy na virtu\u00e1lnom. Alebo oba na virtu\u00e1lnom, z\u00e1le\u017e\u00ed len na v\u00e1s. Podstatn\u00e9 je, \u017ee editova\u0165 k\u00f3d viete \u010falej lok\u00e1le vo svojom ob\u013e\u00fabenom IDE-\u010dku. Okrem synchroniz\u00e1cie s\u00faborov v\u00e1m pohodlie lok\u00e1lneho v\u00fdvoja zabezpe\u010d\u00ed aj forward portov, tak\u017ee v\u0161etky otvoren\u00e9 porty virtu\u00e1lnej machiny sa tv\u00e1ria ako keby boli na va\u0161om localhoste.<\/span><\/p>\n<p><span style=\"font-style: normal;\">A<\/span><span style=\"font-style: normal;\">ko teda vyzer\u00e1 postup rozbehania v\u00fdvojov\u00e9ho prostredia na projekte s Vagra<\/span><span style=\"font-style: normal;\">n<\/span><span style=\"font-style: normal;\">tom<\/span><\/p>\n<ol>\n<li>In\u0161taluj Vagrant<\/li>\n<li>In\u0161taluj VirtualBox (alebo in\u00fd provider)<\/li>\n<li>Checkoutni zdrojov\u00e9 k\u00f3dy s Vagrantfile<\/li>\n<li>spus\u0165 vagrant up<\/li>\n<\/ol>\n<p>Tak nejako by to malo by\u0165 jednoduch\u00e9. Vagrant ale nie je dobr\u00fd len na toto. Ide\u00e1lny je tie\u017e, ak chcete robi\u0165 experimenty s nejak\u00fdm softv\u00e9rom bez toho, aby ste ho in\u0161talovali na svoj lok\u00e1lny stroj. Pred \u010dasom som pripravoval predn\u00e1\u0161ku o NoSQL datab\u00e1zach a chcel som ma\u0165 na uk\u00e1\u017eku spusten\u00e9 \u0161tyri r\u00f4zne datab\u00e1zy (r\u00f4zneho druhu). V\u0161etko sa dalo jednoducho pripravi\u0165 cez Vagrant a to bez toho, aby som si do vlastn\u00e9ho stroja musel v\u0161etok ten softv\u00e9r in\u0161talova\u0165. A ako bonus som po predn\u00e1\u0161ke zozdie\u013eal Vagrantfile, tak\u017ee ktoko\u013evek si ho vedel u seba jednoducho spusti\u0165 a tak ma\u0165 automaticky pripraven\u00e9 to, \u010do na predn\u00e1\u0161ke videl.<\/p>\n<p>\u010co e\u0161te Vagrant dok\u00e1\u017ee:<\/p>\n<ul>\n<li>pomocou takzvanej Share funkcie viete (ak m\u00e1te \u00fa\u010det na HashiCorp str\u00e1nke \u2013 ten je zadarmo) zdie\u013ea\u0165 v\u00e1\u0161 virtu\u00e1lny stroj kdeko\u013evek na internete (cez \u0161peci\u00e1lnu linku, ktor\u00e1 sa vygeneruje). Viete tak niekomu na dia\u013eku uk\u00e1za\u0165, \u010do m\u00e1te vo virtu\u00e1ly lok\u00e1lne.<\/li>\n<li>vytv\u00e1ra na va\u0161om lok\u00e1lnom po\u010d\u00edta\u010di sie\u0165 virtu\u00e1lnych strojov \u2013 ka\u017ed\u00fd samostatne pripraven\u00fd. Takto viete u seba jedn\u00fdm pr\u00edkazom (v\u0161etko to m\u00f4\u017ee by\u0165 postaven\u00e9 na jednom konfigura\u010dnom s\u00fabore) vytvori\u0165 cel\u00fa infra\u0161trukt\u00faru serverov.<\/li>\n<li>vytv\u00e1ra\u0165 snapshoty virtu\u00e1lneho stroja. To je vhodn\u00e9, ak si lad\u00edte provision skript alebo sa chyst\u00e1te testova\u0165 nejak\u00fa komplikovan\u00fa migr\u00e1ciu \u00fadajov v r\u00e1mci virtu\u00e1lu<\/li>\n<li>pribali\u0165 virtu\u00e1lny stroj k projektov\u00fdm s\u00faborom. Takto viete hotov\u00fa virtu\u00e1lku distribuova\u0165 so zdrojov\u00fdmi k\u00f3dmi.<\/li>\n<li>\u201epushova\u0165\u201c zdrojov\u00e9 k\u00f3dy na preddefinovan\u00e9 FPT, HashiCorp Atlasu, Heroku \u2026<\/li>\n<\/ul>\n<p><span style=\"font-style: normal;\">Vagrant podporuje nie\u010do, \u010do si mysl\u00edm, \u017ee by malo by\u0165 s\u00fa\u010das\u0165ou ka\u017edodenn\u00e9ho \u017eivota v\u00fdvoj\u00e1ra \u2013 podporuje automatiz\u00e1ciu. Ka\u017ed\u00fd developer toti\u017e denne rob\u00ed mno\u017estvo rutinn\u00fdch \u00faloh, ktor\u00e9 ho oberaj\u00fa o \u010das, rados\u0165 <\/span><span style=\"font-style: normal;\">z <\/span><span style=\"font-style: normal;\">pr\u00e1ce a kreativitu. <\/span><span style=\"font-style: normal;\">Pr<\/span><span style=\"font-style: normal;\">\u00ed<\/span><span style=\"font-style: normal;\">pr<\/span><span style=\"font-style: normal;\">a<\/span><span style=\"font-style: normal;\">va v\u00fdvoj<\/span><span style=\"font-style: normal;\">o<\/span><span style=\"font-style: normal;\">v\u00e9ho prostredia je nie\u010do, <\/span><span style=\"font-style: normal;\">\u010do<\/span><span style=\"font-style: normal;\"> v\u00e1s vie zabi\u0165 u\u017e hne\u010f na za\u010diatku projektu. Preto by som odpor\u00fa\u010dal si pr\u00edpravu niekde dokumentova\u0165. Akon\u00e1hle sa to za\u010dne cel\u00e9 komplikova\u0165, tak by som pre\u0161iel na Vagrant.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>U\u017e sa v\u00e1m to niekedy stalo? Pri\u0161li ste na nov\u00fd projekt, potrebujete si pripravi\u0165 v\u00fdvoj\u00e1rske prostredie, aby ste mohli pracova\u0165 a zrazu zist\u00edte, \u017ee to nie je tak\u00e9 jednoduch\u00e9. Ostatn\u00ed developeri to maj\u00fa u seba pripraven\u00e9, ale nikto v\u00e1m nevie poveda\u0165 kompletn\u00fd postup, a tak si to krok po kroku lad\u00edte a sk\u00fa\u0161ate a \u010das [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-97","post","type-post","status-publish","format-standard","hentry","category-vyvoj-softveru"],"_links":{"self":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/97","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/comments?post=97"}],"version-history":[{"count":3,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/97\/revisions"}],"predecessor-version":[{"id":267,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/posts\/97\/revisions\/267"}],"wp:attachment":[{"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/media?parent=97"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/categories?post=97"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spireng.sk\/en\/wp-json\/wp\/v2\/tags?post=97"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}