チュートリアル: Azure で PHP と MySQL Web アプリを構築するTutorial: Build a PHP and MySQL web app in Azure

注意

この記事では、Windows 上の App Service にアプリをデプロイします。This article deploys an app to App Service on Windows. Linux 上の App Service に展開するには、「Azure App Service on Linux で PHP と MySQL Web アプリを構築する」をご覧ください。To deploy to App Service on Linux, see Build a PHP and MySQL web app in Azure App Service on Linux.

Azure Web Apps では、高度にスケーラブルな自己適用型の Web ホスティング サービスを提供しています。Azure Web Apps provides a highly scalable, self-patching web hosting service. このチュートリアルでは、Azure で PHP Web アプリを作成し、MySQL データベースに接続する方法について説明します。This tutorial shows how to create a PHP web app in Azure and connect it to a MySQL database. このチュートリアルを終了すると、Azure App Service Web Apps で実行される Laravel アプリが完成します。When you're finished, you'll have a Laravel app running on Azure App Service Web Apps.

Azure App Service で実行される PHP アプリ

このチュートリアルで学習する内容は次のとおりです。In this tutorial, you learn how to:

  • Azure で MySQL データベースを作成するCreate a MySQL database in Azure
  • PHP アプリを MySQL に接続するConnect a PHP app to MySQL
  • Azure にアプリケーションをデプロイするDeploy the app to Azure
  • データ モデルを更新し、アプリを再デプロイするUpdate the data model and redeploy the app
  • Azure から診断ログをストリーミングするStream diagnostic logs from Azure
  • Azure Portal でアプリを管理するManage the app in the Azure portal

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

このチュートリアルを完了するには、以下が必要です。To complete this tutorial:

ローカル MySQL を準備するPrepare local MySQL

この手順では、このチュートリアルで使用するデータベースをローカル MySQL サーバーに作成します。In this step, you create a database in your local MySQL server for your use in this tutorial.

ローカル MySQL サーバーに接続するConnect to local MySQL server

ターミナル ウィンドウで、ローカル MySQL サーバーに接続します。In a terminal window, connect to your local MySQL server. このチュートリアルでは、ターミナル ウィンドウを使ってすべてのコマンドを実行します。You can use this terminal window to run all the commands in this tutorial.

mysql -u root -p

パスワードの入力を求められたら、root アカウントのパスワードを入力します。If you're prompted for a password, enter the password for the root account. ルート アカウントのパスワードを思い出せない場合は、「MySQL: root のパスワードをリセットする方法」を参照してください。If you don't remember your root account password, see MySQL: How to Reset the Root Password.

コマンドが正常に実行されれば、MySQL サーバーは実行されています。If your command runs successfully, then your MySQL server is running. 正常に実行されない場合は、MySQL のインストール後の手順に従って、MySQL サーバーが起動されたことを確認してください。If not, make sure that your local MySQL server is started by following the MySQL post-installation steps.

ローカルにデータベースを作成するCreate a database locally

mysql プロンプトで、データベースを作成します。At the mysql prompt, create a database.

CREATE DATABASE sampledb;

quit」と入力して、サーバー接続を終了します。Exit your server connection by typing quit.

quit

ローカルに PHP アプリを作成するCreate a PHP app locally

この手順では、Laravel サンプル アプリケーションを取得し、データベース接続を構成してローカルで実行します。In this step, you get a Laravel sample application, configure its database connection, and run it locally.

サンプルを複製するClone the sample

ターミナル ウィンドウから、cd コマンドで作業ディレクトリに移動します。In the terminal window, cd to a working directory.

次のコマンドを実行して、サンプル レポジトリを複製します。Run the following command to clone the sample repository.

git clone https://github.com/Azure-Samples/laravel-tasks

cd コマンドで複製したディレクトリに移動します。cd to your cloned directory. 必要なパッケージをインストールします。Install the required packages.

cd laravel-tasks
composer install

MySQL 接続を構成するConfigure MySQL connection

リポジトリのルートに、.env という名前のテキスト ファイルを作成します。In the repository root, create a text file named .env. 次の変数を .env ファイルにコピーします。Copy the following variables into the .env file. <root_password > プレース ホルダーを、MySQL ルート ユーザーのパスワードに置き換えます。Replace the <root_password> placeholder with the MySQL root user's password.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=<root_password>

この .env ファイルを Laravel でどのように使用するかの詳細については、Laravel 環境の構成に関するページを参照してください。For information on how Laravel uses the .env file, see Laravel Environment Configuration.

ローカルでサンプルを実行するRun the sample locally

Laravel データベースの移行を実行して、アプリケーションで必要なテーブルを作成します。Run Laravel database migrations to create the tables the application needs. 移行で作成されるテーブルを確認するには、Git レポジトリの database/migrations ディレクトリを調べます。To see which tables are created in the migrations, look in the database/migrations directory in the Git repository.

php artisan migrate

新しい Laravel アプリケーション キーを生成します。Generate a new Laravel application key.

php artisan key:generate

アプリケーションを実行します。Run the application.

php artisan serve

ブラウザーで http://localhost:8000 にアクセスします。Navigate to http://localhost:8000 in a browser. ページで、いくつかのタスクを追加します。Add a few tasks in the page.

MySQL に正常に接続されている PHP

PHP サーバーを停止するには、ターミナルに「Ctrl + C」と入力します。To stop the PHP server, type Ctrl + C in the terminal.

Azure Cloud Shell を開くOpen Azure Cloud Shell

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。Azure Cloud Shell is a free, interactive shell that you can use to run the steps in this article. Cloud Shell には一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。Common Azure tools are preinstalled and configured in Cloud Shell for you to use with your account. [コピー] ボタンを選択してコードをコピーし、Cloud Shell に貼り付けて Enter キーを押すだけで、コードを実行することができます。Just select the Copy button to copy the code, paste it in Cloud Shell, and then press Enter to run it. Cloud Shell は、次のようにいくつかの方法で開くことができます。There are a few ways to open Cloud Shell:

コード ブロックの右上隅にある [使ってみる] を選択します。Select Try It in the upper-right corner of a code block. この記事の Cloud Shell
ブラウザーで Cloud Shell を開きます。Open Cloud Shell in your browser. https://shell.azure.com/bash
Azure Portal の右上隅にあるメニューの [Cloud Shell] ボタンを選択します。Select the Cloud Shell button on the menu in the upper-right corner of the Azure portal. ポータルの Cloud Shell

Azure に MySQL を作成するCreate MySQL in Azure

この手順では、MySQL データベースを Azure Database for MySQL に作成します。In this step, you create a MySQL database in Azure Database for MySQL. その後、このデータベースに接続するように PHP アプリケーションを構成します。Later, you configure the PHP application to connect to this database.

リソース グループの作成Create a resource group

リソース グループとは、Web アプリ、データベース、ストレージ アカウントなどの Azure リソースのデプロイと管理に使用する論理コンテナーです。A resource group is a logical container into which Azure resources like web apps, databases, and storage accounts are deployed and managed. たとえば、後から簡単な手順で一度にリソース グループ全体を削除することもできます。For example, you can choose to delete the entire resource group in one simple step later.

Cloud Shell で az group create コマンドを使用して、リソース グループを作成します。In the Cloud Shell, create a resource group with the az group create command. 次の例では、myResourceGroup という名前のリソース グループを "西ヨーロッパ" の場所に作成します。The following example creates a resource group named myResourceGroup in the West Europe location. Free レベルの App Service がサポートされているすべての場所を表示するには、az appservice list-locations --sku FREE コマンドを実行します。To see all supported locations for App Service in Free tier, run the az appservice list-locations --sku FREE command.

az group create --name myResourceGroup --location "West Europe"

通常は、現在地付近の地域にリソース グループおよびリソースを作成します。You generally create your resource group and the resources in a region near you.

コマンドが完了すると、リソース グループのプロパティが JSON 出力に表示されます。When the command finishes, a JSON output shows you the resource group properties.

MySQL サーバーを作成するCreate a MySQL server

Cloud Shell で az mysql server create コマンドを使用して、Azure Database for MySQL にサーバーを作成します。In the Cloud Shell, create a server in Azure Database for MySQL with the az mysql server create command.

次のコマンドの <mysql_server_name> プレースホルダーを一意のサーバー名に、<admin_user> プレースホルダーをユーザー名に、<admin_password> プレースホルダーをパスワードに置き換えます。In the following command, substitute a unique server name for the <mysql_server_name> placeholder, a user name for the <admin_user>, and a password for the <admin_password> placeholder. このサーバー名は、MySQL エンドポイント (https://<mysql_server_name>.mysql.database.azure.com) の一部として使用されるため、Azure のすべてのサーバーで一意である必要があります。The server name is used as part of your MySQL endpoint (https://<mysql_server_name>.mysql.database.azure.com), so the name needs to be unique across all servers in Azure.

az mysql server create --resource-group myResourceGroup --name <mysql_server_name> --location "West Europe" --admin-user <admin_user> --admin-password <server_admin_password> --sku-name GP_Gen4_2

注意

このチュートリアルには複数の資格情報が登場するため、こんらんを避ける目的で --admin-user--admin-password はダミー値に設定されます。Since there are several credentials to think about in this tutorial, to avoid confusion, --admin-user and --admin-password are set to dummy values. 運用環境では、Azure の MySQL サーバーに適切なユーザー名とパスワードを選択するとき、セキュリティ上のベスト プラクティスに従います。In a production environment, follow security best practices when choosing a good username and password for your MySQL server in Azure.

MySQL サーバーが作成されると、Azure CLI によって、次の例のような情報が表示されます。When the MySQL server is created, the Azure CLI shows information similar to the following example:

{
  "location": "westeurope",
  "name": "<mysql_server_name>",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "additionalProperties": {},
    "capacity": 2,
    "family": "Gen4",
    "name": "GP_Gen4_2",
    "size": null,
    "tier": "GeneralPurpose"
  },
  "sslEnforcement": "Enabled",
  ...   +  
  -  < Output has been truncated for readability >
}

サーバーのファイアウォールを構成するConfigure server firewall

Cloud Shell で az mysql server firewall-rule create コマンドを使用して、MySQL サーバーでクライアント接続を許可するためのファイアウォール規則を作成します。In the Cloud Shell, create a firewall rule for your MySQL server to allow client connections by using the az mysql server firewall-rule create command. 開始 IP と終了 IP の両方が 0.0.0.0 に設定されている場合、ファイアウォールは他の Azure リソースに対してのみ開かれます。When both starting IP and end IP are set to 0.0.0.0, the firewall is only opened for other Azure resources.

az mysql server firewall-rule create --name allAzureIPs --server <mysql_server_name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

ヒント

アプリで使用する送信 IP アドレスのみを使用することで、ファイアウォール規則による制限をさらに厳しくすることができます。You can be even more restrictive in your firewall rule by using only the outbound IP addresses your app uses.

ローカルに運用 MySQL サーバーに接続するConnect to production MySQL server locally

ローカルのターミナル ウィンドウで、Azure の MySQL サーバーに接続します。In the local terminal window, connect to the MySQL server in Azure. <mysql_server_name> に指定した値を使用します。Use the value you specified previously for <mysql_server_name>. パスワードの入力を求められたら、Azure でデータベースの作成時に指定したパスワードを使用します。When prompted for a password, use the password you specified when you created the database in Azure.

mysql -u <admin_user>@<mysql_server_name> -h <mysql_server_name>.mysql.database.azure.com-P 3306 -p

運用データベースを作成するCreate a production database

mysql プロンプトで、データベースを作成します。At the mysql prompt, create a database.

CREATE DATABASE sampledb;

アクセス許可を持つユーザーを作成するCreate a user with permissions

phpappuser というデータベース ユーザーを作成し、このユーザーに sampledb データベースのすべての特権を付与します。Create a database user called phpappuser and give it all privileges in the sampledb database. パスワードには MySQLAzure2017 を使用します。繰り返しになりますが、このチュートリアルのために単純なパスワードを選択しています。Again, for simplicity of the tutorial, use MySQLAzure2017 as the password.

CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; 
GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';

quit」と入力して、サーバー接続を終了します。Exit the server connection by typing quit.

quit

アプリを Azure MySQL に接続するConnect app to Azure MySQL

この手順では、Azure Database for MySQL に作成した MySQL データベースに PHP アプリケーションを接続します。In this step, you connect the PHP application to the MySQL database you created in Azure Database for MySQL.

データベース接続を構成するConfigure the database connection

リポジトリのルートに .env.production ファイルを作成し、その中に次の変数をコピーします。In the repository root, create an .env.production file and copy the following variables into it. DB_HOSTDB_USERNAME の両方でプレースホルダー <mysql_server_name> を変更します。Replace the placeholder <mysql_server_name> in both DB_HOST and DB_USERNAME.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=<mysql_server_name>.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser@<mysql_server_name>
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

変更を保存します。Save the changes.

ヒント

MySQL の接続情報を保護するために、このファイルは既に Git リポジトリから除外されています (リポジトリのルートで .gitignore を参照してください)。To secure your MySQL connection information, this file is already excluded from the Git repository (See .gitignore in the repository root). 後で、App Service の環境変数を構成して Azure Database for MySQL のデータベースに接続する方法を学習します。Later, you learn how to configure environment variables in App Service to connect to your database in Azure Database for MySQL. 環境変数を構成するので、App Service には .env ファイルは必要ありません。With environment variables, you don't need the .env file in App Service.

SSL 証明書を構成するConfigure SSL certificate

既定では、Azure Database for MySQL はクライアントからの SSL 接続を強制します。By default, Azure Database for MySQL enforces SSL connections from clients. Azure で MySQL データベースに接続するには、Azure Database for MySQL から提供された .pem 証明書を使用する必要があります。To connect to your MySQL database in Azure, you must use the .pem certificate supplied by Azure Database for MySQL.

config/database.php を開き、次のコードに示すように sslmode パラメーターと options パラメーターを connections.mysql に追加します。Open config/database.php and add the sslmode and options parameters to connections.mysql, as shown in the following code.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem', 
    ] : []
],

このチュートリアルでは、便宜上、証明書 BaltimoreCyberTrustRoot.crt.pem がリポジトリに用意されています。The certificate BaltimoreCyberTrustRoot.crt.pem is provided in the repository for convenience in this tutorial.

ローカルでアプリケーションをテストするTest the application locally

環境ファイルとして .env.production を使用して Laravel データベースの移行を実行して、Azure Database for MySQL の MySQL データベース内にテーブルを作成します。Run Laravel database migrations with .env.production as the environment file to create the tables in your MySQL database in Azure Database for MySQL. .env.production には Azure の MySQL データベースへの接続情報が含まれていることに注意してください。Remember that .env.production has the connection information to your MySQL database in Azure.

php artisan migrate --env=production --force

この時点では、.env.production には有効なアプリケーション キーはありません。.env.production doesn't have a valid application key yet. ターミナルで、新しいものを生成します。Generate a new one for it in the terminal.

php artisan key:generate --env=production --force

環境ファイルとして .env.production を使用してサンプル アプリケーションを実行します。Run the sample application with .env.production as the environment file.

php artisan serve --env=production

http://localhost:8000 に移動します。Navigate to http://localhost:8000. エラーなしでページが読み込まれれば、PHP アプリケーションは Azure の MySQL データベースに接続しています。If the page loads without errors, the PHP application is connecting to the MySQL database in Azure.

ページにいくつかのタスクを追加します。Add a few tasks in the page.

PHP が Azure Database for MySQL に正常にデータベースに接続されている

PHP を停止するには、ターミナルで Ctrl + C キーを押します。To stop PHP, type Ctrl + C in the terminal.

変更をコミットするCommit your changes

次の Git コマンドを実行して、変更をコミットします。Run the following Git commands to commit your changes:

git add .
git commit -m "database.php updates"

アプリをデプロイする準備ができました。Your app is ready to be deployed.

[Deploy to Azure (Azure へのデプロイ)]Deploy to Azure

この手順では、MySQL に接続される PHP アプリケーションを Azure App Service にデプロイします。In this step, you deploy the MySQL-connected PHP application to Azure App Service.

デプロイ ユーザーを構成するConfigure a deployment user

Cloud Shell で az webapp deployment user set コマンドを使用して、デプロイ資格情報を作成します。In the Cloud Shell, create deployment credentials with the az webapp deployment user set command. FTP と、Web アプリへのローカル Git のデプロイには、デプロイ ユーザーが必要です。This deployment user is required for FTP and local Git deployment to a web app. ユーザー名とパスワードはアカウント レベルです。The user name and password are account level. "Azure サブスクリプションの資格情報とは異なります。"They are different from your Azure subscription credentials.

次の例では、(かっこも含めて) <username><password> を新しいユーザー名とパスワードで置き換えます。In the following example, replace <username> and <password> (including brackets) with a new user name and password. ユーザー名は Azure 内で一意になっている必要があります。The user name must be unique within Azure. パスワードは長さが 8 文字以上で、文字、数字、記号のうち 2 つを含む必要があります。The password must be at least eight characters long, with two of the following three elements: letters, numbers, symbols.

az webapp deployment user set --user-name <username> --password <password>

パスワードが null と表示された状態で JSON 出力が返されます。You should get a JSON output, with the password shown as null. 'Conflict'. Details: 409 エラーが発生した場合は、ユーザー名を変更します。If you get a 'Conflict'. Details: 409 error, change the username. 'Bad Request'. Details: 400 エラーが発生した場合は、より強力なパスワードを使用します。If you get a 'Bad Request'. Details: 400 error, use a stronger password.

このデプロイ ユーザーの作成は 1 回だけ実行する必要があります。すべての Azure デプロイでこのユーザーを使用できます。You create this deployment user only once; you can use it for all your Azure deployments.

注意

ユーザー名とパスワードを記録します。Record the user name and password. 後で Web アプリをデプロイするときに必要になります。You need them to deploy the web app later.

App Service プランを作成するCreate an App Service plan

Cloud Shell で az appservice plan create コマンドを使用して、App Service プランを作成します。In the Cloud Shell, create an App Service plan with the az appservice plan create command.

次の例では、Free 価格レベルの myAppServicePlan という名前の App Service プランを作成します。The following example creates an App Service plan named myAppServicePlan in the Free pricing tier:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

App Service プランが作成されると、Azure CLI によって、次の例のような情報が表示されます。When the App Service plan has been created, the Azure CLI shows information similar to the following example:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Web アプリを作成するCreate a web app

myAppServicePlan App Service プランで Web アプリを作成します。Create a web app in the myAppServicePlan App Service plan.

Cloud Shell で、az webapp create コマンドを使用することができます。In the Cloud Shell, you can use the az webapp create command. 次の例では、<app_name> をグローバルに一意のアプリ名に置き換えてください (有効な文字は a-z0-9-)。In the following example, replace <app_name> with a globally unique app name (valid characters are a-z, 0-9, and -). ランタイムは PHP|7.0 に設定されています。The runtime is set to PHP|7.0. サポートされているすべてのランタイムを確認するには、az webapp list-runtimes を実行します。To see all supported runtimes, run az webapp list-runtimes.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app_name> --runtime "PHP|7.0" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app_name> --runtime "PHP|7.0" --deployment-local-git

Web アプリが作成されると、Azure CLI によって次の例のような出力が表示されます。When the web app has been created, the Azure CLI shows output similar to the following example:

Local git is configured with url of 'https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app_name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Git デプロイが有効な、空の新しい Web アプリが作成されました。You’ve created an empty new web app, with git deployment enabled.

注意

Git リモートの URL は deploymentLocalGitUrl プロパティに https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git 形式で出力されます。The URL of the Git remote is shown in the deploymentLocalGitUrl property, with the format https://<username>@<app_name>.scm.azurewebsites.net/<app_name>.git. この URL は後で必要になるので保存しておいてください。Save this URL as you need it later.

データベース設定を構成するConfigure database settings

既に指摘したように、App Service の環境変数を使用して、Azure MySQL データベースに接続できます。As pointed out previously, you can connect to your Azure MySQL database using environment variables in App Service.

Cloud Shell で az webapp config appsettings set コマンドを使用して、環境変数を "アプリ設定" として設定します。In the Cloud Shell, you set environment variables as app settings by using the az webapp config appsettings set command.

次のコマンドでは、アプリ設定 DB_HOSTDB_DATABASEDB_USERNAME、および DB_PASSWORD を構成します。The following command configures the app settings DB_HOST, DB_DATABASE, DB_USERNAME, and DB_PASSWORD. プレースホルダーの <appname><mysql_server_name> を置き換えます。Replace the placeholders <appname> and <mysql_server_name>.

az webapp config appsettings set --name <app_name> --resource-group myResourceGroup --settings DB_HOST="<mysql_server_name>.mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser@<mysql_server_name>" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

PHP getenv メソッドを使用して、これらの設定にアクセスできます。You can use the PHP getenv method to access the settings. Laravel コードでは、PHP getenv に対して env ラッパーが使用されます。the Laravel code uses an env wrapper over the PHP getenv. たとえば、config/database.php の MySQL 構成は次のコードのようになります。For example, the MySQL configuration in config/database.php looks like the following code:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Laravel の環境変数を構成するConfigure Laravel environment variables

Laravel には App Service のアプリケーション キーが必要です。Laravel needs an application key in App Service. これはアプリ設定で構成できます。You can configure it with app settings.

ローカル ターミナル ウィンドウで、php artisan を使用して新しいアプリケーションキーを生成します (.env には保存されません)。In the local terminal window, use php artisan to generate a new application key without saving it to .env.

php artisan key:generate --show

Cloud Shell で az webapp config appsettings set コマンドを使用して、App Service Web アプリにアプリケーション キーを設定します。In the Cloud Shell, set the application key in the App Service web app by using the az webapp config appsettings set command. プレースホルダーの <appname><outputofphpartisankey:generate> を置き換えます。Replace the placeholders <appname> and <outputofphpartisankey:generate>.

az webapp config appsettings set --name <app_name> --resource-group myResourceGroup --settings APP_KEY="<output_of_php_artisan_key:generate>" APP_DEBUG="true"

APP_DEBUG="true" は、デプロイした Web アプリでエラーが発生した場合にデバッグ情報を返すように Laravel に指示します。APP_DEBUG="true" tells Laravel to return debugging information when the deployed web app encounters errors. 運用アプリケーションを実行するときは、false に設定してセキュリティを強化します。When running a production application, set it to false, which is more secure.

仮想アプリケーション パスを設定するSet the virtual application path

Web アプリの仮想アプリケーション パスを設定します。Set the virtual application path for the web app. この手順が必要なのは、Laravel アプリケーション のライフサイクルがアプリケーションのルート ディレクトリではなく_パブリック_ ディレクトリから始まるためです。This step is required because the Laravel application lifecycle begins in the public directory instead of the application's root directory. ライフ サイクルがルート ディレクトリから始まる PHP フレームワークは、仮想アプリケーション パスの手動での構成なしで動作できます。Other PHP frameworks whose lifecycle start in the root directory can work without manual configuration of the virtual application path.

Cloud Shell で az resource update コマンドを使用して、仮想アプリケーション パスを設定します。In the Cloud Shell, set the virtual application path by using the az resource update command. <appname> プレースホルダーを置き換えます。Replace the <appname> placeholder.

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

既定では、Azure App Service は、デプロイされたアプリケーション ファイルのルート ディレクトリ (sites\wwwroot) に対して仮想アプリケーションのルート パス (/) をポイントします。By default, Azure App Service points the root virtual application path (/) to the root directory of the deployed application files (sites\wwwroot).

Git から Azure へのプッシュPush to Azure from Git

"ローカル ターミナル ウィンドウ" で、ローカル Git リポジトリに Azure リモートを追加します。Back in the local terminal window, add an Azure remote to your local Git repository. <deploymentLocalGitUrl-from-create-step> を、Web アプリの作成に関するセクションで保存した Git リモートの URL に置き換えます。Replace <deploymentLocalGitUrl-from-create-step> with the URL of the Git remote that you saved from Create a web app.

git remote add azure <deploymentLocalGitUrl-from-create-step>

アプリをデプロイするために、次のコマンドで Azure リモートにプッシュします。Push to the Azure remote to deploy your app with the following command. Git Credential Manager によって資格情報の入力を求めるメッセージが表示されたら、Azure portal へのサインインに使用する資格情報ではなく、デプロイ ユーザーの構成に関するセクションで作成した資格情報を入力してください。When prompted for credentials by Git Credential Manager, make sure that you enter the credentials you created in Configure a deployment user, not the credentials you use to sign in to the Azure portal.

git push azure master

このコマンドの実行には、数分かかる場合があります。This command may take a few minutes to run. 実行中、次の例のような情報が表示されます。While running, it displays information similar to the following example:

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Updating branch 'master'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'a5e076db9c'.
remote: Running custom deployment command...
remote: Running deployment command...
...
< Output has been truncated for readability >

注意

デプロイ プロセスの最後に Composer パッケージがインストールされることに気付くかもしれません。You may notice that the deployment process installs Composer packages at the end. App Service では既定のデプロイ中にこれらの自動化が実行されないため、このサンプル レポジトリには、有効化するための3 つのファイルがルート ディレクトリに追加されます。App Service does not run these automations during default deployment, so this sample repository has three additional files in its root directory to enable it:

  • .deployment - このファイルは、bash deploy.sh をカスタム デプロイ スクリプトとして実行するよう App Service に指示します。.deployment - This file tells App Service to run bash deploy.sh as the custom deployment script.
  • deploy.sh - カスタム デプロイ スクリプト。deploy.sh - The custom deployment script. このファイルを確認すると、npm install の後で php composer.phar install が実行されることがわかります。If you review the file, you will see that it runs php composer.phar install after npm install.
  • composer.phar - Composer パッケージ マネージャー。composer.phar - The Composer package manager.

この方法を使用して、App Service に対する Git ベースのデプロイに対して任意の手順を追加できます。You can use this approach to add any step to your Git-based deployment to App Service. 詳細については、「Custom Deployment Script (カスタム デプロイ スクリプト)」を参照してください。For more information, see Custom Deployment Script.

Azure Web アプリの参照Browse to the Azure web app

http://<app_name>.azurewebsites.net を参照し、一覧にいくつかのタスクを追加します。Browse to http://<app_name>.azurewebsites.net and add a few tasks to the list.

Azure App Service で実行される PHP アプリ

データ主導型の PHP アプリが Azure App Service で実行されています。Congratulations, you're running a data-driven PHP app in Azure App Service.

ローカルにモデルを更新し、再デプロイするUpdate model locally and redeploy

この手順では、task データ モデルと Web アプリに単純な変更を加え、変更内容を Azure に発行します。In this step, you make a simple change to the task data model and the webapp, and then publish the update to Azure.

このタスク シナリオでは、タスクを完了としてマークできるようにアプリケーションを変更します。For the tasks scenario, you modify the application so that you can mark a task as complete.

列を追加するAdd a column

ローカル ターミナル ウィンドウで、Git リポジトリのルートに移動します。In the local terminal window, navigate to the root of the Git repository.

tasks テーブル用の新しいデータベースの移行を生成します。Generate a new database migration for the tasks table:

php artisan make:migration add_complete_column --table=tasks

このコマンドは、生成される移行ファイルの名前を表示します。This command shows you the name of the migration file that's generated. このファイルを database/migrations で探して開きます。Find this file in database/migrations and open it.

up メソッドを次のコードに置き換えます。Replace the up method with the following code:

public function up()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->boolean('complete')->default(False);
    });
}

上のコードは、tasks テーブルに complete と呼ばれるブール値の列を追加します。The preceding code adds a boolean column in the tasks table called complete.

down メソッドを、ロールバック アクション用の次のコードに置き換えます。Replace the down method with the following code for the rollback action:

public function down()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->dropColumn('complete');
    });
}

ローカル ターミナル ウィンドウで、Laravel データベースの移行を実行して、ローカル データベースを変更します。In the local terminal window, run Laravel database migrations to make the change in the local database.

php artisan migrate

Laravel の名前付け規則に基づいて、モデル Task (app/Task.php 参照) を tasks テーブルに既定でマップします。Based on the Laravel naming convention, the model Task (see app/Task.php) maps to the tasks table by default.

アプリケーション ロジックを更新するUpdate application logic

routes/web.php ファイルを開きます。Open the routes/web.php file. アプリケーションは、そのルートとビジネス ロジックをここに定義します。The application defines its routes and business logic here.

ファイルの末尾に、次のコードを使用してルートを追加します。At the end of the file, add a route with the following code:

/**
 * Toggle Task completeness
 */
Route::post('/task/{id}', function ($id) {
    error_log('INFO: post /task/'.$id);
    $task = Task::findOrFail($id);

    $task->complete = !$task->complete;
    $task->save();

    return redirect('/');
});

上のコードは、データ モデルに対して complete 値の切り替えによる単純な更新を行います。The preceding code makes a simple update to the data model by toggling the value of complete.

ビューを更新するUpdate the view

resources/views/tasks.blade.php ファイルを開きます。Open the resources/views/tasks.blade.php file. <tr> 開始タグを探し、次のコードに置き換えます。Search for the <tr> opening tag and replace it with:

<tr class="{{ $task->complete ? 'success' : 'active' }}" >

上のコードは、タスクが完了しているかどうかに応じて行の色を変更します。The preceding code changes the row color depending on whether the task is complete.

次の行には、次のコードがあります。In the next line, you have the following code:

<td class="table-text"><div>{{ $task->name }}</div></td>

この行全体を次のコードに置き換えます。Replace the entire line with the following code:

<td>
    <form action="{{ url('task/'.$task->id) }}" method="POST">
        {{ csrf_field() }}

        <button type="submit" class="btn btn-xs">
            <i class="fa {{$task->complete ? 'fa-check-square-o' : 'fa-square-o'}}"></i>
        </button>
        {{ $task->name }}
    </form>
</td>

上のコードは、前に定義したルートを参照する送信ボタンを追加します。The preceding code adds the submit button that references the route that you defined earlier.

変更をローカルでテストするTest the changes locally

ローカル ターミナル ウィンドウで、Git リポジトリのルート ディレクトリから開発サーバーを実行します。In the local terminal window, run the development server from the root directory of the Git repository.

php artisan serve

タスクの状態の変更を確認するには、ブラウザーで http://localhost:8000 に移動し、チェック ボックスをオンにします。To see the task status change, navigate to http://localhost:8000 and select the checkbox.

タスクに追加されたチェック ボックス

PHP を停止するには、ターミナルで Ctrl + C キーを押します。To stop PHP, type Ctrl + C in the terminal.

Azure に変更を発行するPublish changes to Azure

ローカル ターミナル ウィンドウで、運用環境の接続文字列を使用して Laravel データベースの移行を実行して、Azure の運用データベースを変更します。In the local terminal window, run Laravel database migrations with the production connection string to make the change in the Azure database.

php artisan migrate --env=production --force

すべての変更を Git にコミットした後、コードの変更を Azure にプッシュします。Commit all the changes in Git, and then push the code changes to Azure.

git add .
git commit -m "added complete checkbox"
git push azure master

git push が完了したら、Azure Web アプリに移動し、新機能を試します。Once the git push is complete, navigate to the Azure web app and test the new functionality.

Azure に発行されたモデルとデータベースの変更

タスクを追加した場合は、そのタスクがデータベースに保持されます。If you added any tasks, they are retained in the database. データ スキーマに対する更新では、既存のデータはそのまま残ります。Updates to the data schema leave existing data intact.

診断ログをストリーミングするStream diagnostic logs

Azure App Service で PHP アプリケーションを実行している場合、コンソール ログをターミナルにパイプできます。While the PHP application runs in Azure App Service, you can get the console logs piped to your terminal. このようにすると、アプリケーション エラーのデバッグに役立つ同じ診断メッセージを取得できます。That way, you can get the same diagnostic messages to help you debug application errors.

ログのストリーミングを開始するには、Cloud Shell で az webapp log tail コマンドを使用します。To start log streaming, use the az webapp log tail command in the Cloud Shell.

az webapp log tail --name <app_name> --resource-group myResourceGroup

ログのストリーミングが開始されたら、ブラウザーで Azure Web アプリを最新の情報に更新して、Web トラフィックを取得します。Once log streaming has started, refresh the Azure web app in the browser to get some web traffic. ターミナルにパイプされたコンソール ログが表示されます。You can now see console logs piped to the terminal. コンソール ログがすぐに表示されない場合は、30 秒以内にもう一度確認します。If you don't see console logs immediately, check again in 30 seconds.

任意のタイミングでログのストリーミングを停止するには、Ctrl + C キーを押します。To stop log streaming at anytime, type Ctrl+C.

ヒント

PHP アプリケーションは、標準の error_log() を使用してコンソールに出力できます。A PHP application can use the standard error_log() to output to the console. サンプル アプリケーションでは、app/Http/routes.php でこの方法を使用しています。The sample application uses this approach in app/Http/routes.php.

Web フレームワークとして、Laravel では、ログ記録プロバイダーとして Monolog を使用しています。As a web framework, Laravel uses Monolog as the logging provider. Monolog でメッセージをコンソールに出力する方法については、「PHP: How to use monolog to log to console (php://out) (PHP: monolog を使用してコンソールにログを出力する方法 (php://out)) 」を参照してください。To see how to get Monolog to output messages to the console, see PHP: How to use monolog to log to console (php://out).

Azure Web アプリを管理するManage the Azure web app

Azure Portal に移動し、作成した Web アプリを管理します。Go to the Azure portal to manage the web app you created.

左側のメニューで [App Services] をクリックした後、Azure Web アプリの名前をクリックします。From the left menu, click App Services, and then click the name of your Azure web app.

Azure Web アプリへのポータル ナビゲーション

Web アプリの [概要] ページを確認します。You see your web app's Overview page. ここでは、停止、開始、再開、参照、削除のような基本的な管理タスクを行うことができます。Here, you can perform basic management tasks like stop, start, restart, browse, and delete.

左側のメニューは、アプリを構成するためのページを示しています。The left menu provides pages for configuring your app.

Azure Portal の [App Service] ページ

リソースのクリーンアップClean up resources

前の手順では、リソース グループ内に Azure リソースを作成しました。In the preceding steps, you created Azure resources in a resource group. これらのリソースが将来必要になると想定していない場合、Cloud Shell で次のコマンドを実行して、リソース グループを削除します。If you don't expect to need these resources in the future, delete the resource group by running the following command in the Cloud Shell:

az group delete --name myResourceGroup

このコマンドの実行には、少し時間がかかる場合があります。This command may take a minute to run.

次の手順Next steps

このチュートリアルで学習した内容は次のとおりです。In this tutorial, you learned how to:

  • Azure で MySQL データベースを作成するCreate a MySQL database in Azure
  • PHP アプリを MySQL に接続するConnect a PHP app to MySQL
  • Azure にアプリケーションをデプロイするDeploy the app to Azure
  • データ モデルを更新し、アプリを再デプロイするUpdate the data model and redeploy the app
  • Azure から診断ログをストリーミングするStream diagnostic logs from Azure
  • Azure Portal でアプリを管理するManage the app in the Azure portal

次のチュートリアルに進み、カスタム DNS 名を Web アプリにマップする方法を学習してください。Advance to the next tutorial to learn how to map a custom DNS name to a web app.