Mit dem Apache2 Kochbuch einen VirtualHost konfigurieren

Schritt 3: Mit dem Apache2 Kochbuch einen VHost erstellen

Die Dateien zu diesem Schritt findest du als git Repository auf github:

https://github.com/timoschmidt/vagrant-chef-workshop/tree/master/step3

 

Abhängigkeiten in der metadata.rb pflegen

Im Internet und bei Chefsupermarket gibt es eine Menge öffentlicher Kochbücher um gängige Services zu proviionieren. Diese sollten genutzt werden um so wenig wie notwendig selber zu implementieren zu müssen.


In diesem Schritt werden wir uns anhand des Apache2 Kochbuches anschauen, wie wir ein externes Kochbuch verwenden und Berkshelf nutzen um das Kochbuch herunterzuladen und Abhängigkeiten aufzulösen.


Als erstes muss chef wissen von welcher Version welches Kochbuches dein Kochbuch abhängig ist. Dies kann in der metadata.rb angeben werden:

 

name 'mycookbook'
description 'Demo cookbook to create a virtual host for a webapp'
maintainer 'Timo Schmidt'
license 'none'
version '0.0.1'

depends 'apache2', '= 3.0.0'
depends 'hostsfile', '= 2.4.5‘

Im vorherigen Beispiel haben wir festgelegt das unser Kochbuch das "apache" und "hostsfile" Kochbuch in einer festen Version benötigt.


Eine Abhängigkeit an eine feste Version zu binden hat den Vorteil das das Kochbuch noch funktioniert, wenn es in dem Abhängenden Kochbuch Änderungen gab, die zu Konflikten führen.

Abhängigkeiten mit Berkshelf auflösen

Damit wir Berkshelf nutzen können müssen wir als erstes das Vagrant Berkshelf Plugin installieren.

vagrant plugin install vagrant-berkshelf

Um die Abhängigkeiten mit Berkshelf aufzulösen können Sie neben dem Vagrantfile auf der Hauptebene eine Datei mit dem Namen "Berksfile" anlegen. Dieses "Berksfile" füllen wir mit folgendem Inhalt:

source "https://supermarket.chef.io"

cookbook 'mycookbook', path: './site-cookbooks/mycookbook‘

Kochbuch zum anlegen eine Apache vHosts implementieren

Wenn die Box provisioniert wird löst Berkshelf die Abhängigkeiten auf und die Kochbücher "apache" und "hostsfile" stehen zu Verfügung.

Um nun auch tatsächlich den vHost anzulegen müssen wir das eigentliche Rezept implementieren. Dieses Rezept legt eine dummyseite und einen vHost mit der Domain shop.local.dev an:

# add hosts entry
hostsfile_entry '127.0.0.1' do
   hostname  'shop.local.dev'
   action    :create
end

# create directory
directory '/var/www/shop' do
   owner 'www-data'
   group 'vagrant'
   mode '0775'
   recursive true
   action :create
end

# create virtual host
web_app 'shop' do
   server_name 'shop.local.dev'
   server_aliases ['shop.local.dev']
   docroot '/var/www/shop'
   cookbook 'apache2'
end

# create dummy content
execute "create dummy site" do
   command "echo 'hello' > /var/www/shop/index.html"
   cwd "/var/www/shop"
   action :run
end

# fix owner
execute "chown-data-www" do
   command "chown -R www-data:www-data ."
   cwd "/var/www/shop"
   action :run
end

# fix permission
execute "chmod-data-www" do
   command "chmod -R 775 ."
   cwd "/var/www/shop"
   action :run
end

Wie gewöhnlich kann die Box mit "vagrant up" gestartet werden und steht nach ein paar Minuten zur Verfügung.

Lokalen Host eintrag anlegen und Dummyseite aufrufen

Nun benötigst du noch einen Hostseintrag um den DNS Namen aufzulösen (MAC OS & Linux: /etc/hosts Windows C:\Windows\System32\drivers\etc\hosts):

192.168.33.30 shop.local.dev

Wenn du nun "shop.local.dev" in deinem Browser aufrufst siehst du die Dummywebsite, die wir im Rezept angelegt haben:

Das Berksfile.lock

Wie Sie vielleicht mitbekommen haben wird während der Provionierung eine Datei Berksfile.lock neben der normalen Berksfile Datei angelegt. Diese hat folgenden Inhalt:

 

DEPENDENCIES
  mycookbook
    path: site-cookbooks/mycookbook

GRAPH
  apache2 (3.0.0)
    iptables (>= 0.0.0)
    logrotate (>= 0.0.0)
  hostsfile (2.4.5)
  iptables (1.1.0)
  logrotate (1.9.2)
  mycookbook (0.0.1)
    apache2 (= 3.0.0)
    hostsfile (= 2.4.5)

Diese Datei enthält den Fingerabdruck der Kochbuchabhänigkeiten zu dem Zeitpunkt, als die Box provisioniert wurde. Wie Sie vielleicht mitbekommen haben können Abhägigkeiten in der "metadata.rb" auch sehr allgemein, z.b. auf die aktuellste Version definiert werden. Wenn ein Update eines abhängenden Kochbuchs erscheint, dass inkompatible Änderungen enhält kann das ein Problem sein. Wenn Sie nun aber die Berksfile.lock Datei commiten wird diese ausgewertet statt des Berksfile.

Das kann nützlich sein, um einen "Continouse Integration Prozess" bei Kochbüchern umzusetzen. Der Prozess wäre im groben "Berksfile.lock löschen => Vagrant up => Testen ob die Box noch funktioniert => Berksfile.lock commiten". Dabei müssen die Abhängigkeiten der Kochbücher auf die neuste Version zeigen.

 

Bislang hast du gelernt, wie du eigene Kochbücher schreibst und externe einbinden kannst. Je mehr Schritte in einem Kochbuch ausgeführt werden, umso kritischer ist die Performance der Provisionierung.

 

Auf der nächsten Seite geht es um die Optimierung der Performance eines Vagrant Setups

 

Navigation