Vagrant met shell provisioning

Automatisering is een codewoord waarop je de afgelopen weken al in verschillende blogposten botste (zie bvb. automatisatie van php unit-testing en front-end taken). In deze blogpost gaan we dieper in op de automatisatie aan de sysadmin-kant die we bij Intracto doorvoeren.

Vagrant maakt het mogelijk om automatisch virtuele machines aan te maken, te configureren en reproduceren. Die virtuele machines kunnen van verschillende types zijn, zoals bijvoorbeeld VirtualBox.

Het grote voordeel van het werken met Vagrant is dat je je developmentomgeving identiek kan maken aan productie. Op deze manier kan een developer werken op een omgeving met dezelfde PHP-versie/MySQL/OS versie..  Als het project moeilijk op te zetten packages nodig heeft, worden deze nu automatisch geïnstalleerd en moet de developer zich hier geen zorgen over maken.

vagrant logo

Hoe Intracto met Vagrant werkt

De sysadmins van Intracto voorzien de lege basis "boxen", daar gebruiken we VeeWee voor. Vagrant downloadt de box de eerste keer eerst van het netwerk en kent er IP-adres(sen), CPU's, memory etc. aan toe. Dit kan je zelf configureren in het bestand Vagrantfile. Daarna start Vagrant de provisioning en kan je de box gebruiken:

Vagrant start de vm (virtual machine) zonder GUI (vb: VirtualBox), je kan ook dit configureren in de Vagrantfile.

Drive mapping

In de Vagrantfile staat ook de VirtualBox drive mapping. De directory /vagrant in het guest-systeem is dezelfde als de directory waar je Vagrantfile zich op je host systeem bevindt. Zo kan je coderen op het host-systeem en is de code automatisch up-to-date in de guest. Deze mapping gebeurt voor elk besturingssysteem op een andere manier:

  • NFS op Linux en Mac.
  • Op Windows werkt dit via VirtualBox shared folders en is dit onwerkbaar traag. Voor Windows zijn er wel workarounds (rsync-auto, NFS for Windows, ...) 

Het is dus duidelijk dat de drive mapping in Linux en Mac superieur is ;-)

Provisioning

Provisioning is het installeren van alle software (PHP / Apache / MySQL) in de box. Er bestaan enkele provisioning oplossingen (Puppet, Chef, Ansible). Deze zijn vooral interessant om meerdere productiesystemen mee te onderhouden, maar betekenen toch een beetje overkill voor Vagrant. Bovendien is er een leercurve en hebben die provisioners ook altijd hun dependencies en quirks.

Bij Intracto gebruiken we shell provisioning voor Vagrant. In de map shell_provisioning bevindt zich een script run.sh dat de dependencies zal installeren. Deze dependencies zijn shell scripts in de module folder en worden in volgorde uitgevoerd. Als er configuratie nodig is zal deze zich in de config folder bevinden.

Je zet de commando's die je normaal ook zou intypen om iets te installeren gewoon in een module shell script. Dit wordt dan uitgevoerd bij vagrant up.

Wat zit er in?

Vagrant zit automatisch in al onze projecten en is altijd volledig geoptimaliseerd voor onze Drupal- en Symfonyprojecten. Er is dan ook steeds een basis LAMP stack aanwezig.

PhpMyAdmin is bereikbaar op /phpmyadmin, Roundcube webmail is bereikbaar op /roundcube. Alle mails die verstuurd worden op het systeem worden onderschept en in de Roundcube webmail afgeleverd. Zo kan je niet per ongeluk testmails naar echte klanten sturen.

We hebben een Intracto BitBucket repository waar je extra modules kan downloaden, zoals bijvoorbeeld Tomcat / Solr, IP tables, Memcache, Gearman, node.js, ...

Uitbreiden

Om te testen of de provisioning volledig goed werkt zal je een vagrant destroy && vagrant up moeten uitvoeren, we hebben namelijk geen updatefunctionaliteit. Dat is een beetje jammer maar eigenlijk ook gewenst. Een Vagrant box mag geen eigen leven leiden dus is het niet erg om deze eens opnieuw te bouwen. Bovendien duurt dat maar een paar minuutjes en ben je zeker dat een clean setup werkt.

Conclusie

Shell learningVagrant is een goed alternatief voor de klassieke WAMPP / XAMPP / MAMPP setups. Je kan snel automatisch een project opzetten zonder zelf packages en services te moeten configureren. Shell provisioning is eenvoudig, maar keep it simple, zeker if you ain't gonna need advanced features.

Meer weten? Contacteer ons!

Door Intracto