Přejít k navigační liště

Zdroják » Různé » Úvod do Vagrantu

Úvod do Vagrantu

Články Různé

K čemu slouží Vagrant? Kdy a proč ho použít? To vám představíme v dnešním článku.

Nálepky:

Každý vývojář může pracovat na zcela jiném vývojovém prostředí – s jiným operačním systémem, s jiným webovým serverem a odlišnými verzemi toho všeho. Rozdílné vývojové prostředí může způsobit problémy při nasazování na produkční server, nebo při spolupráci vývojářů na společném projektu. Nutit vývojáře přejít na stejné prostředí není řešením. Vhodnější cestou je použít nástroj, který problémy plynoucí z rozdílnosti vyřeší. Jmenuje se Vagrant a v tomto článku se s ním seznámíme teoreticky.

Co je Vagrant?

Vagrant je nástroj, který vytváří kompletní přenosné vývojové prostředí pomocí virtualizace. V podstatě vytvoří na našem stroji další virtuální počítač, který muže být konfigurován například stejně jako produkční linuxový server.

Vývojář ale nemusí Linux ani znát – o Vagrant mašinu se vůbec nemusí zajímat. Pracuje dál ve svém operačním systému, jak je zvyklý. Mění kód svého projektu a ten se díky automatickému sdílení projektové složky spouští ve Vagrantem vytvořené mašině. Výsledky práce pak můžeme ihned kontrolovat například přes svůj prohlížeč.

Vagrant spojuje technologie pro virtualizaci a nástroje pro konfiguraci serverů. Spolu s Vagrantem je tedy nutné nainstalovat nějaký virtualizační nástroj. Nejznámějším je VirtualBox, který si stáhnete zdarma na https://www.virtualbox.org/wiki/Downloads. Vagrant ale umí pracovat i s dalšími nástroji jako například VMware a Hyper-V.

Pojďme si něco povědět o základních kamenech a pojmech Vagrantu.

Vagrantfile

Vagrantfile je konfigurační soubor psaný v Ruby. Jeho syntax ale nutně znát nemusíte, velmi intuitivně se doplňuje. Abychom Vagrant spustili, musí Vagrantfile existovat. Jeho umístění je ideálně v kořenovém adresáři projektu.

Ve Vagrantfile můžeme nastavit, jakou mašinu má Vagrant spustit. Podstatné je, abychom znali cestu nebo název k image mašiny. V terminologii Vagrantu se těmto připraveným mašinám říká boxy.

Podívejme se, jak vypadá základní Vagrantfile, který postačí, abychom mohli vyvíjet např. svůj PHP projekt.

Vagrant.configure(2) do |config|
  config.vm.box = "scotch/box"
  config.vm.network :forwarded_port, host: 8888, guest: 80, auto_correct: true
end

V tomto ukázkovém Vagrantfile nastavujeme box a síť. Říkame tak, jakou mašinu má Vagrant spustit a na jaký port hostitele má přesměrovat provoz ze svého portu 80. Box je připraven tak, že z něho vznikne linuxová mašina s připraveným LAMP přímo pro vývoj PHP aplikací.

Virtualizace

A jakou mašinu tedy Vagrant spouští? Jakou mu řekneme. Tyto boxy jsou v podobě jednoho souboru, podobně jako image disku.

K webovému vývoji bychom např. mohli potřebovat Linux s již nainstalovaným LAMP serverem. Ve speciálním repozitáři Vagrantu je možné najít předpřipravené boxy (repozitářů a seznamů boxů je na internetu víc), nebo si je můžeme vyrobit sami. Výroba boxu ale vyžaduje vyšší level zkušeností z oblasti systémových administrátorů.

Provisioning

Kromě dalších nastavení lze ve VagrantFile konfigurovat tzv. Provisioning. Je to prakticky následné spuštění dalších skriptů na nově vytvořené mašině. Ty mají většinou také ryze konfigurační účel, například doinstalace některých služeb na server a jejich nastavení.

Provisioning lze provést několika způsoby. Nejjednodušší je použití bash skriptu přímo ve Vagrantfile, nebo jeho připojení jako vedlejšího souboru. Velká výhoda Vagrantu je ale jeho podpora konfiguračních technologií jako jsou Puppet, Chef nebo Docker.

Pokud je váš produkční server konfigurován pomocí těchto technologií, lze použít jejich skripty pro Vagrant a pracovat ve velmi homogenním prostředí. Stejné konfigurační skripty budou použity pro vytvoření produkčních virtuálních strojů i pro lokální vývoj.

Tak tedy vagrant up

Pro ucelení úvodu velmi stručně popíšu, jak Vagrant pracuje a jak se s ním pracuje například z pohledu vývojáře webu. Situace: web je na lokálním disku a v jeho kořenovém adresáři je již nahrán soubor Vagrantfile se vším potřebným nastavením.

Co udělám:

  • V kořenovém adresáři projektu zadám příkaz vagrant up.

Co se stalo:

  • Vagrant příkaz si načetl soubor Vagrantfile,
  • VirtualBox spustí nový virtuální stroj a nainstaluje ho z boxu, v našem případě Ubuntu Linux server s LAMPem,
  • nový stroj nastaví tak, abychom mohli využít sdílení složek a byl přístupný na naší síti,
  • spustí provision script, pokud je nějaký nastaven ve Vagrantfile, například vytvoření databáze apod.

 

6 výhod Vagrantu:

1. Vývojové prostředí = produkční prostředí, což vede k minimalizaci chyb

S Vagrantem máte jistotu, že vyvíjený projekt poběží bez problémů na produkčním serveru. Vývojové prostředí je totiž díky virtualizaci zcela identické s produkčním. Výmluva typu: “Ale u mně na lokálu to běží” je minulostí.

2. Vývojáři vyvíjejí na stejném prostředí vůči projektu

Každý projekt může mít rozdílné produkční prostředí. S Vagrantem nepřenášíte jen projekt mezi vývojáři, ale přenášíte projekt i s nastavením celého produkčního prostředí, které si každý spustí lokálně.

3. Můžeme rozjet několik i zcela rozdílných prostředí najednou

I kdybychom potřebovali jen hodinu pracovat na projektu, který potřebuje PHP 5.4 a databázi MySQL a druhou hodinu na projektu na NodeJS a MongoDB – s Vagrantem je jednoduché během chvilky takové projekty lokálně rozjet napoprvé a klidně i najednou.

4. Pro konfiguraci virtuálních strojů lze použít stejných skriptů jako na hostingu

Kdo používá Puppet, Chef, Docker a další nástroje pro konfiguraci, silně využije tyto možnosti pro nastavení lokálního stroje přes Vagrant provisioning.

5. Rozjetí projektů bez komplikací

Vagrant nám zajistí spuštění projektu a jeho stabilního rozjetí pomocí jediného příkazu. Přijde-li například do firmy nový vývojář, nemusí si instalovat nic jiného než Vagrant a virtualizační nástroj k tomu, aby mohl okamžitě začít pracovat na projektech. Neztrácí čas řešením problému s vývojovým prostředím.

6. Licence zdarma

Licenčně je Vagrant zdarma, dokonce i pro komerční využití, stejně jako např. VirtualBox.

Závěr

Místo složitého zjišťování nastavení lokálního prostředí může mít každý projekt v GIT repozitáři svůj Vagrantfile. Jediné, co pak musí vývojář udělat, je “vagrant up”, a může vyvíjet.

U nás v AITOMu mají programátoři a kodéři snad všechny druhy operačních systémů různých verzí. Vagrant nám dává jistotu, že nás nečekají žádná překvapení způsobená rozdílností tolika prostředí. A když přijde nováček, za pár minut může pracovat. Vyzkoušejte to. Výsledkem bude velmi profesionální a efektivní přístup k vývojovému prostředí.

V budoucnu bych se Vagrantu rád dál věnoval a napsal o jeho použití v praxi.

AITOM nabízí komplexní řešení, od vstupní studie přes vývoj webu až po internetový marketing, a díky tomu dokáže nést odpovědnost za stanovené výsledky. Aktuálně sháníme nové kolegy a kolegyně do našeho týmu.

Komentáře

Subscribe
Upozornit na
guest
10 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Kaja

Předpokládejme, že bych chtěl začít používat Vagrant nebo Docker pro vývoj v jednotném prostředí. Jaký je mezi nimi fundamentální rozdíl? Má nějaký smysl používat Docker přes Vagrant, když to jde nainstalovat samostatně? Jak je to s deploymentem do produkce? Předpokládám, že obrazy z Dockeru jdou nasazovat opět jen do Docker containeru (tzn. je nutné používat Docker i na produkci).

Děkuji za každou odpověď k tomuto tématu.

VerosK

Nemá moc smysl srovnávat Vagrant a Docker, nejsou to dvě konkurenční technologie. Vagrant je pouze wrapper, který automatizuje spouštění a konfiguraci (bootstrap) nějaké virtualizace – nejčastěji VirtualBoxu. Vagrant ale umí bootstrapovat i mašinu na Xenu, AWSu, LXC a prý i Dockeru.

Věroš

Lukáš Havrlant

Má smysl používat Vagrant spolu s Dockerem, protože Docker neběží na všech OS stejně dobře (nebo tam neběží vůbec). My to používáme (viz můj nedávný článek zde na Zdrojáku) právě proto. Ve Vagrantu virtualizujeme CentOS a v něm až spouštíme Docker kontejnery a máme minimum problémů s tím, že někdo má Linux, někdo Windows a někdo OS X.

Fundamentální rozdíl bude asi v tom, že Docker kontejnerů nám může na jedné mašině běžet bez problémů třeba padesát, zatímco padesát virtualizovaných OS už by to neutáhlo.

V produkci Docker kontejnery nepoužíváme, ale časem bychom je rádi používali.

Finch

Docker a vagrant nie sú podĺa mňa konkurenčné technológie. Skôr by som povedal, že sa navzájom dopĺňajú. Napr. na taký docker pre OSX je možné použiť vagrant file s tinycore linuxom, namiesto boot2docker.

to je jedno

mame ve firme cisty vmdk do virtualboxu s kompletnim nastavenim stejnym jako produkce, predpripravene IDE a vsechny ostatni nastroje(git, phpmyadmin, meld, libreoffice apod). Kdyz prijde nekdo novy tak si ho stahne, vytvori v v nem usera a jede. Jednou za cas dostanou vsichni povel „udelat update123.sh“ (= wgetem stahnout a aplikovat) abychom drzeli dale stejne verze.

V cem je vagrant jiny? Je pro nas nepotrebny protoze neresime jina prostredi nez nas LAMP?

Jakub Kulhan

Mít kopii produkčního prostřední spuštěnou lokálně ve virtuální mašině / virtuálních mašinách může být z důvodů výkonu nebo velikosti databáze, se kterou je potřeba pracovat, někdy dost problém. Našel jsem pluginy do Vagrantu na spouštění virtuálů v AWS (https://github.com/mitchellh/vagrant-aws) anebo DigitalOcean (https://github.com/smdahlen/vagrant-digitalocean). Existuje však něco pro VPSky? Nebo se na tohle Vagrant vůbec nehodí a je lepší použít něco jiného (co?)?

Mario Vejlupek

No predevsim by vas VPS provider musel mit nejake API pomoci ktereho by se dal vytvaret novy server. Pak by se dal upravit napriklad vami zminovany provider pro digitalocean ( ruby ) a bylo by. Jinak to nema moc zmysl protoze, pak jedine co by vagrant delal je ze by pripojil filesystem a to by bylo asi tak vsechno. To mi prijde jako malo muziky za tolik ruby programovani, protoze pripojeni disku nebo rsync je otazkou jedne radky navic by se dost pravdepodobne rvali ruzni vyvojari na jednom serveru.

Urcite by slo naistalovat na VPS Docker a pouzit ho jako provider ktery je primo ve vagrantu http://docs.vagrantup.com/v2/docker/

p.s. take bych zkusil udelat odlehcenou verzi databaze pro vyvoj, protoze presunuti problemu s vykonem na server dlouhodobe nic neresi ;)

Michal Valoušek

Má smysl je srovnávat protože obě technologie umožňují vyvíjet produkční aplikaci na „libovolném“ HW.

Principiálně ti je jedno jestli použiješ Vagrant nebo Docker. Chceš blackbox, který bude co nejpodobnější produkčnímu prostředí. Jestli si to zařídíš Vagrantem nebo Dockerem ti je jedno, záleží spíš na tom s čím se ti dělá líp nebo máš větší zkušenosti.

Michal Valoušek

Pokud dokážeš alespoň minimálně administrovat linuxový stroj, jsi zvyklý na SSHčkování a klasický přístup, asi ti bude víc vyhovovat Vagrant. Jak psal Lukáš Havrlant, na noťasu si dokážeš rozjet maximálně jednotky samostatných boxů (každý z nich reprezentuje virtualizovaný stroj a to stojí nějaké systémové prostředky). Záleží jak vypadá vaše produkční prostředí, možná budeš dotlačen ke kompromisům (např. budeš musit některé služby sloučit pod méně Vagrantních boxů než kolik máte produkčních mašin).

Naproti tomu je Docker mnohem lehčí aparát. Každý puštěný kontejner připomíná spíš proces než virtuální mašinu, můžeš si jich pustit hodně, startují v řádech vteřin (vagrant boxy v řádech minut). Přichází s nimi ale taky trochu jiný styl práce. Na SSH zapomeň, možná ti začne dávat větší smysl přepracovat svou aplikaci na sadu microservices (co kontejner to jedna služba). Musíš se k nim začít stavět spíš k jako binárním jepicím, které můžeš neustále pouštět a zabíjet. Pokud chceš v některém z kontejnerů udržet stav, musíš si jej nějakým mechanismem vytáhnout ven (sdílené disky, externí služby). Přibude ti práce s orchestrací kontejnerů (pravděpodobně je budeš chtít mezi sebou nějak propojovat). Jednou vytvořený a odladěný docker image můžeš přenést na produkci a používat jej bez úprav (pravděpodobně jej budeš spouštět s jinými parametry, ale uvnitř to zůstane stejné).

Ať už ale použiješ Vagrant nebo Docker, tak se dopředu smiř s tím, že 100% identické prostředí se ti na lokále spíš nepodaří nasimulovat.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.