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を設置します
use Plack::App::CGIBin; | |
use Plack::App::PHPCGIFile; | |
use Plack::Builder; | |
use Plack::Builder::Conditionals; | |
my $cgibin = Plack::App::CGIBin->new( | |
root => "/usr/local/nagios/sbin", | |
exec_cb => sub { my $file = shift; $file =~ m!\.cgi$! and -x $file }, | |
)->to_app; | |
my $htdocs = Plack::App::PHPCGIFile->new( | |
root => '/usr/local/nagios/share' | |
)->to_app; | |
builder { | |
enable match_if addr([qw!127.0.0.1!]), 'ReverseProxy'; | |
enable sub { | |
my $apps = shift; | |
sub { | |
my $env = shift; | |
return [302,[Location=>'http://'.$env->{HTTP_HOST}.'/nagios/'],['moved']] if $env->{PATH_INFO} =~ m!^/(nagios)?$!; | |
$env->{REMOTE_USER} = 'nagiosadmin'; | |
$env->{PATH_INFO} .= 'index.php' | |
if $env->{PATH_INFO} =~ m!^/nagios/([^\.]+/)*$!; | |
$apps->($env); | |
}; | |
}; | |
mount '/nagios/cgi-bin' => $cgibin, | |
mount '/nagios' => $htdocs, | |
} | |
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系へアップデートをしました