Rex Linuxtag 2012

Preview:

Citation preview

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

Recommended