ラベル DotCloud の投稿を表示しています。 すべての投稿を表示
ラベル DotCloud の投稿を表示しています。 すべての投稿を表示

2012年8月25日土曜日

Ubuntu 12.04 にて dotCloud の MySQL を試してみる (PHP編)


二回続けてのdotCloudエントリ
本エントリはUbuntu 12.04 にて dotCloud の MySQL を試してみる (コマンドライン編) の続きです。
前回はコマンドラインで、helloworldサービスを作り、データベースとテーブルを作って、データをINSERTするところまでやりました。

今回はPHPからMySQLを操作してみます。

このエントリの目次
  1. PHP + MySQLのサービスにする
  2. environment.json
  3. PHPでMySQLに接続する
  4. PHPでMySQLを操作する
  5. 参考にさせて頂いたサイト
  6. さいごに

1.PHP + MySQLのサービスにする
dotcloud.ymlを下のように書きます。
my_www:
    type: php 
my_database:
    type: mysql
my_wwwmy_database は好きな文字列を指定できます。
あとは、下のコマンドを打てばOKです。
dotcloud push helloworld
# upload ~/work/dotcloud/helloworld ssh://dotcloud@uploader.dotcloud.com:443/helloworld
# rsync
building file list ... done
./
(中略)
Deployment finished. Your application is available at the following URLs
my_www: http://helloworld1-windblue.dotcloud.com/
www: http://helloworld-windblue.dotcloud.com/

2.environment.json
dotCloudにはenvironment.jsonという設定ファイルがあり、そこに色々な情報が入っています。
ホスト名やポート番号などのMySQLに関する情報も入っていて、それらはDOTCLOUD_MY_DATABASE_MYSQL_XXXというキーに格納されています。

PHPからMySQLに接続するにあたって、その設定ファイルを確認します。

詳しくはdotCloudのドキュメントにも載っているのでそちらも参照して下さい。

PHPからenvironment.jsonを確認
ローカルにてdotcloud.ymlと同じディレクトリにindex.phpを作り、下のようなソースを書いて dotcloud push します。
<?php

// environment.json ファイルから接続に必要な情報を取得
$filepath = $_SERVER['HOME'].'/environment.json';

$env = json_decode(file_get_contents($filepath), true);
foreach ($env as $key => $value) {
    print_r($key . "=" . $value . "<br />");
}

作ったページにアクセスすると、設定値一覧が見れます。

SSH接続して直接environment.jsonを確認
PHPからじゃなくても、直接dotCloudのサーバに入って確認することもできます。
下のコマンドでサーバに入ります。
dotcloud ssh helloworld.my_www
helloworld.my_wwwは <作ったサービス名>.<dotcloud.ymlに書いたキー です。

サーバに入ると、カレントディレクトリは
/home/dotcloud/
になります。
ls コマンドで見ると、environment.json がありました。
$ ls
code  current  environment.json  environment.yml  php-env  revisions  rsync-1345870675271

environment.yml というファイルもありましたが、内容は大体同じのようです。

3.PHPでMySQLに接続する
index.php を下のように書けばOKです。
<?php

// environment.json ファイルから接続に必要な情報を取得
$filepath = $_SERVER['HOME'].'/environment.json';

// 'DOTCLOUD_MY_DATABASE_MYSQL_MYSQL_XXX' というキーでMySQL関連のデータが入っている
$host = $env['DOTCLOUD_MY_DATABASE_MYSQL_HOST'];
$user = $env['DOTCLOUD_MY_DATABASE_MYSQL_LOGIN'];
$pass = $env['DOTCLOUD_MY_DATABASE_MYSQL_PASSWORD'];
$port = $env['DOTCLOUD_MY_DATABASE_MYSQL_PORT'];

//前回のエントリで作成したデータベース「nujabes」
$dbName = 'nujabes';

//mysqliオブジェクト作成
$mysqli = new mysqli($host, $user, $pass, $dbName, $port);

PDOで接続したい場合はDotCloudでのMySQL,Redis,MongoDBの使い方 | Rest Termが非常に参考になります(ただしenvironment.jsonの、MySQLに関するキーが古いようですので そこだけご注意を)。
4.PHPでMySQLを操作する
もうあとは通常のMySQL操作と同様です。
//前回のエントリで作成した「songs」というテーブルから全行取得するSQLを発行
$result = $mysqli->query('SELECT * FROM songs;');

//結果を取得していく
$rows = array();
while ($row = mysqli_fetch_assoc($result)) {
    $rows[] = $row;
}

//実行結果を表示
print_r($rows);
これで作ったページにアクセスすると、
Array ( [0] => Array ( [id] => 0 [title] => Luv (Sic) Pt. 2 ) )
と表示されます。

やったね!

5.参考にさせて頂いたサイト
  1. DotCloud で PHP アプリを設置してみたときの色々 | 肉とご飯は甘いもの @ sotarok
  2. DotCloudでのMySQL,Redis,MongoDBの使い方 | Rest Term

5.さいごに
あとはnginx、cronの使い方を覚えれば、超基本的なバックエンドサービスは実現できそうです。
PHP のフレームワークはどうするかと悩んでいるところですが…。

あと、少し日付が古いですが、dotcloudのpostgres(たぶんmysqlも)はデフォルトで全接続を許可するので気をつけよう | uuu という不穏な記事も見つけたので、こちらも確認していきます。

それでは。

2012年8月24日金曜日

Ubuntu 12.04 にて dotCloud の MySQL を試してみる (コマンドライン編)


久しぶりのdotCloud
超久しぶりです。

ちょっとやりたい事ができて、バックエンドをdotCloudで実装しようと思ったので触ってみました。

このエントリの目次
  1. dotCloudの導入
  2. MySQLつきのサービスをデプロイする
  3. MySQLをコマンドラインから触ってみる
  4. さいごに
1.dotCloudの導入
dotCloud の導入については、当ブログの DotCloud + PHPで「Hello World」をUbuntu 11.04で試してみた に書いてるので、そちらをご参照下さい。

2.MySQLつきのサービスをデプロイする
まずは適当にhelloworldディレクトリを作ってその中に移動します。
$ mkdir helloworld
$ pwd
~/work/dotcloud/helloworld

そこでdotcloud.ymlという名前で下記のような設定ファイルを作ります。
my_database:
    type: mysql

「my_database」は好きな文字列を指定できます。

あとはサービスを作成して、dotCloudに同期させるだけでOKです。

まずサービスの作成。
helloworld という名前で作成します。
$ dotcloud create helloworld
Created application "helloworld" using the flavor "sandbox" (Use for development, free and unlimited apps. DO NOT use for production.).
This flavor cannot be changed.

** YOU HAVE CREATED A SANDBOX APPLICATION **
SANDBOX applications may not be scaled, may not use custom domains,
and do not have the same performance guarantees as "live" applications.
SANDBOX applications cannot be upgraded.

Information about the different flavors offered can be found here:
http://docs.dotcloud.com/guides/flavors/

そしてdotCloudに同期。
$ dotcloud push helloworld
# upload ~/work/dotcloud/helloworld ssh://dotcloud@uploader.dotcloud.com:443/helloworld
# rsync
building file list ... done
./
dotcloud.yml

sent 148 bytes  received 34 bytes  28.00 bytes/sec
total size is 29  speedup is 0.16
16:31:09 ---> Deploy of "helloworld" scheduled for revision rsync-1345739468475 at 2012-08-23 16:31:09
16:31:09 ---> Building the application...
16:31:09 ---> Nothing to build
16:31:09 ---> Initializing new services... (This may take a few minutes)
16:31:09 ---> Using default scaling for service my_database (1 instance(s)).
16:31:09 [my_database.0] Initializing...
16:31:24 [my_database.0] Service initialized
16:31:25 ---> Deploy finished

Deployment finished. Your application is available at the following URLs
No URL found. That's ok, it means that your application does not include a webservice.

3.MySQLをコマンドラインから触ってみる
下記のコマンドでMySQLの対話モードに入ります。
$ dotcloud run helloworld.my_database -- mysql
# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.1.41-3ubuntu12.10-log (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
コマンド中のhelloworld.my_databaseは、<createしたサービス名>.<dotcloud.ymlに記述したMySQLのキー>に相当します。

で、まずはデータベースを作って。
mysql> CREATE DATABASE nujabes;
Query OK, 1 row affected (0.00 sec)

作ったデータベースを使います。
mysql> use nujabes;
Database changed

そのデータベース中にテーブルを作って。
mysql> CREATE TABLE songs(id INT(10), title VARCHAR(64));
Query OK, 0 rows affected (0.04 sec)

値を入れてみます。
mysql> INSERT INTO songs(id, title) VALUES(0, 'Luv (Sic) Pt. 2');
Query OK, 1 row affected (0.01 sec)

SELECT文で確認します。
mysql> SELECT * FROM songs;
+------+-----------------+
| id   | title           |
+------+-----------------+
|    0 | Luv (Sic) Pt. 2 |
+------+-----------------+
1 row in set (0.00 sec)

簡単でした。

4.さいごに
慣れたら3分で構築できそうです。

次のエントリではPHPからMySQLを操作してみます。

2011年9月5日月曜日

DotCloud + PHPで「Hello World」をUbuntu 11.04で試してみた

本当に簡単にできました
「Ubuntu?あれだよ、Linuxだよね!」
レベルの僕でも簡単にできました。

このエントリーの目次
1. DotCloudとは
2. まずはDotCloudにサインアップ
3. DotCloudの開発環境を整える
4. DotCloudでHello Worldを作成してみる
5. Hello Worldサービスを公開、Webで確認してみる
6. もし403 Forbiddenと表示されたら。。
7. まとめ

1. DotCloudとは
Paasです。
2サービスまでは無料のようです。
詳しくは以下のエントリーなどから(手抜き)

1. プログラミング言語やデータベースが選べる新世代PaaS「DotCloud」が正式サービス開始 | Publickey
2. PythonでWebアプリつくるのにDotCloudに登録しない手はない | YAMAGUCHI::weblog
3. DotCloudは開発者のための優良なプラットフォーム | ゆーすけべー日記

2. まずはDotCloudにサインアップ
という訳で、まずはDotCloudにアクセスし、サインアップします。

3. DotCloudの開発環境を整える
DotCloudのチュートリアルに従って。

ターミナルにて。
dotcloud環境をインストールするにはeasy_installが必要なので、まずそれをインストールします。
$ sudo apt-get install python-setuptools

続いてチュートリアルに従ってdotcloudをインストールします。
$ sudo easy_install pip && sudo pip install dotcloud

インストール完了したら、まずdotcloudコマンドを実行してAPI Keyを入力します。
$ dotcloud

Enter your api key (You can find it at http://www.dotcloud.com/account/settings):
API KeyはDotCloudのsettingsページから確認できます。

これで環境が構築できました。

4. DotCloudでHello Worldを作成してみる
まずは、これから作るHello Worldサービスに対してdotcloudにおける名前空間を設定します。
$ dotcloud create helloworld

こんなふうに表示されれば成功。
Created application "helloworld"

次にHelloWorld用のディレクトリを適当に作成します。
僕は例えば以下のように作成しました。
~/work/dotcloud/helloworld/

(設定した名前空間と同じ「helloworld」でディレクトリ作ってますが、本来は一致させる必要はありません)

以降はこのhelloworldディレクトリで作業をし、ここにプログラムなどを配置していきます。
今回作るHello Worldサービスは、最終的には以下のようなファイル構成になります。
$ tree ~/work/dotcloud/helloworld/
~/work/dotcloud/helloworld/
├── dotcloud.yml
└── index.php

それでは、簡単なindex.phpを作成します。
<?php

echo 'hello world! ';

次にdotcloud.ymlです。
これはHello Worldサービスンについての設定ファイルで、このファイル名にしないといけないようです。
以下の記述をします(インデントを表すために全角スペースにしてますが、半角スペースにしてください)。
www:

type: php

これでHello Worldサービスの作成が完了しました。
次はいよいよリリースです。

5. Hello Worldサービスを公開、Webで確認してみる
リリースもコマンド一発で簡単にできます。

まずは、念の為カレントディレクトリを確認。
~/work/dotcloud/helloworld/

ではリリースです。
コマンドは以下。
$ dotcloud push helloworld .

僕の場合、リリース完了まで10秒くらいかかりました。

ターミナルの表示を見てると、sshで接続してrsyncしてbuildして〜みたいなコトが行われています。

最終的には以下の表示がされれば完了です!
「このサービスは以下のURLで見れるよー」って書かれてますね。
The build finished successfully
2011-09-04 16:01:55 [api] Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://helloworld-<username>.dotcloud.com/

<username>の前の「helloworld」は、設定した名前空間と一致します。

という訳で、実際にHello Worldのページを確認してみてください。
ちなみに、以下のコマンドを打つとURLが確認できます。
$ dotcloud url helloworld

「index.php」だとドメインだけでアクセスできるのかな??
ちなみに、index.phpと同時にhoge.phpを作成したとき、hoge.phpへのアクセスは
「http://helloworld-<username>.dotcloud.com/hoge.php」
でできます。

6. もし403 Forbiddenと表示されたら。。
ファイル構成などが間違っている可能性があります。
僕も一回403になりました。

繰り返しになりますが、今回の例では以下のファイル構成にして
$ tree ~/work/dotcloud/helloworld/
~/work/dotcloud/helloworld/
├── dotcloud.yml
└── index.php

以下のディレクトリにて
~/work/dotcloud/helloworld/
以下のコマンドでリリースしています。
$ dotcloud push helloworld

7. まとめ
という訳で、簡単にですがまずはとにかくHello Worldを試してみました。
環境構築がかなり苦手な僕ですが、それでも非常に簡単にできました。
すごい!

DotCloudを試した理由はNode.jsが動くからです。
これで何か作ってみたいなーと。
個人的に勉強中のErlangもalphaになっているけど、一応使えるのかな。。?

ちなみに、DotCloudのPHPは、Apacheではなくnginxで動いているようです(nginxのWikipedia)。
何それおいしいの。。。

以上です。
繰り返しになりますが、本当に簡単なのでサクッと試してみてはいかがでしょうか。

Related Posts Plugin for WordPress, Blogger...