Plack上でPHP(php-cgi)を動かすモジュールPlack::App::PHPCGIと任意のCGIも動かせるPlack::App::CGIBinを使ってApacheナシでNagiosをインストールする方法

まず、php-cgiをインストールする。CentOSの場合、php(53)?-cliというパッケージがあるのでそれを使います

$ sudo yum install php53-cli #centos5。centos6だとphp-cli

次にnagiosを動かすユーザを作成します

$ sudo /usr/sbin/adduser nagios

nagios本体とpluginをダウンロードしていれます。その際にApacheの設定はインストールしません

$ wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.3.tar.gz \
   http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.16.tar.gz
$ tar zxf nagios-3.4.3.tar.gz
$ cd nagios
$ ./configure --with-httpd-conf=/tmp
$ make all
$ sudo make install
$ sudo make install-init
$ sudo make install-commandmode
$ sudo make install-config
$ cd ..

$ tar zxf nagios-plugins-1.4.16.tar.gz
$ cd nagios-plugins-1.4.16
$ ./configure --with-openssl 
$ make 
$ sudo make install

そしてnagiosの設定をごにょごにょしてnagios本体の起動

$ sudo /etc/init.d/nagios start

WebUIを起動するための準備でPlackと依存モジュールをインストールします。インストール先は /usr/local/nagios/plack です

$ sudo install -o 作業用ユーザ -g 作業用グループ -d /usr/local/nagios/plack
$ cd /usr/local/nagios/plack
$ curl -kL http://cpanmin.us/ | /usr/bin/perl - -n -lextlib Plack \
    Plack::App::PHPCGI Plack::Builder::Conditionals \
    Plack::Middleware::ReverseProxy CGI::Compile Starlet

このディレクトリにapp.psgiとして以下のgistを設置します

PSGIファイルの中で固定でユーザを指定していますが、Plack::Middleware::Auth::Basic を使って認証させることもできます

最後にwebサーバを起動します。ここではport 5000を指定してます

$ /usr/bin/perl -Mlib=/usr/local/nagios/plack/extlib/lib/perl5 \
    /usr/local/nagios/plack/extlib/bin/plackup -s Starlet -p 5000  \
    /usr/local/nagios/plack/app.psgi

ブラウザで http://hostname:5000/ に対してアクセスするとwebuiが見れるようになっているはずです。このプロセスをdaemontoolsやsupervisordなどで起動してやるとなお良いでしょう。

んで何がうれしいの?

nagiosのwebuiにはいくつかphpのファイルがあるので、普通にインストールしようとするとApache+mod_phpが必要になってしまいますが、管理ツールの為だけにApacheを起動するのは少し大袈裟のように思えます。

Apacheなしでphpを動かすにはphp-fpmやphp 5.4で追加された内蔵webサーバがありますが、どちらも*.cgiを動かすことはできません。そこでPlackとPlack::App::PHPCGIを組み合わせると *.php も *.cgi も実行できて、認証なども一括して行うことができるのがこの方法の良いところですね

ということで、やっとnagios 2系から3系へアップデートをしました