Puppenspielen mit Landstreichern

— Entwicklung mit Vagrant

(und ein bisschen Puppet)

Was ist das ?

Tool zur Verwaltung (starten, stoppen, etc.) von…

Boxen!

und Warum will ich das nutzen?

fest definierte Umgebung simulierte Produktivumgebung

z.B.

Was ist schlimmer als PHP-Entwicklung?

PHP-Entwicklung mit Windows

außerdem

HTTPD/DBMS soll nicht immer mit laufen

* ok, ok, Firewalls existieren…

Show me the code!

                % vagrant init \
                    wheezy64 http://goo.gl/6NaeqW
                % ls
                Vagrantfile
                % egrep -v "^\s*(#|$)" Vagrantfile
            
                VAGRANTFILE_API_VERSION = "2"
                Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
                  config.vm.box = "wheezy64"
                  config.vm.box_url = "http://goo.gl/6NaeqW"
                end
            

Box starten

                % vagrant up
            

Mit Box verbinden

                % vagrant ssh
            
                vagrant@wheezy64:~$ uptime
                09:05:02 up 6 min,  1 user,  load average: 0.00, 0.01, 0.01
                vagrant@wheezy64:~$ cat /etc/debian_version
                7.1
            

Gib mir einen Webserver!

                sudo aptitude install apache2 lynx -y
                # …
                lynx -dump http://localhost
            

Webserver vom Wirt erreichen

% vim Vagrantfile -c "/forwarded_port"
config.vm.network :forwarded_port, guest: 80, host: 8080
                % vagrant reload
            

Öffne http://localhost:8080

Sync-Folder

                % touch "Hello World"
                % vagrant ssh
                vagrant@wheezy64:~$ ls /vagrant/
                Hello World  Vagrantfile
            

Vagrant stellt den Ordner mit Vagrantfile im Host unter /vagrant im Gast bereit.

Szenario

Eben noch aufräumen…, "resetten"

                % vagrant destroy -f
            

jedes mal

automatisieren!

Provisioning

Außerdem: Dokumentation der benötigten Software

Automatisierung per Shellscript setup.sh

                vim Vagrantfile -c ":57"
            
                config.vm.provision :shell, :path => "setup.sh"
            

Beispiel setup.sh

                #!/bin/sh
                aptitude install apache2 -y
                aptitude install phpmyadmin -y
                aptitude install mysql -y
                # apache2 konfigurieren
                # PHP-Xdebug konfigurieren?
            

Platz für Verbesserung

Puppenspielen!

Problem bekannt: Konfigurationsmanagement

Problem gelöst: Puppet *

* es gibt noch andere, z.B. Chef

Und was macht Puppet sonst so…

…wenn es nicht gerade mit Landstreichern spielt?

Große Rechenzentren: kaputter Server raus, neuer Server rein, autonomes-Provisioning

Show me the code!

                package { 'apache2':
                    ensure => installed
                }
            

Puppet ist eine DSL, zur Beschreibung eines gewünschten System-Zustandes, sowie "Software", die ein System in den Zustand versetzt.

Use this source Luke vagrant!

              config.vm.provision :puppet do |puppet|
                puppet.manifests_path = "manifests"
                puppet.manifest_file  = "site.pp"
              end
            
Können wir auch…

Apache konfigurieren

um /vagrant als docroot zu nutzen?

Ja, mit einem dafür fertigen Puppetmodul

von http://forge.puppetlabs.com/
                puppet module install puppetlabs-apache
            

Tipp: diese Zeile in die setup.sh: Shellscript bootstrapt Puppet

Die DSL-Erweiterungen von puppetlabs-apache ermöglichen…

                # "class { 'apache': }" beinhaltet bereits:
                # package { 'apache2':
                #   ensure => installed,
                # }

                class { 'apache':
                    default_vhost => false,
                }

                apache::vhost { 'localhost':
                    docroot       => '/vagrant',
                    port          => '80',
                }
            

Inception!

                % vagrant up
            
Skip, skip, skip…

Boxen bauen

Offizielle Boxen:

Inoffizielle Boxen

Et nervt!

Selbst ist der Mann der/die WebentwickerIn

Lieber gleich…

Veewee: https://github.com/jedi4ever/veewee

Installation benötigt ein bisschen ruby/gem/bundler Know-How

Aber dann…

                veewee vbox define wheezy64 'Debian-7.2.0-amd64-netboot'
                vim definitions/wheezy64/
                veewee vbox build wheezy64
                veewee vbox export wheezy64
            
eine frische wheezy64.box liegt nun bereit.

Fazit:

Vagrant ist Top!

Aber…

Der Spielverderber

Sync-Folder Performance miserabel

NFS statt VirtualBox Shared-Folder nutzen

Warten wir mal ab…

Material

Boxen von mir

(Mitte Oktober 2013)

Zum starten/rumspielen, danach Veewee nutzen ;)

One more thing!

docker.io

Gefühlt: THE hot shit

Warten wir mal ab…

Fragen?

Fertig!