10/2015 / Milan "perún" Herda / @moriquend / hrad.perunhq.org
Vagrant je nástroj poskytujúci jednotné konfiguračné rozhranie k viacerým virtualizačným riešeniam (VirtualBox, VMware, AWS...).
Cieľom je uľahčiť tvorbu, konfiguráciu a klonovanie virtuálnych serverov.
1. Jednotné vývojové prostredie pre vývojárov so zachovaním osobných preferencií
2. Žiadna potreba konfigurácie pre členov tímu
3. Bezpečné prostredie pre testovanie a pokusy
Jednotné vývojové prostredie a zároveň možnosť pracovať so svojimi obľúbenými nástrojmi je zabezpečená zdieľaním projektového adresára medzi počítačom a virtuálnym serverom.
V praxi len zopár ľudí z tímu pripravuje konfiguráky pre Vagrant a zvyšok tímu ich len pasívne používa.
Napriek tomu je dobré, pokiaľ jednotlivý vývojári vedia o Vagrante viac, než len základné príkazy.
Keď vám už niekto dal Vagrantfile
Naštartuje virtuálny server. Je to ekvivalent k spusteniu počítača.
Pokiaľ ide o prvé spustenie, tak bude trvať dlhšie, lebo virtuálny server je potrebné najskôr "nainštalovať".
Vypne virtuálny server. Ekvivalent k vypnutiu počítača.
Pokiaľ ste robili na serveri nejaké zmeny, tak tieto sa nestratia.
Pripojenie sa na virtuálny server, pokiaľ na ňom potrebujete vykonať nejaké príkazy.
Súbor (zväčša) v adresári projektu, ktorý definuje konfiguráciu virtuálneho servera.
Je to obyčajný zdroják v Ruby (čo dáva veľmi široké možnosti).
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise32"
end
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise32"
config.vm.network "forwarded_port", guest: 80, host: 8080
end
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise32"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.synced_folder "../data", "/vagrant_data"
end
Vagrant.configure(2) do |config|
config.vm.box = "hashicorp/precise32"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.synced_folder "../data", "/vagrant_data"
config.vm.provision "shell", inline: <<-SHELL
sudo apt-get update
sudo apt-get install -y apache2
SHELL
end
Provisioning je konfigurácia a customizácia servera po "inštalácii":
Keďže Vagrantfile je obyčajný zrojový kód v Ruby, tak možnosti provisioningu sú v podstate neobmedzené.
Ruby môže vykonať hocijaký príkaz alebo odovzdať kontrolu inému skriptu.
Táto vlastnosť sa využíva na tvorbu rôznych nástrojov zjednodušujúcich prípravu Vagrantfile.
Napríklad PuPHPet
Nainštalujem si u seba CI nástroj, ktorý mi spustí testy pre Domeliu vždy, keď sa urobí push do vybraných branchov.
CI nástroje fungujú tak, že pre každé spustenie vytvárajú nový build projektu.
Tj. naklonovanie projektu, composer, bower, grunt, tvorba databázy...
Zabezpečuje sa tým kontrola, že projekt je vždy v zostaviteľnom stave, čiže všetky kroku od naklonovania repozitáru až po úspešné rozbehanie sú bez problémov.
Projekt musí mať nejakú konfiguráciu, ktorou sa CI nástroj bude riadiť by tvorbe buildu.
Táto je zväčša uložená v špeciálnom súbore v adresári projektu (.travis.yml, phpci.yml atď)
Kvôli vytváraniu databázy musí byť v konfiguráku a zdrojákoch projektu uložené heslo k databáze pre používateľa s root právami.
Lenže každý má svojho usera a svoje heslo
Nedám predsa svoje heslo hocikomu k dispozícii
Prevádzkovať CI v prostredí, ktoré je bezpečné a kde nebude prekážať znalosť root hesla k databáze.
Virtuálny server!