既存のPHP+MySQLのウェブアプリケーションをWindows Azure上で動かすにはいくつかの方法あります、今回は元々Xampp上で動作するウェブアプリケーションをWindows Azure MySQL PHP Solution Accelatorを使って動作検証しました。
今回利用するパッケージは下記通り
1. Windows Azure MySQL PHP Solution Accelator
2. MySQL 5.1.58 x64
3. PHP 5.2.17 nts VC6 x86
4. phpMyAdmin 3.4.3.2
手順は下記通り
■上記パッケージをインストール
MySQLインストールに関して
1. カスタマイズインストールを選んで、サーバーデータとプログラムを同じフォルダにインストール
2. インスタンスConfigurationは行わない
3. binフォルダにある.map及び.pdbを削除
■Solution AccelatorのBuild.batを実行
先ほどインストールしたMySQL、PHP及びphpMyAdminのフォルダを指定します
■PHPの修正
PhpMyAdminWebRole\php\php.ini-recommendedをphp.iniに名前変更して、下記修正を行う
extension_dir = "./ext"
extension=php_mbstring.dll
extension=php_mcrypt.dll
extension=php_mysql.dll
cgi.force_redirect = 0
今回検証したウェブアプリケーションにはさらに下記設定が必要
short_open_tag=On
extension=php_pdo.dll
extension=php_pdo_mysql.dll
■PhpMyAdminの修正
PhpMyAdminWebRole\phpmyadmin\libraries\config.defualt.phpに下記修正を行う
$cfg['AllowArbitraryServer'] = true;
■MySQLの設定
ServiceConfiguration.cscfgでMySQLのインスタンス数を設定します
<Role name="MySql_WorkerRole">
<Instances count="1" />
……
</Role>
■Configの修正
ServiceConfiguration.cscfgに下記修正を行う
1.ローカルエミュレータの場合
a.TableStorageEndpoint
http://127.0.0.1:10002
b.BlobStorageEndpoint
http://127.0.0.1:10000
c.DataConnectionString
UseDevelopmentStorage=true
d.DiagnosticsConnectionString
UseDevelopmentStorage=true
2.WIndows Azureにデプロイする場合
a.TableStorageEndpoint
http://Account Name.table.core.windows.net
b.BlobStorageEndpoint
http://Account Name.blob.core.windows.net
c.DataConnectionString
DefaultEndpointsProtocol=https;AccountName=Account Name;AccountKey=Account Shared Key
d.DiagnosticsConnectionString
DefaultEndpointsProtocol=https;AccountName=Account Name;AccountKey=Account Shared Key
e.AccountName
f.AccountSharedKey
■デプロイ&実行
1. ローカルエミュレータの場合
Runme.cmdを実行します。途中でMySQLにのファイアウォール警告が出た場合許可します。
2. Windows Azureの場合
Packme.cmdを実行して、パッケージファイルが作成されます。
このファイルをAzureにデプロイします。
■PhpMyAdminからMySQLへ接続
1. MySQLのIPアドレスおよびポートの確認
http://XXX.cloudapp.net/Admin.aspxに接続します
「Show MySql instances」をクリックして、MySQLのIPアドレスおよびポートを確認できます
2. PhpMyAdminからMySQLへ接続
http://XXX.cloudapp.net/PHPMyAdmin/index.phpに接続して、先ほど確認したIPアドレスおよびポート番号を入力してログインします。初期状態ではユーザー名は「mysqluser」、パスワードは「#ms123」になります。
ログイン後、phpMyAdminの画面が表示されます
■まとめ
とりあえずAzure上でPHP+MySQLが動作することを確認しました。ただし課題まだ残っています。
1.MySQLインスタンスのアドレスやポート番号は固定じゃないので、ウェブアプリケーションで設定を動的に変える方法を考える必要があります。Azure Companionでは改良されたようなので、今度試してみる
2. Windows Azureではロールが終了した場合、MySQLのデータも全部消えます。そのためMySQLはレプリケーション機能を利用して、Master/Slave構成で動作しています、さらにBlob Storageを使って、定期的に差分バックアップを取っています。今後障害発生時のリカバリについて検証する必要があります。
Azure Companionでどうなったのも気になる。
3. メンテナンスを考える場合、SQLAzureに移行したほうが楽かもしれません、移行のコストにもよりますが
4. 今回検証したウェブアプリケーションではAzure上で多くの機能が動作しませんでした。下記のエラーが発生します
HTTP エラー 400.0 - Bad Request
ASP.NET detected invalid characters in the URL.
どうも今回のウェブアプリケーションでは下記例のように、URLに「&」が使われており(URLエンコードはしておりますが)
URL例:http://xxxxxxx/delete/id/6&26?abc=1
Apacheでは問題ないですが、IISではそれがだめ。ここに書いてある解決方法を試してもだめでした。今度時間あったらもうちょっと調べる
以上
0 件のコメント:
コメントを投稿