こんにちわ、引き続きアライドアーキテクツ西田ですw
今回はherokuでphpを動かしてみようと思います。
herokuはFacebookアプリでもバンドルされていて、PaaSとして世界的に知られているクラウドサービスです。
インフラにはAWSを使われているようですが、その上にデプロイやアプリケーション管理のツールや拡張性があるアプリケーションの実行環境や、アドオンの仕組みなどが導入されていてアプリ開発者は開発に集中できる環境を提供してくれています。
アドオンはこういうものが用意されています。MongoDBやPostgreSQLもアドオンとして用意されていますね。
herokuはRubyの実行環境としてスタートしましたが現状は、Java、Python、Clojure、Scala、Node.jsなどもサポートされています。しかし、アライドがメインで使っているPHPが入っていないのですが実際には動くということなので動かしてみたいと思います。
まずはherokuのアカウントが必要なのでSignUpしてください。
アカウントを作成したらherokuを操作するのにherokuツールキットをダウンロードしてインストールしておいてください。herokuツールキットをインストールするとCLIで操作できるようになります。
①適当にディレクトリを作成して、テスト用のphpを作成します。
1 2 3 |
#mkdir heroku_test #cd heroku_test #echo '<?php phpinfo();' > index.php |
②ローカルのgitにコミットします。
1 2 3 |
#git init #git add . #git commit -m 'init' |
③次にheroku createコマンドを使ってアプリを作成しますが、PHP自体はmbstringが動くサードパーティのbuildpackを使います。このコマンドを打つとbuildpackのPHPがビルドされて、herokuにアプリが作成され
—–> Launching… done, v5
http://○○○.herokuapp.com deployed to Heroku
みたいに独自のサブドメインを割り当てられます、これがアプリのURLになりますが、独自URLを割り当てたい時は
有料プランが必要なようです。
実際に作成されたアプリの一覧が見たい時は、herokuのアプリ一覧のページで確認できます。
1 |
#heroku create --buildpack https://github.com/winglian/heroku-buildpack-php -s cedar |
④実際にheroku openコマンドで見てみる。これでブラウザが立ち上がります。phpinfoの中がでればOKです!
1 |
# heroku open |
これだけでは、あまりにも芸が無いのでherokuでMySQLを使う方法もご紹介します。herokuではMySQLを使うにはClearDBをアドオンとして使うのがよさそうなので、今回はClearDBを使います()
⑤まず、コマンドラインから自分のアプリにアドオンを追加します。今回はClearDBのフリーのigniteを使います
Addonsというメニューから追加できます。
1 |
$ heroku addons:add cleardb:ignite --app appname |
⑥追加したMySQLの情報の接続情報を取得するためにconfigから取得します。
1 2 3 4 |
$ heroku config --app appname | grep CLEARDB_DATABASE_URL すると CLEARDB_DATABASE_URL: mysql://{username}:{password}@{hostname}/{dbname}?reconnect=true な感じで情報が取得できます。 |
⑦次に⑥で取得した情報からMySQLに接続し、テーブルを作成しデータを投入します。
※ローカルにMySQLがインストールされていることが前提です。
1 2 3 |
$ mysql -h {hostname} {dbname} -u {username} -p{password} $ mysql> CREATE TABLE people ( id INT(11),name VARCHAR(64),date_created DATETIME ); $ mysql> insert into people (1,'nishida',now)(2,'iwamoto',now),(3,'nagano',now()); |
⑧これでMySQL側は準備できたので、PHPを下記のように書き換えてコミットしてpushします。
1 2 3 4 5 6 7 8 9 10 |
<?php $url=parse_url(getenv("CLEARDB_DATABASE_URL")); $server = $url["host"]; $username = $url["user"]; $password = $url["pass"]; $db = substr($url["path"],1); mysql_connect($server, $username, $password); mysql_select_db($db); $rs=mysql_query("select * from people" ); while($dat=mysql_fetch_assoc($rs)){echo "[id]:".$dat["id"]." [name]:".$dat["name"]."<br />";}; |
⑨簡単なプログラムですが、こんな感じになります。
データベースとしては、他にもXeround Cloud DatabaseやAWSのRDS(もちろん有料です。)を使用できたり、herokuはDynoというプロセスで管理しているのでアプリケーション毎にDyno1つ(例えば、Webプロセス1つ)であれば無料ですが他のプロセスなどで1つ以上使用する場合は課金が発生します。WebDyno(httpプロセス)とWorkerDyno(バックグラウンドプロセス、バッチ処理)などは料金が違うのでここの料金表で確認した方がいいですね
herokuはFacebookアプリの作成画面からも簡単に作成できるので、Facebookアプリを個人的に作成してみたい人にはいいかもしれませんね。
CTOってついてますが、最近はエンジニア外の仕事が もりもりしすぎて、それをどう取り除いていこうか考えています。 個性的なアライドのエンジニア集団のことなども、みなさんにお伝えしていきたいです。