読者です 読者をやめる 読者になる 読者になる

letsspeak's diary

世界を大いに盛り上げるためのletsspeakの日記。

初心者がCentOSでFuelPHPのstationwagonを動かしてみた

FuelPHP CentOS nginx apache

Webアプリケーションを作ろうと、さくらのVPS (CentOS 6.3) で Ruby on Rails を弄ったりしていたのですが、Railsはどうも記述されていないルールが掴めないので、もう一度FuelPHPをはじめなおしてみました。

今回も意外と詰んだりしたので手順を残しておきます。
初心者なので間違っている設定などあるかもしれません。ご注意ください。

偉大なる先人様の参照記事
FuelPHP のサンプルアプリ「Stationwagon」をみてみる - A Day in Serenity @ kenjis

0. nginx, apache, MySQL をインストール

基本設定も終了済みの状態から始めました。
色々ググって探せばなんとかなると思います。たぶん。

1.nginx と apache の連携

今回は既に複数のunicorn_railsと連携中のnginxさんにapacheの設定を追加しました。
apacheさんも既にhogeに割り当てられていたためバーチャルホストで対応します。

/etc/nginx/nginx.conf
  upstream fuelhoge {
    server 127.0.0.1:8000;
  }

  upstream hoge {
    server 127.0.0.1:8001;
  }

  server {
    listen 80;
    server_name fuelhoge.jp.;

    access_log /var/log/nginx_fuelhoge_access.log;
    error_log /var/log/nginx_fuelhoge_error.log;

    proxy_connect_timeout 60;
    proxy_read_timeout    60;
    proxy_send_timeout    60;

    location / {

      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_pass http://fuelhoge;
      proxy_redirect off;
    }
  }

  server {
    listen 80;
    server_name hoge.jp;

    proxy_connect_timeout 60;
    proxy_read_timeout    60;
    proxy_send_timeout    60;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_pass http://hoge;
      proxy_redirect off;
    }
  }
/etc/httpd/conf/httpd.conf
Listen 8000
Listen 8001

<VirtualHost *:8000>
  ServerName fuelhoge.jp
  DocumentRoot /var/www/fuelhoge
</VirtualHost>

<VirtualHost *:8001>
  ServerName hoge.jp
  DocumentRoot /var/www/hoge
</VirtualHost>

<Directory "/var/www/fuelhoge/stationwagon/public">
  AllowOverride All
</Directory>

NameVirtualHost *:8001

(前回のmacでの設定時同様、AllowOverride All の設定を忘れていて少し詰みました。)

2.stationwagonのインストールとパーミッション設定

$ git clone git://github.com/abdelm/stationwagon.git
$ cd stationwagon
$ oil r install

ここでは操作ユーザーの書き込み権限が無くてgit cloneで詰みました。
作業ユーザーは既にapacheグループに追加済みでしたので、/var/www/fuelhoge/ のapacheグループの書き込み権限を有効にしました。

$ chmod 775 /var/www/fuelhoge

3.stationwagonのconfig.phpを設定

設定は参照元の記事の通りです。

--- a/fuel/app/config/config.php
+++ b/fuel/app/config/config.php
@@ -41,7 +41,7 @@ return array(
         *
         * Set this to false or remove if you using mod_rewrite.
         */
-       'index_file'  => 'index.php',
+       'index_file'  => '',
 
        'profiling'  => false,
 
@@ -71,7 +71,7 @@ return array(
         */
        'language'           => 'en', // Default language
        'language_fallback'  => 'en', // Fallback language when file isn't available for default language
-       'locale'             => 'en_US', // PHP set_locale() setting, null to not set
+       'locale'             => 'ja_JP.utf8', // PHP set_locale() setting, null to not set
 
        'encoding'  => 'UTF-8',
 
@@ -81,8 +81,8 @@ return array(
         * server_gmt_offset    in seconds the server offset from gmt timestamp when time() is used
         * default_timezone             optional, if you want to change the server's default timezone
         */
-       'server_gmt_offset'  => 0,
-       'default_timezone'   => 'UTC',
+       'server_gmt_offset'  => 3600 * 9,
+       'default_timezone'   => 'Asia/Tokyo',
 
        /**
         * Logging Threshold.  Can be set to any of the following:
@@ -94,7 +94,7 @@ return array(
         * Fuel::L_INFO
         * Fuel::L_ALL
         */
-       'log_threshold'    => Fuel::L_WARNING,
+       'log_threshold'    => Fuel::L_ALL,
        'log_path'         => APPPATH.'logs/',
        'log_date_format'  => 'Y-m-d H:i:s',
【注意】上記では server_gmt_offset を 3600*9 秒 = 9時間 に変更していますが、サーバ側でロケール設定を日本時間に合わせてある場合、変更せずに 0 のままで問題ないようです!

4.データベースの作成

データベースの作成も参照元記事と同じです。
MySQLにログインして下記コマンドを打ち込みます。

> CREATE USER 'stationwagon'@'localhost' IDENTIFIED BY '***';

> GRANT USAGE ON * . * TO 'stationwagon'@'localhost' IDENTIFIED BY '***' 
 WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 
 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

> CREATE DATABASE IF NOT EXISTS `stationwagon` ;

> GRANT ALL PRIVILEGES ON `stationwagon` . * TO 'stationwagon'@'localhost';

テーブルの作成は面倒なので stationwagon/database.sql を流し込んだのですが、実際に動かして Sign Up を実行したときにusers テーブルに crated_at が無いというエラーが出たため、下記のように変更しました。

diff --git a/database.sql b/database.sql
index a87b3aa..88da9b8 100644
--- a/database.sql
+++ b/database.sql
@@ -11,7 +11,8 @@ CREATE TABLE `users` (
   `login_hash` tinytext COLLATE utf8_unicode_ci,
   PRIMARY KEY (`id`),
   UNIQUE KEY `username` (`username`),
-  UNIQUE KEY `email` (`email`)
+  UNIQUE KEY `email` (`email`),
+  `created_at` bigint(20) unsigned DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

database.sqlをデータベース stationwagon へ流し込みます。

mysql -u stationwagon -p -h localhost stationwagon < database.sql

5.データベース接続設定

これも参照先の記事とまったく同じで大丈夫でした。

--- a/fuel/app/config/development/db.php
+++ b/fuel/app/config/development/db.php
@@ -7,8 +7,9 @@ return array(
        'default' => array(
                'connection'  => array(
                        'dsn'        => 'mysql:host=localhost;dbname=stationwagon',
-                       'username'   => 'root',
-                       'password'   => '',
+                       'username'   => 'stationwagon',
+                       'password'   => '***',
                ),
+               'table_prefix' => 'sw_',
        ),
 );

6.mod_rewriteの設定

1に書いた通りAllowOverride Allが問題なければ大丈夫でした。


以上です。
想像以上に詰まりましたが、参照元の記事に加えて、まさかの自分の前回の記事がとても頼りになりました。
もし間違いなどがありましたらご指摘いただけると嬉しいです!

追記

@kenji_sさんからTwitterでご指摘頂いた、server_gmt_offsetの設定について修正しました。
ご指摘ありがとうございます!