Windows Azure WebサイトでFuelPHPアプリを動かす


  1. WEBサイトを作成します。

新規Webサイトの作成

  1. Webサイトの作成-ウィザード1 – 名前とリージョンとデータベースにMySQLを選択

FuelPHP-Azure-2

  1. Webサイトの作成-ウィザード2 – データベースの確認

FuelPHP-Azure-3

  1. Webサイトの作成-ウィザード3 – リポジトリの選択

FuelPHP-Azure-4

  1. Bitbucketとの接続を許可します

FuelPHP-Azure-5

  1. リポジトリを選択します
    今回はbitbucketのリポジトリを利用しました。

FuelPHP-Azure-6

チェックボタンをクリックするとWebサイトの作成が始まります。

  1. 新しいWebサイトが追加されました

FuelPHP-Azure-7

  1. デプロイを確認
    fuelblogを選択し[デプロイ]タブを開くと、gitからcloneされたことを確認できます。

FuelPHP-Azure-8

デプロイはされていますが、まだデータベースの設定やmigrationはされていないので動きません。

  1. データベースの設定
    データベースのホスト名、データベース名、接続ユーザの情報は[構成]タブの[接続文字列]で確認できます。

FuelPHP-Azure-9
接続情報を db.php に指定します。

<?php
// fuel/app/config/production/db.php
/**
 * The production database settings. These get merged with the global settings.
 */
return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=ja-cdbr-azure-east-a.cloudapp.net;dbname=fuelphpAC9JPSbeW',
            'username'   => 'b075b5148a0559',
            'password'   => 'f4f0edcd',
        ),
    ),
);

編集した db.php はコミットしておきます。

  1. production環境に設定する
    [構成]タブの[アプリケーション設定]に FUEL_ENV を追加します。

FuelPHP-Azure-10

  1. デプロイスクリプトの準備
    デプロイ時に、Composer updateとマイグレーションを実行するように設定します。

deploymentscriptの作成するために、Winsows Azure SDKを http://www.windowsazure.com/ja-jp/downloads/ からPHP / Mac のインストール を選択してダウンロードし、インストールします。
以下のコマンドでスクリプトを生成します。

$ azure site deploymentscript --php
info:    Executing command site deploymentscript
info:    Generating deployment script for Web Site
info:    Generated deployment script files
info:    site deploymentscript command OK

以下の2つのファイルができます

  • .deployment
  • deploy.sh

deploy.shの最後にComporserとマイグレーションの処理を記述します。

...
echo Running Composer.
cd $DEPLOYMENT_TARGET
"D:\Program Files (x86)\PHP\v5.4\php.exe" composer.phar update --prefer-dist -v

echo Running FuelPHP migration.
"D:\Program Files (x86)\PHP\v5.4\php.exe" oil refine migrate
cd $DEPLOYMENT_SOURCE

echo "Finished successfully."

oilの実行は、FUEL_ENV=productionを指定しなくても、[アプリケーション設定]が適用されます。

git add してpushします。

$ git add .deployment deploy.sh
$ git commit -m "deployment script"
$ git push origin master

新たにデプロイが実行されます。

FuelPHP-Azure-11

[Running deployment command…]のログを表示してみるとComposer updateとマイグレーションが正しく実行されたことが確認できます。

Command: bash deploy.sh

Handling Basic Web Site deployment.

KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot'

Copying file: 'fuel\app\config\development\db.php'

Running Composer.

Loading composer repositories with package information

Updating dependencies (including require-dev)

  - Installing psr/log (dev-master a78d650)

    Downloading: connection...    Downloading: 0%               Downloading: 15%    Downloading: 30%    Downloading: 45%    Downloading: 60%    Downloading: 75%    Downloading: 100%

    Extracting archive

  - Installing monolog/monolog (1.5.0)

    Downloading: connection...    Downloading: 100%         

    Extracting archive

  - Installing fuelphp/upload (2.0.1)

    Downloading: connection...    Downloading: 100%         

    Extracting archive

monolog/monolog suggests installing mlehner/gelf-php (Allow sending log messages to a GrayLog2 server)

monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server)

monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server)

monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required))

monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server)

Writing lock file

Generating autoload files

Running FuelPHP migration.

Performed migrations for app:default:

001_create_posts

Finished successfully.
  1. 動作確認
    動いた。

FuelPHP-Azure-12

  1. publicフォルダをルートディレクトリに設定する
    上記の動作確認は、http://fuelblog.azurewebsites.net/public/posts にアクセスしていたので、publicディレクトリをルートディレクトリとして指定し直します。
    プロジェクト直下に、以下のWeb.configを作成して、pushするとpublicなしでアクセスできるようになります。
<?xml version="1.0" encoding="utf-8"?>
<!-- Web.config -->
<!--
  For more information on how to configure your ASP.NET application, please visit
  [url=http://go.microsoft.com/fwlink/?LinkId=169433]http://go.microsoft.com/fwlink/?LinkId=169433[/url]
  -->
<configuration>
  <system.diagnostics>
   <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <appSettings>
    <add key="EMULATED" value="true" />
  </appSettings>
  <system.webServer>
      <httpErrors errorMode="Detailed"/>
      <defaultDocument>
      <files>
        <clear />
        <add value="index.php" />
        <add value="index.htm" />
        <add value="index.html" />
      </files>
    </defaultDocument>
      <rewrite>
          <rules>
            <rule name="Redir Subdir" stopProcessing="false">
                <match url="(.*)" ignoreCase="false" />
                <conditions>
                    <add input="{URL}" pattern="^/public" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="/public/{R:1}" appendQueryString="true" />
            </rule>
            <rule name="RegleFichierPublic" stopProcessing="true">
                <match url="^\/public\/(.*)$" ignoreCase="false" />
                <conditions>
                    <add input="{URL}" pattern="^/public" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="/public/index.php/{R:1}" appendQueryString="true" />
            </rule>
          </rules>
      </rewrite>
  </system.webServer>
</configuration>

補足

SDKのアンインストール手順メモ。

This package will install the Windows Azure SDK into /usr/local/bin/azure/

To use the command line interface after installation, type `azure` in the Terminal.

To uninstall, type `azure-uninstall` in the Terminal.

.gitmodulesは、Windowsのパス区切り文字に置き換えなくても動く。

submodule updateが失敗する(かなり頻発)が、そのときは何回か再試行または同期しなおすと正常実行される。
FuelPHP関連のsubmoduleは、FuelPHP自体をアップデートするとき以外はsubmoduleを外しておいた方が良さそう。
git submoduleの解除方法

参考

PHP and MySQL on Windows Azure: Getting Started and Deploying with Git – site point
Azure Web site で FuelPHP を動かして migration までやってみた
無料で使えるWindows Azure Webサイトの新モードを試す
[IIS][Azure]Configure FuelPHP – FuelPHP Forums
Getting started on Windows Azure with PHP on Mac OS. (youtube)

, ,