2013年4月29日月曜日

[FuelPHP]FuelPHPのScaffoldで作成した画面をdotcloudにデプロイしてみた[dotcloud]

このエントリーをはてなブックマークに追加 はてなブックマーク - [FuelPHP]FuelPHPのScaffoldで作成した画面をdotcloudにデプロイしてみた[dotcloud]
Bloggerへの移行前のWordpressにて2013-01-12に投稿した記事です。

dotcloudにFuelPHPをデプロイした時のメモ。

前提

ローカル環境にはFuelPHPがインストールされている事。また、MySQLがインストールされている事。やり方が分からない人は以前のエントリ[FuelPHP]FuelPHPでMySQLに接続してScaffoldで画面作成した時のメモをご確認ください。

また、以下で確認を行いました。
  • FuelPHP1.5
  • MySQL
  • ローカル操作はMacOSX
  • dotcloudのCLIは0.9

目次

  1. ローカル環境でScaffold
  2. dotcloud利用の準備
  3. Welcomeページの表示
  4. Scaffoldで作成した画面の表示

1.ローカル環境でScaffold

以前のエントリでも実施しましたが、おさらいも兼ねて。

プロジェクトの作成をします。
$ cd ~/Site/
$ oil create blog
oilコマンドでScaffoldを実施します。
$ php oil g scaffold post title:varchar[255] summary:varchar[255] body:text
migrationを実行してDBにテーブルを作成します。
$ oil refine migrate 
この状態で「http://localhost/blog/public/post/」にアクセスします。するとScaffoldの画面が表示されるかと思います。

2.dotcloud利用の準備

dotcloudを利用する為にアカウント情報の登録とCLIのインストールを行って下さい。

dotcloud

CLI0.9のインストールをMacOSXで実施する際は以下の通りです。(Linux,Windowsの方法は公式Documentをご確認ください)
$ sudo easy_install pip && sudo pip install dotcloud
インストール実施後、以下のコマンドを実行し、dotcloudのログイン情報などを設定して下さい。
$ dotcloud setup

3.Welcomeページの表示

DB接続などが必要ないWelcome画面までをdotcloudで表示します。

まずは必要に応じてドキュメントファイルを削除します。(必須では有りません。)
$ cd ~/Site/blog/
$ rm *.md
$ rm -rf docs
次にdotcloudでアプリケーションを作成します。
下記例では「fuelphpapp」という名称のアプリケーションとしております。

アプリケーション名を別にした場合には以降の「fuelphpapp」としている箇所は自分の作成したアプリケーション名に置き換えて下さい。
$ dotcloud create fuelphpapp
アプリケーションが作成されたかを「dotcloud list」コマンドを利用してアプリケーション名一覧を取得して確認します。
$ dotcloud list
作成したアプリケーション名が表示されればOKです。

次にdotcloudにdeployする際に必須となる「dotcloud.yml」を新規に作成します。
このファイルにはどのサービスを利用するか、DocumentRootがどこかを指定します。
今回の場合、PHPを利用し、DBはMySQLを利用し、DocumentRootはpublicフォルダである事を記載します。
$ cd ~/Site/blog/
$ vi dotcloud.yml
www:
    type: php
    approot: public
db:
    type: mysql
最後にfuelphpappに接続し、ソースコードをpushします。
dotcloud connect fuelphpapp
dotcloud push
dotcloud pushコマンドが完了すると最後に本アプリケーションのアクセスURLが表示されるので、そのURLをブラウザで開きます。Welcome画面が表示されるかと思います。

URLについてはdotcloudのサイトにブラウザからアクセスしてログインを行っても確認出来ます。

4.Scaffoldで作成した画面の表示

dotcloudのWebサーバーはNginxのため、Nginxでrewriteルールを設定します。
nginx.confというファイルに設定を書く事でdotcloudで設定の読み込みを行ってくれます。
以下の通りファイルの新規作成を行います。

参考:FuelPHPをNginxで動かしてみる
$ vi public/nginx.conf
try_files $uri /index.php?$uri&$args;
次にMySQLにDB、ユーザー、テーブルを作成します。

利用しているサービスの内容を確認します。
$ dotcloud info
=== fuelphpapp
flavor:          sandbox
cost to date:    Free
+------+-------+------------+-----------------+
| name | type  | containers | reserved memory |
+------+-------+------------+-----------------+
| db   | mysql | 1          | N/A             |
| www  | php   | 1          | N/A             |
+------+-------+------------+-----------------+
DBの内容を確認します。
$ dotcloud info db
== db
type:            mysql
instances:       1
reserved memory: N/A
config:
  mysql_password:    *********
  mysql_masterslave: True
URLs:            N/A

=== db.0
datacenter:       Amazon-us-east-1c
service revision: mysql/1120eda9aa82 (latest revision)
ports:
  ssh:   ssh://mysql@fuelphpapp---------.azva.dotcloud.net:47618
  mysql: mysql://root
上記のようにDBの接続先やポート番号、rootパスワードなどが表示されます。
rootユーザーでDBに接続する場合は適宜メモを取って下さい。(本エントリではDBユーザーを新規に作成しております)

では、DBにリモートログインします。
$ dotcloud run db -- mysql
DBの作成と確認をします。
作成するDB名は「test_db」としています。
mysql>create database test_db default character set UTF8;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test_db            |
+--------------------+
3 rows in set (0.00 sec)
次にユーザーを作成し、確認します。
作成するユーザー名は「test_db」としまいます。パスワードを記載する「******」の箇所は適宜変更して下さい。
mysql>GRANT ALL ON test_db.* TO 'dbuser'@'%' IDENTIFIED BY '******';
mysql> select host,user from mysql.user where user='dbuser';
+------+--------+
| host | user   |
+------+--------+
| %    | dbuser |
+------+--------+
1 row in set (0.00 sec)
最後にtableを作成し確認します。
mysql> use test_db
Database changed
mysql> CREATE TABLE posts
    -> (
    -> ID INT(11) NOT NULL AUTO_INCREMENT,
    -> TITLE VARCHAR(255) NOT NULL,
    -> SUMMARY VARCHAR(255) NOT NULL,
    -> BODY TEXT NOT NULL,
    -> CREATED_AT INT(11) NOT NULL,
    -> UPDATED_AT INT(11) NOT NULL,
    -> PRIMARY KEY (ID)
    -> );
Query OK, 0 rows affected (2.00 sec)

mysql> show tables;
+-------------------+
| Tables_in_test_db |
+-------------------+
| posts             |
+-------------------+
1 row in set (0.00 sec)
最後にDB接続情報を記載する「db.php」をdotcloudの情報に合わせます。
こちらはUbuntu 12.04 にて dotCloud の MySQL を試してみる (PHP編)を参考にさせて頂きました。

なお、パスワードの「*******」の箇所は適宜変更ください。
vi fuel/app/config/development/db.php
<?php
/**
 * The development database settings. These get merged with the global settings.
 */
$filepath = $_SERVER['HOME'].'/environment.json';
$env = json_decode(file_get_contents($filepath), true);
$host = $env['DOTCLOUD_DB_MYSQL_HOST'];
$port = $env['DOTCLOUD_DB_MYSQL_PORT'];
$dbname = 'test_db';
$dsn = 'mysql:host='.$host.';port='.$port.';dbname='.$dbname;

return array(
 'default' => array(
  'connection'  => array(
            'dsn'   => $dsn,
   'username'   => 'dbuser',
   'password'   => '*******',
            'persistent'  => false,
            'compress'  => false,
  ),
 ),
);
上記設定ファイル例では接続先情報についてはdotcloudの各種設定が記載された「environment.json」をパースし、$dsnとして設定しております。

ファイルを確認し、直接書く事も可能ですが、私はコピペミスをしてDBに接続出来ない!という事があったので、上記のようなファイルから値を取得し、反映させる方法が確実かと思います。

最後に再度ソースコードをpushします。
dotcloud push
「http://[hostname]/post/」というようにブラウザに入力するとScaffold画面が表示されるかと思います。
長い文章になってしまいました、お疲れ様でした。

なお、上記のままだとローカルのFuelPHPが動かなくなってしまうので、ローカルとdotcloudの環境を分けると良いかと思います。(localhostは\Fuel::DEVELOPMENT,dotcloudは\Fuel::PRODUCTIONなど。) 

0 件のコメント:

コメントを投稿