Azure x Laravel

いろいろ縁がありましてLaravel勉強会でLTしてきました。

ネタ的にはAzure App Service Web Appsの概要と、Azure上でPHP/Laravelを動かすところまでをざっくりまとめてます。
Gitデプロイした後のデプロイスクリプトでちょっとはまったけど問題なく動いてヨカッタヨカッタ。もともとPHP動くしデプロイだけ気を付けたら(仮想アプリケーションのサイトルートをsite\wwwroot\publicにすれば)普通に動きますです。(FTPデプロイだと何も問題ない)

LaravelはComposer使うのですが、Corey Fowler氏が作ったSite Extensionのおかげで超楽ちんでした。ありがたや。

それからはまったポイントですがWeb Appsのプランにもよると思いますがGitデプロイ後、デプロイスクリプト走るんですけどオプティマイズ辺りの処理でタイムアウトしちゃいます。ディスク遅いからなぁ。。こちらに回避方法あるので参考に。

具体的にはcomposer.jsonのpost-install-cmdをからっぽにしてCompiledCommonClasses.phpを追加することぐらいですかね。

当日の資料もこちらに置いておきますので参考まで。

Windows Azure + PHP

Windows Azure上でPHPを動作させる場合、以前ならphp-cgi.exeも一緒にアプリケーションに含めたりしてたと思います。

でもWindows Azure SDK 1.3以降ではスタートアップタスクも利用できるし、Full IIS機能が使えるのでPHPも含めてIIS+FastCGI+PHPな環境にしたいですよね。

ということでおなじみのWebPICmdLineを利用してPHPをインストールするスタートアップタスクです。

@echo off
sc config wuauserv start= demand
md "%~dp0appdata"
reg add  "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d "%~dp0appdata" /f
webpicmdline /Products: PHP53 /AcceptEula
webpicmdline /Products: wincache53 /AcceptEula
reg add "hku\.default\software\microsoft\windows\currentversion\explorer\user shell folders" /v "Local AppData" /t REG_EXPAND_SZ /d %%USERPROFILE%%\AppData\Local /f
net start w3svc

ついでにPHPのアクセラレータとしても利用できるWincacheも入れてます。
※WincacheをインストールするとどうもIISが止まるようなのでサービス開始のコマンドも入れてます。

後は以下のようにサービス定義ファイル(.csdef)でタスクを呼び出すようにします。
<Startup>
    <Task commandLine="InstallPHP.cmd"  executionContext="elevated" taskType="simple" />
</Startup>

これでアプリケーションの開発者は純粋にPHP部分だけに注力できますね。

ロールのエントリポイントも別途起こせるのと、CSPackを利用すれば大分Windows Azure固有の部分を減らせる=PHP開発者がすぐにWindows Azure アプリケーションを開発できるんじゃないかなーと思います。

参考: How to Configure IIS Components in Windows Azure (MSDN)

追記。Windows Azure Command-line Tools for PHPなるものがあるので、こんな苦労しなくてもいいかも知れませんね。\(^o^)/