Puppenspielen mit Landstreichern
— Entwicklung mit Vagrant
(und ein bisschen Puppet)
Was
ist das
?
Tool zur Verwaltung (starten, stoppen, etc.) von…
Boxen!
- Portable Entwicklungsumgebungen
- VirtualBox Maschinen
- aus vorgefertigten Images
und
Warum
will ich das nutzen?
fest definierte Umgebung simulierte Produktivumgebung
z.B.
- Windows-Desktop Linux-Server
- Debian-Testing-Desktop RHEL Server
- Ubuntu-Desktop krude Shared-Hosting PHP Version
Was ist schlimmer als PHP-Entwicklung?
PHP-Entwicklung mit Windows
außerdem
HTTPD/DBMS soll nicht immer mit laufen
- Bootzeit
- Akku
- Vertraulichkeit (http immer offen)*
* 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
- Box runterladen
- VirtualBox Maschine erstellen
- Virtuelle Maschine konfigurieren
- Maschine booten
- Provisioning (dazu später mehr)
Mit Box verbinden
% vagrant ssh
- SSH-Verbindung zur virtuellen Maschine aufbauen
- über Public/Private-Key
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
- erreichbar vom Gastsystem
- (noch) nicht erreichbar vom Wirt
Webserver vom Wirt erreichen
- Webserver als Beispiel vorhanden: nur einkommentieren
% vim Vagrantfile -c "/forwarded_port"
config.vm.network :forwarded_port, guest: 80, host: 8080
- Änderungen an Vagrantfile übernehmen
% 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
- Arbeitskollge checkt code (+ Vagrantfile) aus, soll dran arbeiten
- Entwicklung auf anderem Rechner (Laptop)
- andere Distribution wird genutzt
- …
Eben noch aufräumen…, "resetten"
% vagrant destroy -f
jedes mal
- vagrant ssh
- aptitude install dies
- aptitude install das
- konfigurier datanbank
- …
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
- aptitude install bei jedem Durchlauf (auch wenn bereits installiert)
- Wenn ich zu RedHat wechsle? Kein Aptitude.
- Dienste konfigurieren?
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
- Wikimedia
- Google
- Sun/Oracle
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
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:
- precise32 (Ubuntu Precise Pangolin, 12.04 LTS)
- precise64 (dasselbe in 64 bit)
Inoffizielle Boxen
Et nervt!
- Veralterte Paket-DB (404 wegen Security-Updates)
- Puppet 2.7
- statt 3.2
- unpassende Module
- unpassende Doku
- US-Mirrors vorgestellt
Selbst ist der Mann der/die WebentwickerIn
- "per Hand" sehr aufwändig
- schlecht dokumentiert
Lieber gleich…
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…
Boxen von mir
(Mitte Oktober 2013)
Zum starten/rumspielen, danach Veewee nutzen ;)
- precise64 http://goo.gl/hvYCxs
- wheezy64 http://goo.gl//6NaeqW
One more thing!
- Leichtgewichtige "Container" für Applikation
- Container sollen direkt deployed werden
- Ähnliche Ziele (Entwicklungs- und Produktivumgebung angleichen)
- technisch ganz anderer Ansatz (LXC, Linuxcontainer)
Gefühlt: THE hot shit
Warten wir mal ab…
Fragen?
Fertig!