lighttpdを開発用に使う

ウェブアプリケーションを作る時、Apacheの設定が煩わしくなる事があります。 以前バージョン0.6.xのSymfonyでは

symfony server
というのが用意されていてsymfonyコマンドからテスト用のウェブサーバを手軽に立てる事ができましたが何らかの理由により廃止されてしまったようです。そこでコマンド一発でlocalhostの任意のポートに手軽に立てられるサーバ環境を作ってみました。

lighttpd + fastcgi版PHP5

symfony.jpのwikiを参考にしてください。

サーバの設定ファイル

lighttpd開発元のwikiにあったサンプルをベースに以下のように作りました。config/lighttpd.confとして置いてあります。

server.modules              = (
                                "mod_alias",
                                "mod_fastcgi",
                                "mod_accesslog" )
 
server.document-root        = "~/myproject/web"
alias.url = ( "/sf/" => "/usr/local/lib/php/data/symfony/web/sf/" )
 
accesslog.filename          = "~/myproject/log/lighttpd-access.log"
server.errorlog             = "~/myproject/log/lighttpd-error.log"
server.pid-file             = "~/myproject/log/lighttpd.pid"
 
index-file.names	    = ("index.php")
 
server.event-handler = "freebsd-kqueue" # needed on OS X
static-file.exclude-extensions = ( ".php" )
server.port = 10101
server.bind = "localhost"
fastcgi.server             = ( ".php" =>
                               ( "localhost" =>
                                 (
                                   "socket" => "~/myproject/log/php-fastcgi.socket",
                                   "bin-path" => "/path/to/php-fcgi"
                                 )
                               )
                            )
# mimetype mapping
mimetype.assign             = (
  ".gif"          =>      "image/gif",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
 )

lighttpdの実行

lighttpd -c config/ligihttpd.conf
open http://localhost:10101/

きちんと動きます。

現状の問題点

Apacheではないんで、web/.htaccessで設定している内容なんて当然無効です、mod_rewriteが使えません。つまり、no_script_name: offでないと動きませんがテストでしか使わないのでとりあえず問題にしない事にします。

lighttpdプラグイン

lighttpdの実行を簡単にするsymfonyコマンドのタスクをsfLighttpdPluginプラグイン作成してみました。 sfConfigurePluginと一緒に使う前提で作られています。

sfLighttpdPluginには、init-lighttpdというタスクとlighttpdというタスクが追加されます。

symfony init-lighttpd はconfig/lighttpd.conf.inを作成します。symfony configureはこのファイルから設定されたconfig/lighttpd.confを生成します。設定可能な項目は以下の通りです。

$./configiure --help
./configure
     --with-lighttpd=CMD       lighttpd command [lighttpd]
     --with-server-port=PORT   server port to listen [10088]
     --with-server-bind=SERVER server name or ip to listen [localhost]
     --with-openurl=CMD        open url command [open]

symfony lighttpdタスクは以下のサブコマンドを受け付けます。

サーバの開始

symfony lighttpd start

サーバの停止

symfony lighttpd stop

URLを開く

symfony lighttpd open

実行コマンドは–with-openurlで設定します。デフォルトはopenですMacOSX用です。

プロジェクトを手軽に作るシェルスクリプト

私はsfLighttpdPluginを使って以下のようなスクリプトを作成して手軽にプロジェクトを作れるようにしています。

#!/bin/bash
project=$1
 
mkdir ${project}
cd ${project}
symfony new ${project}
svn co http://svn.tracfort.jp/svn/dino-symfony/plugins/sfConfigurePlugin plugins/sfConfigurePlugin
svn co http://svn.tracfort.jp/svn/dino-symfony/plugins/sfLighttpdPlugin  plugins/sfLighttpdPlugin
symfony init-bootstrap
symfony init-configure
symfony init-lighttpd
# fix-up
sed -e 's/^#//' < config/databases.yml.in >config/databases.yml.in.tmp
mv config/databases.yml.in.tmp config/databases.yml.in
 
./bootstrap
./configure

実は今回初めてlighttpdを使ったのですが軽くて良いサーバですね。もうちょっと軽そうなshttpdとかも検討したのですがコンパイルが通らず今回は見送りました。またfastcgi版PHPを作るのが面倒なので遅くてもいいので普通のcgi版を使えないか今後研究課題にしたいとおもいます。

Leave a Reply

You must be logged in to post a comment.