rex linuxtag 2012
TRANSCRIPT
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Vortrag auf dem Linuxtag 2012
Daniel Bäurerinovex GmbHSystems Engineer
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Was ist (R)?ex
Wie funktioniert (R)?ex
Welche Funktionen bietet (R)?ex
Was will (R)?ex erreichen
Praktische Beispiele und Deployment einer Entwicklungsplatform mit (R)?ex
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Was ist (R)?ex
26.07.12
Was ist (R)?ex
HW Bestellung
Setup Server App-Deploy
Einbau OS-Deploy
Ziel: Neue Server sollen so schnell wie möglich einsatzbereit sein!
26.07.12
Was ist (R)?ex
Setup Server App-Deploy
Ziel: Neue Server sollen so schnell wie möglich einsatzbereit sein!
26.07.12
Was ist (R)?ex
Mit (R)?ex können alle Server von einem zentralen Punkt aus, über den kompletten Prozess des
Konfigurationsmanagement und Applikations-Deployment, verwaltet werden.
A simple framework to simplify systemadministration
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Wie funktioniert (R)?ex
26.07.12
Wie funktioniert (R)?ex
● Es gibt ein Rexfile
● Ähnlich wie ein Makefile
● Ein normales Perlscript
● Kann auch als Library in eigenen Perlscripts verwendet werden
26.07.12
Wie funktioniert (R)?ex
for s in $(grep ^backend ${HOME}/server.lst); do
ssh root@${s} “useradd -u 1500 -d /var/www/app -g appuser -m appuser“
ssh root@${s} “apt-get update && apt-get install apache2“
sed 's/@keepalive@/On/' templates/apache2.conf | \
ssh root@${s} “cat > /etc/apache2/apache2.conf“
done
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
26.07.12
Wie funktioniert (R)?ex
set user => "root";set group => www => "www[01..15]";
task "prepare", group => "www", sub {
create_user "appuser",home => "/var/www/app",uid => 1500,groups => [qw/appuser/];
update_package_db;install "apache2";
file "/etc/apache2/apache2.conf",content => template("templates/apache2.conf",
keepalive => "On", ),on_change => sub { service apache2 => "restart"; };
};
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Welche Funktionen bietet (R)?ex
26.07.12
Welche Funktionen bietet (R)?ex
Filesystem Operationen
if( is_file("/etc/motd") ) {rm "/etc/motd";
}
chown "root", "/etc"recursive => 1;
chgrp "root", "/etc",recursive => 1;
chmod 644, "/etc/passwd";
if( !is_dir("/var/www/app") ) {mkdir "/var/www/app",owner => "appuser",mode => 755;
}
26.07.12
Welche Funktionen bietet (R)?ex
Datei Operationen
file "/path/on/the/remote/machine",source => "/path/on/local/machine",owner => "root",group => "root",mode => 400,on_change => sub { say "File was changed."; };
delete_lines_matching "/var/log/auth.log", matching => qr{Failed};
26.07.12
Welche Funktionen bietet (R)?ex
User/Gruppen-Management
create_group „appuser“, {gid => 1500,system => 1,
};
create_user "appuser",uid => 1500,
home => '/var/www/app', comment => 'App-User', expire => '2012-05-23', groups => ['appuser', 'www', '[…]' ], password => 'foobar', system => 1, ssh_key => "ssh-rsa AAAAB3NzaC1yc2EAADABAAABAQCh.."; };
26.07.12
Welche Funktionen bietet (R)?ex
Paket-Management
update_package_db;
install package => ["perl","apache2","tomcat6","vim“,"sudo“,"openjdk-7-jre“
];
remove package => "vim-tiny";
26.07.12
Welche Funktionen bietet (R)?ex
Process/Service-Management
killall "apache2";
service apache2 => "ensure", "started";
service apache2 => "restart";
if( service apache2 => "status" ) {say "Apache2 is running";
}else {
say "Apache2 is not running";}
26.07.12
Welche Funktionen bietet (R)?ex
Inject
template_file "inject.conf";template_search_for "*.properties";
inject "myapp.tar.gz",pre_pack_hook => sub {
run "BUNDLE_PATH=vendor/bundle bundle install";},post_pack_hook => {
say "Post Pack Hook";};
inject "myapp.war";
26.07.12
Welche Funktionen bietet (R)?ex
Deploy
deploy_to "/var/deploy";document_root "/var/www";
deploy "myapp.tar.gz"
context_path "/myapp";
deploy "myapp.war",username => "admin",password => "admin-password",port => 8080,manager_url => "/manager";
26.07.12
Welche Funktionen bietet (R)?ex
Templating – bereits integrierete Variablen
<%= hostname %><%= domain %><%= eth0_ip %><%= eth0_mac %><%= … %>
Templating – eigene Variablen
<%= myvariable1 %>
template("templates/apache2.conf",myvariable1 => "defined",)
26.07.12
Welche Funktionen bietet (R)?ex
● Cron
● Iptables
● Sysctl
● Partitionierung (Parted)
● LVM
● Virtualisierung
● und vieles mehr!
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Was will (R)?ex erreichen
26.07.12
Was will (R)?ex erreichen?
OPS DEV
26.07.12
Was will (R)?ex erreichen?
OPS DEV
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
Praktische Beispiele und Deployment einer Entwicklungsplatform mit (R)?ex
26.07.12
Praktische Beispiele und Deployment einer Entwicklungsumgebung mit (R)?ex
● Beispiele aus dem Admin-Alltag
● Beispiel eines Server-Setup
● Bereitstellen einer Entwicklungsumgebung
● App-Deployment mit (R)?ex
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.
(R)?exVereinfachtes Deployment mit Rex
● Mehr Infos unter http://rexify.org
● Für CentOS, Fedora, Debian, Ubuntu, Gentoo, Mageia, OpenSuSE, CPAN
26.07.12
Vielen Dank für Ihre Aufmerksamkeit!
inovex GmbH
PforzheimKarlsruher Straße 71D-75179 Pforzheim
MünchenValentin-Linhof-Straße 2D-81829 München
KölnSchanzenstraße 6-20D-51063 Köln