Meine Entwicklungsumgebung

April 05, 2016

Langweilig wird es als Webentwickler ja nicht. Ständig neue Versionen und Technologien. Da muss man am Ball bleiben und sich schnell den veränderten Anforderungen anpassen. Eine möglichst flexible Entwicklungsumgebung, welche trotzdem dem Anspruch auf Reproduzierbarkeit gerecht wird ist hier wichtig. Ich habe wirklich viel ausprobiert, am Anfang waren Tools wie MAMP / XAMP / AMPPS noch ausreichend. Als das nicht mehr reichte und mehr flexibilität gefragt war habe ich angefangen eigenen Linux-Boxen auf zu setzen. Dabei ging aber einfach immer extrem viel Zeit für das initiale Setup und die Pflege drauf. Sobald dann andere Entwickler mit ins Team kamen musste die Box verteilt und bei jedem auf dem gleichen Stand gehalten werden.

Ich habe mir dann Chef und Ansible angesehen. Beides extrem interessant aber man merkt doch schnell, dass beide weit mehr können als man für eine Entwicklungsumgebung braucht und dafür die Lernkurve recht steil ist. Ich bin dann über Vaprobash gestolpert und dabei geblieben. Vaprobash bietet genau das was ich mir für meinen Entwicklungsumgebung wünsche. Flexibilität, Reproduzierbarkeit, überschaubares Featureset und Erweiterbarkeit. Außerdem ist es möglich mehrere Boxen / Projekte mit unterschiedlichen Features gleichzeitig zu verwalten und sogar zu starten.

Benötigt wird VirtualBox und Vagrant und ein paar einfache Schritte die für jedes Projekt anfallen. Das hier ist kein vollständiges Tutorial, vor allem wenn man noch keine Erfahrung mit der BASH hat sollte man sich eher was anderes suchen.

  1. Projektordner anlegen
  2. In den Projektordner das aktuelle Vagrantfile aus dem Repository legen.
  3. Daneben den Root-Ordner für den Webserver der Virtuellen Maschine (VM) Erzeugen. Ich nehme hier meist "www" Später legen wir in unserem Editor / unserer IDE diesen auch als Root fest.
  4. Vagrantfile editieren
    1. hostname (Zeile: ~16) ändern. Ich nehme immer projektname.dev
    2. server_ip (Zeile: ~24) ändern. Sollte in einem anderen Netzwerkbereich liegen wie euer LAN in dem ihr seit
    3. Ich setzte auch immer gleich server_cpus und server_memory etwas hoch (2 bei cpus 2048 bei memory)
    4. server_timezone "Europe/Berlin" wenn der Server später auch hier steht.
    5. Ab Zeile: ~36 bis ~90 kann man ein paar Konfigurationseinstellungen und Versionsnummern wählen
      1. Am wichtigsten ist hier die Angabe des "public_folder" bei mir meist /vagrant/www. Der Ordner /vagrant wird auf das Projektverzeichnis verlinkt.
    6. Richtig interessant wird es ab Zeile ~188 hier sind nun die einzelnen Pakete aufgeführt welche der VM hinzugefügt werden können. Einfach den Kommentar vor der entsprechenden Zeile entfernen. Dabei sollte man beachten das sich manche Pakete logisch beißen. Man sollte also entweder Apache oder NGINX auskommentieren, aber nicht beide.
  5. Ist alles konfiguriert geht es ins Terminal und mittels cd in das Projektverzeichnis.
  6. Wir sollten jetzt neben dem Vagrantfile und Root-Ordner sein. Jetzt ein vagrant up --provision und der Spaß beginnt
    • Beim ersten mal wird die Base-Box heruntergeladen, für alle zukünftigen Projekte wird diese dann nur noch lokal kopiert
    • Vagrant fragt uns unter OS X nach dem User-Passwort, damit unser lokaler Ordner "www" in die Box gelinkt werden kann
    • Dann passiert ganz viel Installationszeug in der Box, dabei gibt es auch rote Ausgaben die aber nicht unbedingt Fehlerausgaben sind.
  7. Irgendwann ist die Installation dann fertig. Damit wir auf die Box mittels ihres namen Zugreifen können editieren wir das Hosts-File unserer Gastsystems. Unter OS X liegt es unter /etc/hosts. Da rein die IP und den Hostname wie in das Vagrantfile geschrieben.
  8. Im Browser kann jetzt projekname.dev aufgerufen werden.

    Ich lege das Vagrantfile immer mit in das Projekt-Repository, der Ordner .vagrant kommt in die .gitignore. Jetzt können alle Teammember die das Repo auschecken und in das Projektverzeichnis wechseln mit den Schritten 6 - 8 ihre lokale Entwicklungsumgebung installieren. Das schöne alle arbeiten mit den gleichen Software-Versionen.

    Vaprobash bringt schon sehr viel mit, für weitere Spezialfälle schreibe ich mir dann einfach eigene lokale Installer und lege die mit in das Repo. Dabei lässt sich in den bestehenden Skripten einiges abschauen.

    Aktuell (Stand: 5.4.2016) gibt es noch kein PHP 7 in Vaprobash und MongoDb 3.2 hat mir auch gefehlt. Ich habe deshalb einen Fork erstellt welcher beides bietet. Nehmt ihr dieses Vagrantfile könnt ihr sowohl PHP 7 also auch MongoDB 3.2 einfach per Anpassung des Vagrantfiles installieren lassen.