Vagrant

Ich habe neulich Vagrant für mich entdeckt. Ein Tool um Entwicklungs- und Testumgebungen einrichten zu lassen. Kurz gesagt: Vagrant ist in der Lage virtuelle Maschinen herunterzuladen, anhand einer Konfigurationsdatei mit Hilfe von Skripten zu konfigurieren und zu starten. So steht eine voll funktionsfähige Umgebung zum Entwickeln und Testen zur Verfügung. Vagrant unter Windows einzurichten hat mich allerdings einiges an Recherchearbeit gekostet. Wie es geht habe ich in diesem Artikel zusammengefasst.

Vagrant installieren

Die Dokumentation von Vagrant enthält alle wichtigen Informationen und sollte der Startpunkt für die Arbeit mit Vagrant sein. Die Installation ist unter Windows allerdings sehr einfach, da auf der Downloadseite ein MSI-Paket bereitsteht.

Git installieren

Vagrant ist dazu gedacht die Arbeit in Teams zu erleichtern. Mit Hilfe von Vagrant ist es möglich immer identische Test- und Entwicklungsumgebungen bereitzustellen, die so jedem Entwickler zur Verfügung stehen. Besonders mächtig ist Vagrant also in Verbindung mit einer Quellcodeverwaltung wie Git. Git liefert unter Windows ebenfalls einen SSH-Client mit, der von Vagrant genutzt werden kann um sich in der VM einzuloggen. Um Vagrant dazu zu bewegen diesen zu nutzen muss der Pfad in dem die ssh.exe liegt (C:\Program Files (x86)\Git\bin) der PATH-Umgebungsvariable hinzugefügt werden. Git hat also viele Vorteile und kann so einfach wie Vagrant mit einem Installer installiert werden. Der Installer kann direkt von der Downloadseite heruntergeladen werden.

vagrant-catalog

Vagrant erstellt zum Arbeiten einen Klon einer bestehenden VM. Es müssen also bereits VMs bereitstehen von denen geklont werden kann. Diese VMs werden Baseboxes genannt. Solche Boxen können von hashiorp.com herunterladen werden. Als Kontrollfreak fand ich die Möglichkeit cool eigenen Boxen zu erstellen. Mit einem Tool lässt sich so ebenfalls ein eigener “Katalog” bereitstellen, von dem Vagrant seine Baseboxen beziehen kann. Das Tool vagrant-catalog ist eine PHP-Anwendung, die sie mit jedem beliebigen Webserver laufen lassen können. Für die Installation wird Git und Composer vorausgesetzt. Auf der Downloadseite von Composer wird ebenfalls die Installation für Linux- und Windowssysteme beschrieben.

Ist Git und Composer auf Ihrem Server installiert kann die Anwendung in ein Verzeichnis geklont, werden, dass vom Webserver ausgeliefert wird. Danach werden alle benötigten Komponenten mit Composer heruntergeladen. config.php.dist wird als Vorlage für die Konfigurationsdatei genutzt indem eine Kopie mit dem Namen config.php erstellt wird.

git clone https://github.com/vube/vagrant-catalog /var/www/httpdocs
cd /var/www/httpdocs
composer update
cp config.php.dist config.php

Die Defaultwerte sollten Funktionieren. Es wird allerdings erwartet, dass die VMs in einem Unterordner files liegen. Dieser muss noch angelegt werden. Nun steht ein eigener Katalog bereit, von dem Vagrant Baseboxes herunterladen kann.

vagrant-boxer

Es gibt ein kleines PHP-Skript das beim Erstellen einer Basebox hilft. Dazu muss allerdings PHP auf eurem System installiert sein. Am einfachsten geht dass mit einer XAMPP-Installation. Diese will man zwar eigentlich überflüssig machen indem man Vagrant nutzt aber fürs Prototyping kann sie auch mal nützlich sein. Wieder wird mit Git geklont und mit Composer aktualisiert.

git clone https://github.com/vube/vagrant-boxer
cd vagrant-boxer
composer update

Mit einer Konfigurationsdatei boxer.json kann die Erstellung der Basebox gesteuert konfiguriert werden. Details dazu sind auf der Downloadpage zu finden. Name, ID, Version und URL zum Download reichen als Angaben aus. Der Link im Beispiel führt zu einer Box mit Ubuntu, Apache und einer Wordpress-Installation zum Testen.

{
    "vm-name": "vagrant-ubuntu-wordpress",
    "boxer-id": "mmelzig/vagrant-ubuntu-wordpress",
    "version": "1.0.1",
    "download-url-prefix": "http://3h-co.de/vagrant/files/mmelzig/vagrant-ubuntu-wordpress/"
}

Box erstellen

Zum Erstellen einer Basebox muss erst einmal eine VM erstellt werden. Vagrant funktioniert mit den meisten Virtualisierungslösungen, empfohlen wird jedoch VirtualBox. CREATING A BASE BOX beschreibt die Grundlagen zum Erstellen einer Box. Audio und USB werden nicht benötigt. Die Konfiguration des Netzerks wird später durch Vagrant vorgenommen. Die VirtualBox Guest Additions müssen auf jeden Fall mit instaliert werden, was bei mir für einige Verwirrung sorgte. VIRTUALBOX GUEST ADDITIONS beschreibt die Installation. Aber erst durch die Information, dass die aktuelle ISO mit den Guest Additions im Installationsordner von VirtualBox (“C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso”) konnte ich die Installation gemäß der Anleitung durchführen.

Mit folgendem Befehl kann dann die Box erstellt werden. Danach läd man sie in das Verzeichnis files des vagrant-catalog hoch.

boxer.php --verbose --config-file /path/to/boxer.json

Mit Box arbeiten

Alles nötige ist damit getan um mit einer selbst erstellten und gehosteten Box zu arbeiten. In Euren Projekten könnte Ihr jetzt eine Datei Vagrantfile anlegen und vagrant up eingeben.

Ein Vagrantfile für die in diesem Beispiel verwendete Box könnte so aussehen:

Vagrant.configure(2) do |config|

  config.vm.box = "mmelzig/vagrant-ubuntu-wordpress"
  config.vm.box_url = 'http://3h-co.de/vagrant/catalog/mmelzig/vagrant-ubuntu-wordpress'

  # Whatever other config stuff you want to do
  config.vm.provider "virtualbox"
  config.vm.network "public_network", type: "dhcp"
  config.vm.hostname = "vagrant-ubuntu-wordpress"
  config.ssh.password = "vagrant"
end

Das Ergebnis ist eine VirtualBox-VM mit einem bridged-Netzwork (IP in eigenem Netzwerk) und dem Hostnamen vagrant-ubuntu-wordpress. Unter http://vagrant-ubuntu-wordpress/wordpress/ kann im Browser eine Wordpress-Installation aufgerufen werden. Mit vagrant ssh können sie sich per SSH mit der VM verbinden.

PS: Probleme mit vagrant-boxer

Nach einem Update funktionierte vagrant-boxer nicht mehr. Ich kann nicht genau sagen woran es liegt. Ich habe sowohl PHP, als auch Vagrant und den vagrant-boxer aktualisiert. Es ist allerdings möglich nur mit Vagrant Boxen anzulegen.

vagrant package --base "vm-name" --output "name-der-box-1.x.x.box"

vagrant-boxer hätte dann noch den Datei metadata.json angepasst und um die neue Version erweitert. Diese wird vom Catalog verwendet. Alle Versionen stehen in einem Array:

{
    "name": "mmelzig\/vagrant-ubuntu-wordpress",
    "versions": [
		{
            "version": "1.1.0.0",
            "providers": [
                {
                    "name": "virtualbox",
                    "url": "http:\/\/3h-co.de\/vagrant\/files\/mmelzig\/vagrant-ubuntu-wordpress\/vagrant-ubuntu-wordpress-1.1.0.0-virtualbox.box",
                    "checksum_type": "sha1",
                    "checksum": "b8d8633a0f1ce8b95c06c0b7b7a03d61e1430214"
                }
            ]
        },
        {
            "version": "1.0.1.0",
            "providers": [
                {
                    "name": "virtualbox",
                    "url": "http:\/\/3h-co.de\/vagrant\/files\/mmelzig\/vagrant-ubuntu-wordpress\/vagrant-ubuntu-wordpress-1.0.1.0-virtualbox.box",
                    "checksum_type": "sha1",
                    "checksum": "db59da450a8fbdd89c076b9183f3acecee5cbbad"
                }
            ]
        }
    ]
}

PS: Probleme beim Mounten

Nach den Updates traten weitere Probleme auf. Es konnten keine Verzeichnisse in die VM gemountet werden. Folgender Forenthread beschreibt das selbe Problem bei einen früheren Update und eine funktionierende Lösung.

Es muss ein Plugin für Vagrant installiert werden.

vagrant plugin install vagrant-vbguest

In der VM muss gegebenenfalls noch ein Link auf die VirtualBox Guest Additions gesetzt werden.

sudo ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions /usr/lib/VBoxGuestAdditions

Die Versionen auf die sich die Lösungen bei mir Beziehen sind Vagrant 1.7.2 und VirtualBox 4.3.22.

1248 Worte