viele wege führen nach rom, so auch zu dem für einen selbst zu einem guten
puppet setup. eine möglichkeit wäre es [puppet via git zu
skalieren](http://bitfieldconsulting.com/scaling-puppet-with-distributed-
version-control), die andere webrick
oder mongrel. damit ich das gesamte
besser pflegen kann, habe ich mich für ein mongrel setup mit vorgelagertem
nginx entschieden. einfach da mit die default debian installation hier schon
sehr gute hilfe mit auf den weg gibt. wichtig ist vielleicht noch das es mir
hier nur um den puppetmaster geht, nicht das aufsetzen einer kompletten
puppetumgebung oder den client. ich setze auf die lenny-backports[1], also einfach folgendes in der
/etc/apt/sources.list
ergänzen wenn es nicht eh schon drin steht.
deb http://www.backports.org/debian lenny-backports main contrib non-free
es folgt die installation des puppetmasters via aptitude[2], jedoch mit
der expliziten ansage, das wir das paket aus lenny-backports wünschen.
aptitude install puppetmaster -t lenny-backports
als nächstes kommen einige kleine anpassungen im puppetmaster
/etc/default/puppetmaster
, welche aber dann auch schon alles gewesen sind
was hier anzupassen ist. wenn nicht benötigt kann natürlich der debug modus
ausgeschaltet werden, ich selbst verwende diesen jedoch gerne per default.
# Start puppet on boot?
START=yes
# Startup options
DAEMON_OPTS="--debug --ssl_client_header=HTTP_X_SSL_SUBJECT"
# What server type to run
# Options:
# webrick (default, cannot handle more than ~30 nodes)
# mongrel (scales better than webrick because you can run
# multiple processes if you are getting
# connection-reset or End-of-file errors, switch to
# mongrel. Requires front-end web-proxy such as
# apache, nginx, or pound)
# See: http://reductivelabs.com/trac/puppet/wiki/UsingMongrel
#SERVERTYPE=webrick
SERVERTYPE=mongrel
# How many puppetmaster instances to start? Its pointless to set this
# higher than 1 if you are not using mongrel.
PUPPETMASTERS=2
# What port should the puppetmaster listen on (default: 8140). If
# PUPPETMASTERS is set to a number greater than 1, then the port for
# the first puppetmaster will be set to the port listed below, and
# further instances will be incremented by one
#
# NOTE: if you are using mongrel, then you will need to have a
# front-end web-proxy (such as apache, nginx, pound) that takes
# incoming requests on the port your clients are connecting to
# (default is: 8140), and then passes them off to the mongrel
# processes. In this case it is recommended to run your web-proxy on
# port 8140 and change the below number to something else, such as
# 18140.
PORT=18140
auch die bei lenny vorhandene nginx version kann leider nicht das was wir
benötigen, jedoch sollte auch hier der nginx aus lenny-backports reichen. ich
habe mich dazu entschieden die aktuelle entwickler-version zu installieren, da
ich einige der features für andere dinge benötige. also hier der kleine weg
zur nginx installation im debian style[3]. wobei es
natürlich auch hier eleganter geht. jeder der einen laufenden nginx hat,
einfach zur konfiguration springen. nginx war bereits auf dem system
installiert, dadurch sind alle passenden scripte und konfigurationen
vorhanden.
apt-get remove nginx
echo "nginx hold" | dpkg --set-selections
dann natürlich der download, sowie die installation des neuen nginx
cd /usr/src
wget http://nginx.org/download/nginx-0.9.3.tar.gz
tar xzvf nginx-0.9.3.tar.gz
cd nginx-0.9.3
./configure --prefix=/usr --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin --user=www-data --group=www-data --http-log-path=/var/log/nginx/access.log --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module
make
make install
jetzt kommen wir zur nginx konfiguration, welche sich am debian weg
orientiert. als erstes wird unter /etc/nginx/conf.d
die datei
puppetmaster.conf
angelegt.
ssl on;
ssl_certificate /var/lib/puppet/ssl/certs/CHANGE_TO_SERVER.pem;
ssl_certificate_key /var/lib/puppet/ssl/private_keys/CHANGE_TO_SERVER.pem;
ssl_client_certificate /var/lib/puppet/ssl/certs/ca.pem;
ssl_ciphers SSLv2:-LOW:-EXPORT:RC4+RSA;
ssl_session_cache shared:SSL:8m;
ssl_session_timeout 5m;
upstream puppet-production {
server 127.0.0.1:18140;
server 127.0.0.1:18141;
}
danach wird dann die entsprechende puppet-nginx-server konfiguration unter
/etc/nginx/sites-available
angelegt. bei mir ist das die puppetmaster
server {
listen 8140;
ssl on;
ssl_session_timeout 5m;
ssl_certificate /var/lib/puppet/ssl/certs/CHANGE_TO_SERVER.pem;
ssl_certificate_key /var/lib/puppet/ssl/private_keys/CHANGE_TO_SERVER.pem;
ssl_client_certificate /var/lib/puppet/ssl/ca/ca_crt.pem;
# choose any ciphers
ssl_ciphers SSLv2:-LOW:-EXPORT:RC4+RSA;
# allow authenticated and client without certs
ssl_verify_client optional;
# obey to the Puppet CRL
ssl_crl /var/lib/puppet/ssl/ca/ca_crl.pem;
root /var/tmp;
location / {
proxy_pass http://puppet-production;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_read_timeout 65;
}
}
das vorkommen von CHANGE_TO_SERVER
muss natürlich entsprechend geändert
werden. jetzt folgt noch der obligatorische symlink
ln -s /etc/nginx/sites-available/puppetmaster /etc/nginx/sites-enabled/puppetmaster
sowie natürlich dann der start des nginx mittels /etc/init.d/nginx start
. so
sollte jetzt der nginx als frontend für den puppet mongrel laufen. wichtig ist
noch, das der default host des nginx ggf. zu deaktivieren ist, damit es keinen
konflikt mit einem anderen bereits laufenden webserver gibt. jetzt ist auch
das skalieren mit mehreren worker und puppet-mongrel instanzen ohne probleme
möglich. dieses setup kann mit dem erhöhen der nginx worker auf vier sowie
zwei zusätzlichen mongrelinstanzen mit ~ 300 clients problemlos. vielleicht
kann ja jemand diese hilfe gebrauchen! referenzen: [nginx
debian](http://www.sturbi.de/blog/index.php/2010/04/21/nginx-auf-debian-
installieren-compilieren/) [nginx puppet
mongrel](http://www.davidpashley.com/blog/systems-administration/puppet/nginx-
mongrel) nginx download
[1]: was nicht jeder kann und will, ob das auch mit den lenny default packen funktioniert habe ich nicht verifiziert
[2]: jeder nach seiner eigenen einstellung, ich nutze eigentlich fast nur noch aptitude
[3]: ohne ein .deb zu bauen