lighttpd + virtualhost + fastcgi + Catalyst

半日に及ぶ試行錯誤の結果

  • 最新版 lighttpd(1.4.15)
  • バーチャルホストを有効
  • fastcgi を使用
  • 複数 Catalyst アプリの実行

に成功したので、その設定をメモしておきます。お金がないので、とりあえずひとつのサーバーでサービスをたくさん起動したい、という時に使える方法です。

pcre のインストール

これがインストールされていないとまともに動かないので、先にインストールします。

$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.1.tar.gz
$ tar xvzf pcre-7.1.tar.gz
$ cd pcre-7.1
$ ./configure
$ make
$ sudo make install

ligttpd のインストール

さきほどインストールした pcre を有効にし、ついでに openssl も有効にしておきます。

$ wget http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz
$ tar xvzf lighttpd-1.4.15.tar.gz
$ cd lighttpd-1.4.15
$ ./configure --with-openssl --with-openssl-libs=/usr/lib --prefix=/usr/local/lighttpd --with-pcre
$ make
$ sudo make install
$ cd /usr/local/lighttpd
$ sudo mkdir conf htdocs logs
$ sudo cp /somewhere/lighttpd-1.4.15/doc/lighttpd.conf conf
$ sudo cp /somewhere/lighttpd-1.4.15/doc/rc.lighttpd.redhat /etc/rc.d/init.d/lighttpd

/etc/rc.d/init.d/lighttpd 中の実行ファイルと設定ファイルの位置を適当に修正します。

fastcgi のインストール

$ wget http://www.fastcgi.com/dist/fcgi.tar.gz
$ tar xvzf fcgi-2.4.0.tar.gz
$ cd fcgi-2.4.0
$ ./configure
$ make
$ sudo make install

FCGI モジュールのインストール

$ sudo cpan FCGI

設定ファイル

/usr/local/lighttpd/conf/lighttpd.conf に以下の内容を追加します。

$HTTP["host"] == "app1.test.com" {
  server.document-root  = "/home/foobar/App1/root"
  server.errorlog = "/tmp/app1/error.log"
  fastcgi.server = (
    "" => ((
      "check-local" => "disable",
      "bin-path"  => "/home/foobar/App1/script/app1_fastcgi.pl",
      "socket"    => "/tmp/app1/fcgi.socket",
      "bin-environment" => ( "CATALYST_DEBUG" => "1" ),
      "min-procs" => 1,
      "max-procs" => 1,
    ))
  )
}

$HTTP["host"] == "app2.test.com" {
  server.document-root  = "/home/foobar/App2/root"
  server.errorlog = "/tmp/app2/error.log"
  fastcgi.server = (
    "" => ((
      "check-local" => "disable",
      "bin-path"  => "/home/foobar/App2/script/app2_fastcgi.pl",
      "socket"    => "/tmp/app2/fcgi.socket",
      "bin-environment" => ( "CATALYST_DEBUG" => "1" ),
      "min-procs" => 1,
      "max-procs" => 1,
    ))
  )
}

$HTTP["host"] =~ "(www\.|)test\.com" {
  server.document-root = "/usr/local/lighttpd/htdocs"
}

ソケット用ディレクトリの作成

$ su -
$ cd /tmp
$ mkdir app1
$ chmod 775 app1
$ mkdir app2
$ chmod 775 app2

ligttpd の起動

$ sudo /etc/rc.d/init.d/lighttpd start