Skip to content

28. November 2011

Managing Nginx vHost with Puppet

nginx-logo

Ich beschäftige mich nun seit einiger Zeit mit puppet und bin auch fleissig am Module bauen. Als einer der nächsten Punkte nach allen Standard-System-Diensten war nun Nginx dran. Vorraussetzung für mich war hier, dass auch vHost relativ einfach abgebildet werden können. Nach etwas Bastelei, ein wenig Google und nachdenken war es mir dann gelungen. Hier also mein Ergebnis. Da ich größtenteils nur WordPress verwende ist meine Klasse und mein Template ein wenig daran angepasst, sollte sich aber leicht auch für andere Dinge adaptieren lassen ;)

Man definiert sich im seinem Modul, hier “nginx”, eine neue Klasse. In dieser legt man nun ein Define an. Also quasi eine abstrakte Kasse oder Funktion. Diese belegt man schon mit allen Werten vor, die später jede einzelne vHost-Datei haben soll. Ich benutze hier $title als Übergabe-Variable. siteName ist der vHostname innerhalb des Templates.


class nginx::wordpress{
define site {
$siteName = $title

file { "/etc/nginx/sites/$title.conf":
ensure => present,
owner => "root",
group => "root",
mode => 0644,
content => template("nginx/wordpress.erb"),
}
}

Nun noch ein Template erstellen. In diesem wird der eigentliche vHost definiert. Mit Extras wie Umleitung auf WWW und Sprechenden-URLs. siteName wird hier jeweils durch den von $title übergebenen Wert ersetzt.


server {
listen 80;

server_name <%= siteName %>
www.<%= siteName %>;

access_log /var/log/nginx/access.<%= siteName %>.log main;
error_log /var/log/nginx/error.<%= siteName %>.log warn;

root /usr/share/nginx/sites/<%= siteName %>;
index index.html index.php;

try_files $uri $uri/ /blog/index.php?q=$uri&$args;

if ($host != 'www.<%= siteName %>' ) {
rewrite ^/(.*)$ http://www.<%= siteName %>/$1 permanent;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/sites/<%= siteName %>$fastcgi_script_name;
include fastcgi_params;
}
}

Und jetzt kann man z.B. in einer Konfigurationsklasse von Nginx einfach das Define aufrufen, ihm einen Hostnamen übergeben und da durch erhält man einen vHost. Hier muss dann vorab nur noch die oben erstellte klasse inkludiert werden.


nginx::wordpress::site {"zero0ne.de":}

Read more from Linux, Stuff

Leave a comment

required
required

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments