Vagrant und Chef
Vagrant ist eine Open Source Software, mit der Entwicklungsumgebungen erzeugt und konfiguriert werden
(Quelle: Vagrant). Die Software benutzt VirtualBox, um virtuelle Maschinen hochzufahren.
Eine Übersicht aller Maschinen findet Ihr hier.
Eine virtuelle Maschine ist ein Betriebssystem in einem Betriebssystem auf einer realen Maschine/Rechner. Auf beliebig vielen unterschiedlichen Betriebssystemen kann z.B. ein virtuelles Betriebssystem mit Vagrant installiert werden. Wer verstehen will, wie virtuelle Maschinen funktionieren, dem empfehle ich die Vorlesung: FH Berlin – Vorlesung über Virtuelle Maschinen
Vagrant benutzt man in der Softwareentwicklung, um eine Software in einer unabhängigen Umgebung zu entwickeln. Oft arbeiten mehrere Entwickler mit unterschiedlichen Betriebssystemen (Windows, Linux, MacOs) an einer Software. Auf jedem Betriebssystem werden Libraries und Drittsoftware unterschiedlich installiert. Mit Vagrant wird eine plattformunabhängige Umgebung geschaffen, um Abhängigkeiten zu definieren und zu installieren.
Mittels vagrant wird auf Basis einer homogenen und für alle Nutzer gleichförmigen Virtuellen Maschine eine universelle Entwicklungsumgebung geschaffen. Ein elementarer Vorteil hierbei ist, dass die VM komplett und automatisiert durch Konfigurationsdateien aufgesetzt wird. Diese können problemlos in die verwendeten Versionsverwaltung (GIT, SVN) übernommen / eingecheckt werden.
Installation: Vagrant Installation
Wenn Vagrant & Virtual Box installiert wurde, können wir ein Beispielsprojekt anlegen.
mkdir example-project
cd example-project
nano Vagrantfile
Das „Vagrantfile“ enthält alle Einstellungen, die für das Hochfahren einer virtuellen Maschine notwendig sind.
Wenn ein Team an einer Software gemeinsam arbeitet, wird dieses File versioniert und jeder Entwickler kann somit die virtuelle Maschine hochfahren.
# -*- mode: ruby -*-
Vagrant::Config.run do |config|
#Betriebssystem/Box Ubuntu Precise für 64Byte Rechner
config.vm.box = "precise64"
#Vagrant läd sich die Box unter folgendem Link runter:
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
#Shared Folder: name, target folder auf der virtuellen Maschine, Verzeichnis auf dem realen Rechner
config.vm.share_folder "example-projekt", "/var/www/example-projekt", "."
#wichtige Einstellung: Freigabe vom RAM Anteil
config.vm.customize ["modifyvm", :id, "--memory", 1024]
#Port Forwarding, wenn z.B. eine Website entwickelt wird
config.vm.forward_port 80, 8020
end
vagrant up
vagrant ssh
cd /var/www/example-projekt
Wenn wir die Maschine hochgefahren und uns via SSH eingeloggt haben, können wir uns zu unserem Shared Folder navigieren. Nun haben wir die grundlegenden Vorbereitungen getroffen, um gemeinsam eine Software zu entwickeln.
Management Tool: Chef
Ein Management Tool wie beispielweise Chef unterstützt Vagrant bei der Einrichtung der Entwicklungsumgebung. Mit Chef kann die virtuelle Maschine provisioniert werden d.h. Vorschriften benutzen, einrichten und installieren – im Detail: Software installieren und konfigurieren. Diese Vorschriften heißen bei Chef Cookbooks. So gibt es beispielsweise ein Cookbook für den Webserver Apache. Wird dieses Cookbook verwendet, wird Apache installiert und man kann Apache vor dem Hochfahren der Maschine konfigurieren.
Wir erweitern unser „Vagrantfile“ wie folgt, um das Cookbook Apache zu benutzen.
config.vm.provision :chef_solo do |chef|
#Ordner, wo die Cookbooks liegen
chef.cookbooks_path = "cookbooks"
chef.json = {
:build_essential => {
#Erklärung: https://github.com/opscode-cookbooks/build-essential)
"compiletime" => true
},
}
# cookbook für apt (Advanced Packaging Tool) und apt services, apt update
chef.add_recipe("apt")
#installiert C compiler & build tools
chef.add_recipe("build-essential")
#installiert apache
chef.add_recipe("apache2")
end
Mit „vagrant provision“ werden die Änderungen übernommen.
Um Apache nun sinnvoll zu nutzen, erstellen wir uns eine Beispiel HTML Seite und speichern Sie als index.html ab.
<html>
<body>
<h1>Hallo Chef. Hallo Vagrant!</h1>
</body>
</html>
Wenn wir im Browser http://localhost:8020 eintippen, würde unsere Testseite noch nicht vom Apache ausgeliefert werden, da wir Apache noch nicht konfiguriert haben. Damit das Apache Konfigurationsfile beim Hochfahren dynamisch erzeugt wird, erstellen wir ein eigenes Cookbook.
cd cookbooks
mkdir initial
cd initial
mkdir recipes
mkdir templates
mkdir templates/default
cd recipes
nano default.rb
Die Datei „default.rb“ wird, wenn wir unser Cookbook im Vagrantfile angeben, von Chef ausgeführt.
Wir wollen eine Web Applikation bei Apache anmelden und benutzen dafür die Direktive „web_app“.
web_app "example-projekt" do
docroot "/var/www/example-projekt"
template "web_app.conf.erb"
server_name "localhost"
server_aliases ["localhost"]
allow_override "all"
end
Das Apache Cookbook enthält ein Template „web_app.conf.erb“, um eine Web Applikation bei Apache anzumelden bzw. einen Virtuellen Host für unsere Webseite zu erstellen. Dieses kopieren wir in unser Cookbooks:
cp cookbooks/apache2/templates/default/web_app.conf.erb cookbooks/initial/templates/default/
Nun fehlt nur noch das Anmelden unseres Cookbookes in dem „Vagrantfile“.
#als letztes cookbook anmelden
chef.add_recipe("initial")
Wir führen „Vagrant reload“ und navigieren uns zu http://localhost:8020.