22.042012

Entwicklungsumgebung mit vagrant

Gerade, wenn man an großen, langlebigen und mehreren Projekten gleichzeitig arbeitet, hat man oft das Problem, dass sich die Umgebung der einzelnen Projekte stark unterscheiden.

Das gerade frisch begonnene Projekt laeuft natuerlich mit PHP 5.4, die vor 3 Monaten gelaunchte Website benutzt PHP 5.3 und PostgreSQL 9 und das Uraltprojekt von vor 5 Jahren braucht PHP 4 und PostgreSQL 8.

Wie schafft man es nun, dass man alle 3 Projekte weiterentwickeln kann, ohne sich 3 verschiedene System aufsetzen zu muessen, die die jeweiligen Anforderungen erfuellen?

Die Lösung heißt Vagrant.
Vagrant nutzt zum Erstellen von viruellen Maschinen VirtualBox und Puppet oder Chef für die Installation und Konfiguration der Software.

Damit nicht bei jedem Start der Maschine Speicher, Plattenpartitionierung etc. konfiguriert werden muss, baut man sich zuerst ein Image, welches schon grundlegend konfiguriert ist. Vagrant stellt schon ein Ubuntu Lucid Image zur Verfügung.

Die detaillierte Konfiguration der Maschine bzw. des Projekts (ein Projekt kann mehrere VM's enthalten) wird im sogenannten Vagrantfile vorgenommen.

Dort steht beispielsweise die Netzwerkkonfiguration drin. Außerdem ist im vagrantfile definiert, welche Pakete in der VM installiert werden sollen, natürlich kann man auch Verzeichnisse vom Hostsystem in die VM mounten - auch das steht im vagrantfile.

Eine detaillierte Konfigurationsbeschreibung würde hier zu weit führen, ggf. gibt es dazu einen weiteren Blogeintrag :-)

So kann man nicht nur sehr einfach für unterschiedliche Projekte unterschiedliche Entwicklungsumgebungen zur Verfügung stellen, sondern auch für jede Version eines Projekts.

Das geht ganz einfach: Man versioniert einfach sein vagrantfile zusammen mit dem Sourcecode des jeweiligen Projekts. Checkt man sich nun eine 2 Jahre alte Version aus, hat man kein Problem mehr damit das alte Projekt zum Laufen zu kriegen, obwohl es heute vll. schon mit PHP 5.4 und damals noch mit PHP 5.0 lief....