Ich selbst bevorzuge mitlerweile nginx als Webserver wenn es darum geht etwas im Netz verfügbar zu machen. Aber leider ist die aktuelle Version unter Debian Squeeze mit 0.7.67 nicht gerade aktuell und es gibt gerade in den neueren Versionen Funktionen welche man gerne nutzen würde.
Einen Weg bietet es sich jetzt an beim dotdeb Projekt zu schauen und zu sehen das es hier die aktuelle Stable Version 1.2.7 gibt. Es gibt nginx sehr spartanisch oder mit einigen Patches und eine Auflistung bringt folgendes zutage.
nginx-dbg - Debugging symbols for nginx
nginx - small, powerful, scalable web/proxy server
nginx-common - small, powerful, scalable web/proxy server - common files
nginx-doc - small, powerful, scalable web/proxy server - documentation
nginx-extras - nginx web/proxy server (extended version)
nginx-extras-dbg - nginx web/proxy server (extended version) - debugging symbols
nginx-full - nginx web/proxy server (standard version)
nginx-full-dbg - nginx web/proxy server (standard version) - debugging symbols
nginx-light - nginx web/proxy server (basic version)
nginx-light-dbg - nginx web/proxy server (basic version) - debugging symbols
nginx-naxsi - nginx web/proxy server (version with naxsi)
nginx-naxsi-dbg - nginx web/proxy server (version with naxsi) - debugging symbols
nginx-naxsi-ui - nginx web/proxy server - naxsi configuration front-end
nginx-passenger - nginx web/proxy server (Passenger version)
nginx-passenger-dbg - nginx web/proxy server (Passenger version) - debugging symbols
Schaut man sich jetzt Beispielhaft an, was Guillaume Plessis der Maintainer von dotdeb alles eingebunden hat in die Packete und welche zusätzlichen Patche eingespielt wurden, kann man sich freuen und einfach loslegen oder noch einmal darüber nachdenken ob man das wirklich braucht. Ziel soll es ja sein, einen nginx mit passenger auszustatten und das in möglichst aktueller Version.
Description: nginx web/proxy server (Passenger version)
Nginx ("engine X") is a high-performance web and reverse proxy server
created by Igor Sysoev. It can be used both as a standalone web server
and as a proxy to reduce the load on back-end HTTP or mail servers.
.
This package provides a version of nginx with the standard modules, plus
extra features and modules such as the Passenger module, which allows
running Ruby on Rails applications.
.
STANDARD HTTP MODULES: Core, Access, Auth Basic, Auto Index, Browser,
Charset, Empty GIF, FastCGI, Geo, Gzip, Headers, Index, Limit Requests,
Limit Zone, Log, Map, Memcached, Proxy, Referer, Rewrite, SCGI,
Split Clients, SSI, Upstream, User ID, UWSGI.
.
OPTIONAL HTTP MODULES: Addition, Debug, GeoIP, Gzip Precompression,
HTTP Sub, Image Filter, IPv6, Real IP, Stub Status, WebDAV, XSLT.
.
MAIL MODULES: Mail Core, IMAP, POP3, SMTP, SSL.
.
THIRD PARTY MODULES: Echo, Upstream Fair Queue, Passenger.
.
MODULES ADDED BY DOTDEB : File AIO, Secure link, Auth PAM, Headers more,
Syslog, Cache purge, Pinba, HTTP substitution filter
Hat man keine weitere Software im Einsatz, welche auch von dotdeb
angeboten wird, ist dies sicherlich eine Option. Installatieren und
glücklich sein.
Jetzt bevorzuge ich jedoch bei MySQL die von Percona bereitgestellten Builds. Versucht man diese beiden Repositories parallel zu betreiben stellt man fest, hier gibt es konflikte bei den Bibliotheken bzw. libs. Also ist der gleichzeitige nutzen beider Repositories nicht ohne Probleme möglich.
Eine andere Möglichkeit ist das von den nginx Entwicklern bereitgestellte Repositorie zu nutzen. Hier bekommt man vanilla nginx angeboten und weiter nichts. Das ganze macht also keinerlei Probleme in kombination mit Percona. Es gibt also jetzt auf dem System Persona MySQL und nginx, jedoch kein passenger um z.B. ruby on rails Applicationen auf dem Server anzubieten.
Bisher habe ich keine andere Möglichkeit gefunden das ganze sauber und nachvollziehbar zu installieren, als hier selbst den Compiler anzuwerfen. Sicherlich könnte man hier auch Pakete selber bauen, aber das war mir bisher immer zu umständlich.
Ich will zwar eigentlich vermeiden auf einem Produktiv System etwas zu kompilieren, aber hier gilt es wie immer den richtigen Weg für einen selbst zu finden.
Als Basis will ich das aktuelle Ruby 1.9.2 unter Debian nutzen, welches benötigt wird. Sicherlich könnte jetzt auch noch mittels rbenv oder rvm eine gekapselte Umgebung geschaffen werden, aber für mich ist es in diesem Fall nicht notwendig.
Als erstes muss sichergestellt werden, das es es nur Ruby 1.9.2 aus den Debian Quellen auf dem System gibt.
$ ruby -v
-bash: ruby: command not found
$ apt-get install ruby1.9.2
$ ruby -v
-bash: ruby: command not found
$ ruby1.9.1 -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
Unter Ubuntu kann jetzt mittels update-alternatives --config ruby
gearbeitet werden, unter Debian bleibt nichts anderes als händisches eingreifen.
$ cd /usr/bin && ln -sf ruby1.9.1 ruby && ln -sf gem1.9.1 gem && ln -sf
erb1.9.1 erb && ln -sf irb1.9.1 irb && ln -sf rake1.9.1 rake && ln -sf
rdoc1.9.1 rdoc && ln -sf testrb1.9.1 testrb
Jetzt gibt es ein aktuelles Ruby unter Debian, welches recht genutzt werden kann um Passenger zu installieren. Aber immer der reihe nach. Als erstes wird jetzt die Build Umgebung benötigt.
$ apt-get install -y libcurl4-openssl-dev libssl-dev zlib1g-dev libpcre3
libpcre3-dev libgeoip-dev
Dann wollen wir in /usr/local/src
die Sourcen von nginx haben
$ cd /usr/local/src/ && wget http://nginx.org/download/nginx-1.2.7.tar.gz && tar xzvf nginx-1.2.7.tar.gz && rm nginx-1.2.7.tar.gz
Mit den vorliegenden Sourcen kann jetzt weitergearbeitet werden, wobei darauf zu achten ist, das es sich um das aktuelle Stable Release handelt welches dann auch mittels apt-get installiert werden würde. Darauf folgend wird jetzt Passenger installiert und nginx mit Passenger Modul kompiliert.
$ gem install passenger
$ /var/lib/gems/1.9.1/bin/passenger-install-nginx-module
In der Menügesteuerten Installation ist Option 2 ( Advanced Installation ) zu wählen, als Source dann das nginx Source Verzeichnis (/usr/local/src/nginx-1.2.7
), als Prefix /usr und folgende Argumente sollten zum kompilieren übergeben werden.
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-client-body-temp-path=/var/lib/nginx/body --with-http_ssl_module
--with-http_realip_module --with-http_geoip_module
--with-http_sub_module --with-http_dav_module --with-http_flv_module
--with-http_gzip_static_module --with-http_stub_status_module
--with-mail --with-mail_ssl_module --with-ipv6 --with-debug
Nach dem kompilieren hat man jetzt einen nginx mit Passenger und den Einstellungen wie es unter Debian als default zu betrachten ist. Damit das System jetzt auch noch etwas davon mitbekommen, das wir einen http Server installiert haben, wird etwas getrickst.
$ cd /usr/sbin && mv nginx nginx-passenger
$ mv /etc/nginx /etc/nginx.passenger
$ apt-get install -y nginx
$ mv nginx nginx-debian
$ ln -s nginx-passenger nginx
Jetzt haben wir einen nginx Server mit Passenger und das System kann auch etwas damit anfangen. Als letztes bleibt jetzt noch in der nginx.conf Passenger zu aktivieren und in den entsprechenden vhost ebenfalls.
In die http definition von nginx muss folgendes Eingefügt werden
passenger_root /var/lib/gems/1.9.1/gems/passenger-3.0.19;
passenger_ruby /usr/bin/ruby1.9.1;
Im entsprechenden vhost reicht ein simples passenger_enabled on; und nach einem nginx neustart läuft alles wie erwartet. Zu beachten ist noch das im vhost das DocumetRoot auf das public Verzeichniss der Rails Applikation zeigen muss.