WordPress 2.9.2 on Windows Azure インストール
ここのところ、WordPress をAzure上で動かすためのチェックをいろいろとしていたのですが、ひとまず、そのまとめです。
主な手順は次のような流れです。
1)必要ファイルのダウンロードおよび開発環境構築
2)VisualStudioにてクラウドプロジェクト(CGIWebRole)を作成し構成する
3)Azure側の準備
4)Windows Azure 上に展開しWordPressをセットアップ
比較的簡単です。
1)必要ファイルのダウンロードや開発環境構築
まず、Windows Azure およびPHPを使うアプリケーションの開発環境を整えます。なお、Azure自体のアカウントは既に取得しているものとします。取得されてない方は、こちらを参考に取得してみてください。
環境構築において、一番手っ取り早いのはWeb Platform Installer (WPI)を利用することです。私の場合、あらかじめWPIにて、日本語版のWordPressが動作するようにセットアップしておいたので(ただし、DBはMySQLです)、PHPなどもインストールされていました。以前も紹介しましたが、基本的には、
http://wordpress.visitmix.com/development/installing-wordpress-on-sql-server
で紹介されている「Install the Prerequisites」と同じ環境を作ります。
そして、同じく、上記リンク先の「Download the WordPress on SQL Server Distribution」からダウンロードできるWordpressおよびPatchをダウンロードし、Patchを適用します。
Patchは、メインファイル(Wordpressフォルダ)に上書きするだけです。
以上で前準備は完了です。
2)VisualStudioにてクラウドプロジェクト(CGIWebRole)を作成し構成する
次に、VisualStudioにて、クラウドプロジェクトを作り、構成します。「新しいプロジェクト」で「Windows Azure Cloud Service」を選びます。名前はWordpressとしました(なんでもOKです)。次の「New Cloud Service Project」の中から、「CGI Web Role」を選択します。私は、WebCGIRole(1を取っただけ)という名前に変更しました(何でもOKです)。
次に、必要な外部ファイルをプロジェクトに追加し構成します。追加するものはPHPとWordpressのファイルです。
PHPの追加と構成
まず、PHPをプロジェクトに追加します。PHPはローカルドライブにあるものを利用すればよいでしょう。私の場合、Program files以下のPHPフォルダをコピーし、VSのソリューションエクスプローラ上の「WeCgiRole」を選択した状態でペーストし、ファイルを追加しました。
次に、ペーストされたPHPフォルダ内のphp.iniを設定します。まず、php.iniのビルドアクションを変更します。php.iniを選択した状態でVSのプロパティを開き、「ビルドアクション」をコンテンツに変更します。さらに、その後、php.iniを開き、extension_dir = "./ext"とします(WPIでインストールした場合、ローカル絶対パスが記述されている)。
Wordpress本体の追加
PHPを追加したのと同様に、さきほど用意したWordpressの本体ファイルをプロジェクトにコピーします。Wordpressフォルダを開いた状態ですべてのファイルとフォルダを選択しコピーします。そして、VSのソリューションエクスプローラー上でWebCgiRoleを選択した状態でペーストします。プロジェクトにWordpressファイルが追加されます。
ソリューションエクスプローラの構成(全部入りきってないですけど)
続いて、
Webサイト全体を構成します。Web.configとWeb.roleconfigの2つのファイルを編集します。
まず、Web.configを、
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<handlers>
<add name="FastGGI Handler"
verb="*"
path="*.php"
scriptProcessor="%RoleRoot%\approot\php\php-cgi.exe"
modules="FastCgiModule"
resourceType="Unspecified" />
</handlers>
<defaultDocument>
<files>
<clear/>
<add value="index.php"/>
</files>
</defaultDocument>
<httpErrors errorMode="Detailed"/>
</system.webServer>
</configuration>
このように構成します(赤字の部分を省略、変更しないでください)。次に、Web.roleconfigを
<?xml version="1.0"?>
<configuration>
<system.webServer>
<fastCgi>
<application fullPath="%RoleRoot%\approot\php\php-cgi.exe" />
</fastCgi>
</system.webServer>
</configuration>
このように構成します。
%RoleRoot%はAzure上でのルートディレクトリになります。approotは、実際に実行ファイルが展開されるディレクトリとしてAzure上に作成されます。Azure上に展開されるファイル構造は、ローカルにおいて、VSのプロジェクトフォルダ以下のwordpress.csx(wordpressという名前でプロジェクトを作った場合)フォルダ以下に展開されているので、確認してみるといいです。PHPも含めコピーされているのがわかります。
これで、ひとまず、ファイルの準備および構成が終わりました。ここで、一度F5を押してみてください。ローカルにインストールされたDevelopment Fablicが起動し、展開が始まります。うまく構成されていれば、Wordpressの初期画面である「Create a Configuration File」画面が表示されます。
Wordpressの初期設定画面
3)Azure側の準備
Azure側では、Wordpress用のHosted ServicesとSQL Azureのデータベースを作成しておきます。私の場合はWordpressという名前のHosted Serviceとデータベースを作成しました。
4)Windows Azure 上に展開しWordPressをセットアップ
準備ができたら、Azure上へファイルを発行します。ソリューションエクスプローラでWordpressプロジェクト(地球のアイコン)を右クリックし、発行を選択します。「Publish Cloud Service」ダイアログが開くので、自動か手動で、Azure上に発行します。私の環境では、発行が完了するまで、約15分ほどかかりました(パッケージサイズは15MB強というところでした)。
発行がうまくいけば、先ほどローカルで確認したと同様、Wordpressの初期画面が表示されます。あとは、基本、一般的なWordpressと同じ流れでセットアップします。強いて、Azure独自のフローを上げるなら、データベースの接続設定の画面のユーザー名で、単なるSQL Azureのユーザー名ではなく、username@servername という形式でサーバ名を付与することと、4つのユニークキーの入力フェーズが無いという点が、普通のWordpressのセットアップと異なる点です。
その他
今回は、手順をシンプルにするため、日本語化などのステップは割愛しましたが、メニューなどを日本語化する場合は、ローカルファイルにあらかじめ添付しておくのがよいでしょう。テーマやプラグインについても同じです(特に日本後化しなくても、タイトルや投稿文、コメントなどは日本語対応しています)。Azureは一部のファイルをちょこっと入れ替えるというのが苦手なため、あらかじめ添付しておいたほうが楽です。
また、テストは、Stagingサーバではなく、Productionでやるほうがいいかもしれません。というのは、Wordpressは、セットアップされたドメインやサーバ名を含んだ状態で環境を構築してしまうので、内部的なリンクが開発環境のランダムなサーバ名で構成されてしまいます(これは、管理画面からあとから構成可能ですが)。実際にオリジナルドメイン(CNAME)で運用する場合などは、ここをうまく調整する必要があります。
あと、現時点での問題として、Web.configの、エラー設定部分(赤字部分)である
<httpErrors errorMode="Detailed"/>
を削除したり、他の記述に変更すると、Internarl Server Errorが発生してしまいます。原因は不明です。これについては、後日改めて解決したいと思っております(ただ、エラーはあまり起こらないので致命的なセキュリティーホールにはならないと思いますが・・・)。
簡単ではありますが、WordpressをAzureに展開する流れを紹介させていただきました。
ただ単に、Wordpressをブログとして使うのであれば、Azureに展開する意味はあまりないかもしれませんが、アクセスの集中が予想される芸能人ブログや、WordpressをCMSとして利用する中規模以上のWebサイトであれば、Azure自体のスケールアウト機能に加え、Mediaの保存先として、Azure Strageを利用できるプラグインやCDNの存在は、Wordpress on Azureを選択する理由になりかもしれません。
スクリーンショットです。