phpfog がヤバい件
最近PaaS流行ってますね、dotcloudとか。
正直dotcloudはかなりイケてるんですが、ややこしいのがいけません!!*1
普段PHPとかいうゆるふわコードをかいてると、ウェブとDBが別のインスタンスとか、よくわかんない!PSGIとかよくわかんない!(嘘です)
ということで、ゆるふわphperでも使えるPaaSがphpfogなのです。
phpfogについて
https://www.phpfog.com/
詳しくはググれなんですが、まじで情報無い。
ざっくりしたことを言うと、phpが動くPaaSであり、つまりGoogle App Engineみたいなものです。
さらにざっくり言えば、まあレンタルスペースの一種です。
レンサバなら別に今もつかってるし…という愛されphperさん、貴方の考えは概ね間違ってないんですが…*2
ほら、クラウドとか色々回りが言ってるじゃないですか、今までにありませんでしたか?
周囲のPythonerやRubyestが「俺はGAEですわ」「あたしRailsラブだからheroku!」と言っているのを。
「え、なにそれ?」と聞いて「phperには関係ないし(にやにや」といわれたことはありませんか?
そこで「ボクはphpfogだよ!」って言いたいですよね、言いたいってことにしておこうね。
phpfogをやってみよう!
phpfog登録
https://www.phpfog.com/
にアクセスしてください。
こういうなんかスタイリッシュなページの途中に
こんなレジストフォームがありますよ!
ここにメールアドレスと、パスワードを入れてください。
なにも怖い事はありませんが、ここでメールアドレスを間違えると結構アレなので、ちゃんといれましょう。
さあRegist!
すると当然確認画面に…
…なりませんでした、あれ?
|l、{ j} /,,ィ//| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
i|:!ヾ、_ノ/ u {:}//ヘ | あ…ありのまま 今 起こった事を話すぜ!
|リ u' } ,ノ _,!V,ハ | < 『おれはphpfogにアカウント登録しようとしていたら
fト、_{ル{,ィ'eラ , タ人. | 確認すらなく、いつのまにかログインまで完了していた』
ヾ|宀| {´,)⌒`/ |<ヽトiゝ | 規約読まないとか捨てアド使うとか
ヽ iLレ u' | | ヾlトハ〉. | そんなチャチなもんじゃあ 断じてねえ
ハ !ニ⊇ '/:} V:::::ヽ. │ もっと恐ろしいものの片鱗を味わったぜ…
/:::丶'T'' /u' __ /:::::::/`ヽ \____________________
ビビりますね。難しい事なんて一切考えたくないphperのことをよくわかってます。
出オチもいい所。どう見ても登録完了です、有り難うございました。
Appを作る!
難しい事考えないで、ボタンを押していきます。
この中から好きなものを選びます、Wordpressとかありますね。想像通りの結果になりますけど、まあ取り合えずここはCustom Appにしておきましょうか。
これが「なにもない」状態を作るものです。
プランはなにも考えずにFreeを選びましょうね。
ここにツッコミ所が一個あるんですけど、まあなにも考えないで、FreeをChooseしてください。
サクサクいきましょうね。
nameは管理画面で表示されるアプリの名前で、パスワードは適当に。
ドメインは「???.phpfogapp.com」ならタダでつかえますので、適当なものをいれて、or use a phpfogapp.com domain name をクリックすればいいですね。(今回は、hogehoge.phpfogapp.comと仮定します)
当然なんですけど、このドメインは被ってると使えません。いくらtestが作りたくても作れない場合は、なにか別なものを入れましょう。
そしてCreate Appを押せば、Tadaaa!アプリ作成完了ですね!
コードをUP!の前に…
さて、アプリを作ったらサイトチェック…の前にファイルをアップロードしたいですね、当然です。
実はここが難関です。難関過ぎてここで脱落しちゃうphperもいると思う…!
phpfogにファイルをアップロードするには、ffftpやfilezillaとかじゃなくて、gitをつかいます。
gitってなんやねんと思うでしょうが、phpfogにファイルがアップできるだけでなく、「俺gitつかってるよ?」って言えて一歩先行くphperになれる、つまりモテるので、とりあえずgitをつかうしかありません。PaaSと一緒にgitも体験しておけば、履歴書に書けます。
所で、残念ですが私はマカーなのでWindowsの人の説明を書く事が出来ません!
嘘です、書く事はできるんですけど、めんどい。もしこの記事にブクマがつくような事でもあれば書きます。
以下Macでの話。えーーー…とても面倒くさいですが、頑張ろうね。
まずgitはコマンドラインで操作する必要が有ります。凄く面倒くさいですね。
terminalを一度もつかったことが無い人は、断念するしかないかも…GUIのgitクライアントもあるっぽいけど…残念ですがお帰り頂いた方が良いかもしれません…でも頑張ろう!
さて言い訳は以上、長いのでさっさといきますよ!
・gitをインストール
入ってるなら飛ばしましょう、MacPortsでもいいですけど、
http://code.google.com/p/git-osx-installer/
ここからgit-osx-installerをとってきて入れるのが速いですね。
インストールがおわったら、gitの初期設定もしましょうね、Terminalから
$ git config --global user.name 'my name'
$ git config --global user.email you@example.com
などと適切に設定してください。
>sshの共有キーをつくる
すでにキーを持っている人はこのフェーズを飛ばせます。
~/.ssh/id_rsa
がある場合には飛ばせますね。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/432makesshkey.html
ここらへんや
http://docs.phpfog.com/index.php/features/article/generating_a_ssh_key
ここを参考にしてください。
要約すると、 terminalを起動して、
$ mkdir ~/.ssh(Enter)(すでにディレクトリがある場合もあります)
$ ssh-keygen -t rsa(Enter)
Enter file in which to save the key (/Users/PHPFog/.ssh/id_rsa):(Enter)
Enter passphrase (empty for no passphrase):(適当にパスワードを入力
Enter same passphrase again:(上と同じパスワードを入力
という流れになります。
>sshの公開鍵をphpfogに登録する
$ cat ~/.ssh/identity.pub
と実行して出てきた文字列
ssh-rsa XXXX(略)
をコピーして
https://www.phpfog.com/account#/ssh_keys
こちらの画面のPublic Key欄にペーストします。
nameには適当に自分のあだ名でもいれておきましょう。
長かった、さあgitを使う用意ができました!
おもむろに適当な場所にディレクトリを作り、そこにcdしてgit pullします。
phpfogの
https://www.phpfog.com/apps/{アプリのID}#/source_code
に移動しまして、Clone your git repository:の所にある
git clone git@git01.phpfog.com:ほげほげ.phpfogapp.com
こんな行ををコピペして実行ですね。
(もしこれがでていなければ、ページを何度かリロードしてみて下さい)
具体的に言えば、Terminalから
cd
mkdir phpfogtest
cd phpfogtest
git clone git@git01.phpfog.com:hogehoge.phpfogapp.com
こんな感じですね。
するとごちゃごちゃと出力がされて、そのディレクトリの中に
hogehoge.phpfogapp.com
みたいなディレクトリができると思います。
さあやっとコード書く用意ができましたよ!
※まだTerminalはひらいたままでいてくださいね。
改めてコードを書いてUP!
先ほど出来たhogehoge.phpfogapp.comディレクトリの中に、index.phpを作ります。
open ~/phpfogtest/hogehoge.phpfogapp.com
とかやればそこがFinderで開くので
とかかいて保存しましょう。
ではアップロードです、アップロードはgitをつかいますが、とりあえずなにも考えず、こういうふうにタイプしてください
git add .
git commit . -m "my first commit"
git push
するとごにゃごにゃごにゃとなにか出力されて、完了します。
エラーっぽい出力がなければ、アップロード完了です!
http://hogehoge.phpfogapp.com
にアクセスしてみましょう!
phperならもう100回は見ているphpinfo画面が表示されるはずです、お疲れ様でした!
当然作製していくとファイルを更新したり追加したりします。
上の三行はファイルを追加したのでadd&commit&pushしていますが、更新だけならcommit&push、ファイルが増えたりしたら add&commit&pushです。まあ、必ず三行やっても大丈夫ですけど。
他にも色々操作はあるのですが、gitでググりましょう。そもそも私も普段gitつかわないのでかなりうろおぼえです。
後、gitの操作はそのディレクトリの中でやりましょう。
DBについて
そうそう、DBアクセスしないphpとかありえないですよね。
DBをつかうのは超簡単です。最初っからMysqlがついてきますからね!別にインスタンス作らないと行けないサービスとは手軽さがちがいます。
https://www.phpfog.com/apps/{アプリのID}#/logs_and_database
この画面を開きまして、Change Database Passwordから適当にDBパスワードを変更しましょう。
そして、おもむろにAccess the Database through phpMyAdminリンクを踏みますと、phperの友、phpMyAdminからDBが操作できるわけですね!
もうここは説明不要ですよね?
すでにhogehoge-phpfogapp-comみたいなDBができていると思うので、そこにTableをざくざくと作っていけばOkですね。
PHPからアクセスする為のMysqlのホスト名とかは
https://www.phpfog.com/apps/{アプリのID}#/logs_and_database
この画面に書いてありますので、コピペしましょう。
以上!どうですか!
かんたんでしょ?
phpfogヤバイ(手軽的な意味で)
phpfogの気にくわない所
残念ですけど、phpfogにも気にくわない所はけっこーあります。
いくつかあげておきますね
・サーバーのエラーログが見れない
一番これがありえないんですけど、まあその内実装されるっぽいのでまちましょう。
http://help.phpfog.com/discussions/problems/825-seeing-php-errors-how
http://help.phpfog.com/discussions/problems/551-logging
Display_errorsとかありえない…
そもそも500が帰ってきたとき(コンパイルエラーとか)、画面に何も出ないので、辛い。
・phpが刺さって落ちてる事がある
これは多分phpをfcgiとして動かしているからなんだとおもいますが、phpが落ちる事が有ります。
管理画面だと
https://www.phpfog.com/apps/{アプリのID}
ここの画面で、
Status: Checking
となっている時がそうです。(こうなってても動いてる事もあります。ページが開けない&ここがCheckingの時がおそらく刺さってる)
ほっとくと直るよ、みたいな事かいてあるんですが、案外直りません。
phpを再起動してやる必要があり、それにはどうやらgit pushしてやるのが一番速いみたいです。
・Freeといいつつ、6ヶ月でおわってしまう
プラン選択の所で書きましたが、phpfogは6ヶ月以上つかうなら、有料にしてね、という事みたいです。
まあ私はお金をはらうのはやぶさかではないのですが(今のクオリティではどうかと思うが)、とにかくフリー!という人は微妙ですね。
しかしまあ、色々あるけどこの手軽さはすごい
herokuもそうですけど、phpfogはさらに手軽。手軽こそ正義のphpを体現したPaaSといえます。
クラウドとかよくわかんない、という人も是非一度つかってみて、手軽さを体感しましょう。
さらに、お金をはらえば、クラウドの神髄たるスケーリング(サーバー性能アップや、DBの容量アップ)を体験できますし、
そもそも体験できちゃまずいですがバックアップやハード故障のことをかんがえなくてすむ(といっても…ですが)クラウドの手軽さもよくわかるんじゃないかなと。
正直、本当に正直な所をいえば、dotcloudの方がいいんですけど、この手軽さは他のPaaSも見習うべきですよね!ってことで以上です!
オマケ:Facebook連携したなにか!
dotcloudやGAEでFacebook連携したレポートを知ってる人が書いているので、便乗します…と言いたいんですけど、時間がない。
一応こんな感じでちゃんと動きますよ!
http://hpm.phpfogapp.com/
(データは保存してません)
Facebook PHP SDK のfacebook.php fb_ca_chain_bundle.crtの二つと、以下を適当に保存して、適当にfacebook アプリ登録からキー生成して突っ込めばうごきましたね。
このあたりのフローは http://d.hatena.ne.jp/ramyana/20101012/1286897340 こちらなどが参考になるかと。
<?php error_reporting(E_ALL); ini_set('display_errors', '1'); require_once('./facebook.php'); $facebook = new Facebook(array( 'appId' => '「APP IDを入れる」', 'secret' => '「アプリの秘訣訳はどうか…」', 'cookie' => true, )); $session = $facebook->getSession(); $me = null; // Session based API call. if ($session) { try { $uid = $facebook->getUser(); $me = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); } } //create login or logout url $permissions = array('req_perms'=>'user_about_me,read_friendlists'); // login or logout url will be needed depending on current user state. if ($me) { $logoutUrl = $facebook->getLogoutUrl(); } else { $loginUrl = $facebook->getLoginUrl($permissions); } ?> <html> <head> <title>fb test</title> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> </head> <body> <div> <?php if($me){ ?> <a href="<?php echo $logoutUrl; ?>"> <img src="http://static.ak.fbcdn.net/rsrc.php/z2Y31/hash/cxrz4k7j.gif"> </a> <?php }else{ ?> <a href="<?php echo $loginUrl; ?>"> <img src="http://static.ak.fbcdn.net/rsrc.php/zB6N8/hash/4li2k73z.gif"> </a> <?php } ?> </div> <?php if ($me){ ?> <h3>あなた</h3> <img src="https://graph.facebook.com/<?php echo $uid; ?>/picture"> <?php echo $me['name']; ?> <h3>あなたの情報</h3> <div style="overflow:scroll; height:400px; width:1000px;"> <pre><?php print_r($me); ?></pre> </div> <h3>あなたの友達 10人</h3> <pre> <?php // read my friends if ($session) { try { $friends = $facebook->api('/me/friends'); } catch (FacebookApiException $e) { error_log($e); } } $limit = 10; foreach($friends['data'] as $friend){ $f = $facebook->api('/'.$friend['id']); $limit--; ?> <img src="https://graph.facebook.com/<?php echo $f['id']; ?>/picture"> <?php echo $f['name']; ?><br /> <?php if( $limit <= 0 ){ break; } } ?> </pre> <?php }else{ ?> <strong>未ログイン</strong> <?php } ?> </body> </html>