Nginx で Silex を動かすまで
今月号の WEB+DB Press を買ったら Silex なる聞き覚えのない単語があったので調べる君したところ、Symfony2 の作者さんがメンテしてる PHP の軽量フレームワーク ( Sinatra 風? ) じゃないですかやったー!という訳で、公式には Apache ならこうしろよ!ってコンフィグ載せてくれてたけど、Nginx は書いてなかったので、試してみた。
- ロケ地:Serversman@VPS
- CentOS 5.7 64bit
- Nginx 1.0.0
- 参考:http://silex-users-jp.phper.jp/
Nginx で PHP を実行しましょう
割愛。あとで別途書こうと思いますが、Nginx に FastCGI サポートのコンパイルオプションつけてインストールしてください。FastCGI 経由で php を起動できるようにしておきます。
起動できましたか?できたら下記の記事を参考にコンフィグファイルにリダイレクトの設定とかをぶち込みましょう。
nginx vhost conf silex & symfony · GitHub
めんどくさい人のために、僕が試した時の Nginx の設定ファイルもここにおいときますね(スッ)。
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; gzip_http_version 1.0; gzip_vary on; gzip_comp_level 6; gzip_types text/xml text/css application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php; gzip_disable "MSIE [1-6]\."; server { listen 80; server_name YOURSERVERNAME; charset UTF-8; access_log /var/log/nginx/YOURSERVERNAME_access.log combined; error_log /var/log/nginx/YOURSERVERNAME_error.log; location / { #root /var/www/html/silex; index index.php index.html index.htm; if (-f $request_filename) { expires max; break; } if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") { rewrite ^(.*) /index.php last; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:8080 # location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:8080; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/silex/$fastcgi_script_name; include fastcgi_params; } } }
Silex をインストールする
※以下ドキュメントルートを /var/www/html/silex とします。
php.ini の設定から、phar ブロックを確認します。ムッ。
今回のロケ地では、インストール後動作確認で Wordpress を動かしただけだったので、以下のようになっていました。
[Phar] ; http://www.php.net/manual/en/phar.configuration.php#ini.phar.readonly ;phar.readonly = On ; http://www.php.net/manual/en/phar.configuration.php#ini.phar.require-hash ;phar.require_hash = On ;phar.cache_list =
つーことで、ドキュメントに従い下記のように修正します。
[Phar] ; http://www.php.net/manual/en/phar.configuration.php#ini.phar.readonly phar.readonly = Off ; http://www.php.net/manual/en/phar.configuration.php#ini.phar.require-hash phar.require_hash = Off detect_unicode = Off
Silex をダウンロードしてドキュメントルートに配置します。ムッ。
wget してくるだけでおk、必要ならばファイルの所有者は nginx の実行ユーザにあわせておきましょう。ロケ地の Nginx は、nginx ユーザの nginx グループで動作しています。
$ cd /var/www/html/silex $ wget http://silex.sensiolabs.org/get/silex.phar $ chown nginx:nginx silex.phar
コントローラの準備
コントローラというかルーティングというか、とにかく silex.phar を呼び出すファイルを作成しましょう。ここでは動作確認程度の予定なので、公式ドキュメントの通り hello/XXXX へのルーティングを記述したファイルを用意します。ホァイ!
$ cd /var/www/html/silex $ vi index.php $ chown nginx:nginx index.php
内容は公式ドキュメントにも記載されているイカのコードでゲソ。
<?php require_once __DIR__.'/silex.phar'; $app = new Silex\Application(); $app->get('/hello/{name}', function ($name) use ($app) { return 'Hello '.$app->escape($name); }); $app->run(); ?>
キシン流奥義
ヴォー。これで準備は整いましたね。じゃあ Nginx と FastCGI を起動して、http://YOURSERVERNAME/hello/world へアクセスしてみてください。これで「hello world」と表示されたら無事動作してますね、お疲れ様でした。
Silex しゅごい
素直に Sinatra 使えよ!って感じですが、Ruby 実行できないけど PHP 5.3 以上はインストールされてるよ!とかいう PHP Love!! な環境のサーバを用意された場合は、非常に良い選択肢となりえるのではないでしょうか、規模にもよりますが。あとは規模はそれなりだけど、Symfony や CakePHP 持ち出すのはおもすぎんよ〜、という場合は、PHPer にとっては非常に気軽にコードが書けそうな雰囲気です。
まあ、上記のように、PHP 5.3 以上が必要だったり、rewrite しないといけないので、htaccess 用意するなりしないとだめっぽそうですが、選択肢としては有用かと思いますyp!流行れ!