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