Vagrant … oder, des WebDevs neuer Liebling

Welcher WebDev kennt das nicht? Es steht ein neues Projekt an. Das heißt, neue Systemlandschaft, neue Technologien, neue Komponenten, andere Versionen von PHP, MySQL und wie sie da alle heißen. Tja, der lokale Webserver war schon so toll eingerichtet und alles hat funktioniert und nun das. Verdammt.
Üblicher Weise geht es jetzt los, das große Gefrickel. Den lokalen Webserver so umstricken, dass das neue Projekt lokal so nah wie möglich dem zukünftigen Produktivsystem nachempfunden aber weiterhin kompatibel zu den alten Projekten ist. Mit hoher Wahrscheinlichkeit bedeutet dies Administrations-Schmerz und das Eingehen von Kompromissen. Nun, muss das sein? Klare Aussage: Nein, dank Vagrant.

Vagant ist im Grunde eine einfache Möglichkeit der Virtualisierung von Systemumgebungen. Es geht jedoch einen Schritt weiter und kommt mit einer sehr einfachen Handhabung, einer automatisierten Dateisynchronisierung und der Möglichkeit des Sharing daher, alles Out of the Box.

Die Installation von Vagrant ist extrem einfach und geht schnell von der Hand.

Step 1 – Installation von Vagrant

Einfach die geeignete Version auf der Vagant Download Seite heraussuchen, installieren, fertig.

Step 2 – Installation von Oracle VirtualBox

Vagrant setzt im Standard auf die Virtualisierungssoftware VirtualBox von Oracle auf. Auch von dieser sucht man sich die passende Version zum Betriebssystem aus, herunterladen, installieren.

Step 3 – Vagrant Box für Projekt initialisieren

So, es geht los. Auf ins gute Terminal, und:

  • Projektverzeichnis anlegen
  • Vagrant Box initialisieren
  • Vagrant Box starten
$ mkdir vagrantProjectFolder
$ cd vagrantProjectFolder
$ vagrant init hashicorp/precise32
$ vagrant up

Was ist passiert? Vagrant hat aus der Vagrant Cloud eine Box heruntergeladen, initialisiert, mit unserem Projekt verknüpft und gestartet. Inhalt dieser Box ist ein rudimentäres Ubuntu, welches relativ „nackig“ daher kommt. Kein Webserver, keine Datenbank, nichts. Und das ist exakt unser Ausgangspunkt, um diese Box so anzupassen, dass sie auf unser neues Projekt zu 100% abgestimmt ist.

Step 4 – Vagrant Box konfigurieren

Als erstes erstellt man ein shell Skript (bootstrap.sh), welches im Projektverzeichnis abgelegt wird.

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

Diese stellt sicher, dass ein Apache installiert ist wenn die Box gestartet wird. Ist dies nicht der Fall, kümmert sich Vagrant selber darum und installiert diesen.

Nun muss nur noch das im Projekt befindliche Vagrant File erweitert werden. Es stellt die Konfiguration der Vagrant Box bereit. Einfach die folgenden zwei Zeilen hinzufügen:

config.vm.provision :shell, :path => "bootstrap.sh"
config.vm.network :forwarded_port, host: 8888, guest: 80

Hiermit stellen wir sicher, dass bei jedem Vagrant Box Start unser Shell Script ausgeführt wird und dass das Port Forwarding auf Port 8888 der Host-Maschine aktiv ist. Hierzu später mehr.

Nun nur noch ein mal die Box neu starten und die neue Konfiguration laden:

$ vagrant reload
$ vagrant provision

Fertig. Das war alles. Wir haben nun eine kleine, feine virtualisierte Umgebung mit einem Ubunutu, in dem ein Webserver läuft. Diese Umgebung können wir nun nach Herzenslust auf unser Projekt weiter anpassen, ohne unsere Host-Maschine zu „verbiegen“. Kurz zum Thema Port Forwarding. Der Zugriff auf den Webserver via Browser ist unter der URL http://localhost:8888/ möglich. Exakt dies macht die Einstellung im Vagrant File möglich.

Weitere Vorteile

Der Hauptvorteil, dass man ein autarkes System für ein spezielles Projekt hat, liegt klar auf der Hand. Aber gibt es eventuell noch mehr? Ja, klar.
Arbeitet man in einem Team an einem Projekt, so können (und sollten) das Vagrant File und das Shell Skript für das Team verfügbar gemacht werden. Idealer Weise via Check In in das Codeverwaltungssystem der eigenen Wahl. Dadurch wird die Vagrant Box Konfiguration für alle Team Mitglieder verfügbar. Starten diese die Box zum ersten mal nach dem Check Out aus der Codeverwaltung, wird diese nach den Angaben/der Konfiguration des Vagrant Files/Shell Skriptes automatisch eingerichtet und ist binnen kürzester Zeit verfügbar. Damit wird auch sicher gestellt, dass alle Team Mitglieder auf der gleichen technischen Basis arbeiten, womit viele Fehlerquellen ausgeschlossen werden können.
Darüber hinaus besitzt die PHP Entwicklungsumgebung PHPStorm, von der ich ein treuer Fan bin, eine Vagrant Integration, was Ausflüge auf die Kommandozeile obsolet machen. Starten/Stoppen/Neu Laden, alles per Klick und Logging im Info-Fenster.

Weitere Informationen, Dokumentation rund um das Thema Vagrant findet sich hier: Vagrant Box Dokumentation

Ronny Hartmann-Schmidt

Über Ronny Hartmann-Schmidt

Ronny ist Autor bei Hartmann-schmidt.de, Projektmanager für Software-Projekte und begeisterter Web-Entwickler.

05. Mai 2014 von Ronny Hartmann-Schmidt
Kategorien: Technisches | Kommentare deaktiviert für Vagrant … oder, des WebDevs neuer Liebling