NOTES : 2011-12-23 : WEB

FuelPHPをNginxで動かしてみる

本当に勢いだけで参加させて頂いた FuelPHP Advent Calendar 2011 23日目 担当 @akibe です。

昨日22日は @kenji_s さんの「 FuelPHP でのセキュリティ対策(2) 」でした。


丁度 Nginx に FuelPHP入れる時、あまり纏まった情報が見つからなかったので、
今回はその設定と手順をメモしてみました。

インストール

FuelPHPのインストールはNginxとか関係ないので、通常通りインストールします。
インストールには、公式サイトのマニュアル通り、oil を使ったインストールが簡単です。
尚、ユーザーに sudo 権限があることと、Gitがインストールされている必要があります。

FuelPHPはコマンドライン無しでインストールも稼働も可能ですが、使える場合は使った方が楽です。

$ curl get.fuelphp.com/oil | sh

   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
   100   244  100   244    0     0    396      0 --:--:-- --:--:-- --:--:--     0
   [sudo] password for username: 

これで oil コマンドがインストールされました。
次に、サーバのウェブディレクトリに行って、oilコマンドでFuelPHPのプロジェクトを作成します。

$ cd /var/www/
$ oil create hogehoge

これで /var/www/hogehoge にFuelPHPがインストールされました。

手動でファイルをインストールする場合

sudo権限とかGitとか無い場合は、手動でもインストール可能です。

  1. フレームワークをダウンロードします。
    http://docs.fuelphp.com/installation/download.html

  2. zipファイルを解凍します。

  3. 以下のディレクトリとファイルをサーバにアップロードします。

    fuel/
        app/
        core/
        packages/
    public/
        .htaccess
        assets/
        index.php
    oil
    
  4. 以下のディレクトリの権限を書き込み可能にします。

    fuel/app/cache
    fuel/app/logs
    fuel/app/tmp
    fuel/app/config
    

これで完了です。

Nginxの設定

FuelPHPに含まれる .htaccess ファイルのrewrite設定等を、
Nginx用のホスト設定に try_files で書き換えて設定してあげます。
ドメインやディレクトリパスは適宜変更してください。

server {
    listen 80;
    server_name hogehoge.example.com;
    access_log /var/log/nginx/hogehoge.access.log;
    error_log /var/log/nginx/hogehoge.error.log;
    root /var/www/hogehoge/public;
    charset utf-8;
    index index.php;

    # すべてのアクセスをindex.phpに振ります。
    location / {
        try_files $uri /index.php?$uri&$args;
    }

    # phpを実行できるようにします。
    location ~ .*\.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        #fastcgi_param  FUEL_ENV production; #リリース時にはコメントを外して有効にします。
        include        fastcgi_params;
    }

    # すべての不可視ファイルをアクセス不可にします。
    location ~ /\. {
        access_log off;
        log_not_found off;
        deny all;
    }
}

publicをルートにできない場合

サーバの都合でpublicをルートにできない場合は、上のコードの location / {…} のブロックを以下のようにします。

# すべてのアクセスをindex.phpに振ります。
location / {
    try_files $uri /public/index.php?$uri&$args;
}

# FuelPHPの実行ファイルをアクセス不可にします。
location /fuel/ {
    deny all;
}

これで、ルートにアクセスしても、public/index.php を呼び出してくれます。
また、この配置だとFuelPHPの実行ファイルが見えてしまうので、アクセス不可にします。

サブディレクトリに置く場合

さらに、既存サイトの一部分に使う等で、サブディレクトリに入れる場合は、以下のようになります。

location ~ ^/sub_directory/(.*)$ {
    try_files $uri /sub_directory/public/$1 /sub_directory/public/index.php?$1;
}
location /sub_directory/fuel/ {
    deny all;
}

この場合、設定ファイル「fuel/app/config/config.php」の base_url の設定も必要です。

'base_url'  => null,
    ↓
'base_url'  => '/sub_directory/',

リリース時の環境変数の変更

FuelPHPはデフォルトの設定で、詳細なエラー表示や、デバッグ用の設定ができるように、開発モードにセットされています。リリース時にはこれを切り替える為に、環境変数 FUEL_ENV に production を設定する必要があります。
Nginxで記述する場合は、location ~ .*\.php$ {…} のブロックに fastcgi_param で設定します。

location ~ .*\.php$ {
    ...
    fastcgi_param  FUEL_ENV production;
}

動作チェック

rewrite がちゃんと動いているか確認する為に、 /hello/akibe にアクセスしてみましょう。

http://hogehoge.example.com/hello/akibe

「Hello,akibe!」と表示されればOKです。

最後に

基本的にApache向けのシステムをNginxで動かす時に変更しなくちゃいけないのはrewriteの設定なのですが、慣れないうちは意外と悩み所なので、参考になればと思います。
FuelPHPはやっと触り始めた段階ですが、サクリと何か作るには非常にレスポンスが良くていいフレームワークのような気がします。 scaffoldとか使いこなせるようになれば、かなり素早く開発ができそう。

あと、開発にCodeIgniterの開発者も参加してるそうですが、ネーミングが点火装置とかオイルとか燃料とか、。
このノリは嫌いじゃないです。;-P


いよいよ FuelPHP Advent Calendar 2011 もあと2日。

明日24日は @kenji_s さんの「 FuelPHP でのセキュリティ対策(3) 」です。

コメント (0件) - 表示・投稿 ▼