Vagrant met shell provisioning | Intracto
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 up # start de vm
vagrant stop # stop de vm
vagrant destroy # verwijder de vm
vagrant ssh # log in op de vm
Vagrant start de vm (virtual machine) zonder GUI (vb: VirtualBox), je kan ook dit configureren in de Vagrantfile.
config.vm.define :php7 do |php7|
php7.vm.box = "Debian77"
php7.vm.box_url = "http://build.your.own/Debian77.box"
php7.vm.provider "virtualbox" do |v|
# show a display for easy debugging
# Allow symlinks on the shared folder
# Shared folder over NFS
php7.vm.synced_folder ".", "/vagrant", type: "nfs"
php7.vm.network "private_network", ip: "192.168.33.30"
php7.vm.provision :shell, :path => "run.sh"
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:
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.
shell_provisioner/
│ │ └── app.vhost.conf
│ └── hosts.txt
│ ├── debian.sh
│ ├── tools.sh
│ ├── vim.sh
│ ├── mysql.sh
│ ├── phpmyadmin.sh
│ └── roundcube.sh
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.