Vagrant
Vagrant is een box configuratie, een computer setup, aangestuurd door een enkel bestand, de Vagrantfile. In andere woorden, een Vagrantfile bevat de eigenschappen van een machine, en Vagrant zorgt voor de installatie van die (virtuele) machine met zijn eigenschappen. Hierdoor kun je makkelijk setup’s delen, en zodoende allemaal in identieke omgevingen werken.
Maar hoe simpel het ook klinkt, er gaat altijd iets mis. Dus deze blog, om de stappen even door te lopen.
Installeer Virtualbox en Vagrant als dit nog niet gebeurd is. Zoek daarna een box uit op de [Vagrant website][1]. Die kun je starten via init, bijvoorbeeld een Ubuntu 16.04, die versie noemen ze xenial.
vagrant init ubuntu/xenial64
Wat Vagrant nu doet is de box downloaden en opstarten. De plek waar je de init uitvoerd is normaal gesproken in de root van een git project. De Vagrantfile deel je. En wat je ziet op deze locatie is een net aangemaakte Vagrantfile, dit is het configuratiebestand dat we naar wens aan gaan passen.
De plek waar je de init hebt gedaan is ook de gedeelde locatie of de shared folder. Deze plek zie je in de machine onder /vagrant
. Ik kom hier zo nog even op terug.
Eerst wat aanpassingen om de omgeving geschikt te maken. Aanpassingen doe je in de config, en de eerste configuratie, de box, heeft Vagrant al voor je neergezet:
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"
# etc
end
Wat ik vaak doe is port forwarding, waarbij je eigen PC de host is, en de Vagrant box de guest.
# web draait op 80
config.vm.network "forwarded_port", guest: 80, host: 8080
# eventueel extra poorten
config.vm.network "forwarded_port", guest: 8080, host: 8082
De IP van de box kun je vastzetten:
config.vm.network "private_network", ip: "192.168.33.10"
En je kunt aanpassingen specifiek op de provider – in dit geval Virtualbox – doen:
config.vm.provider "virtualbox" do |vb|
# Wil je een GUI? Dan true, anders heb je alleen SSH
# vb.gui = true
# Hoeveel geheugen
vb.memory = "1024"
end
Nu kun je de machine nog verder bijwerken. Software installeren bijvoorbeeld, zodat je zeker weet dat iedereen op dezelfde versies van alle tools werkt. Als je weet hoe je deployment omgeving eruit ziet kun je dat hier namaken.
Je kan de commands doorgeven via een extern script:
config.vm.provision :shell, :path => ".provisioning/setup.sh"
Dat setup.sh
bestand ziet er dan bijvoorbeeld zo uit:
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
Of via inline script zoals bijvoorbeeld:
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
SHELL
Voor ik verder ga met wat provisioning tips, eerst even de standaard commando’s voor Vagrant:
Opstarten, afsluiten en herstarten van de box doe je via:
vagrant up
vagrant halt
vagrant reload
Opnieuw opstarten met nieuwe provisioning, voor als er wijzigingen in de Vagrantfile zijn geweest:
vagrant reload --provision
Als er scripts of commando’s zijn die bij iedere up
of reload
uitgevoerd moeten worden dan kan je dit aangeven met de run always parameter: