Azure で PHP(Laravel) アプリと MySQL アプリを構築する【2】

株式会社プライムストラクチャーのエンジニアのSayaです。

今回は前回に引き続き、 Azure App Service で実行される PHP(Laravel)アプリ と MySQL アプリを構築する方法を Microsoft の公式チュートリアルを参考に紹介したいと思います。

このチュートリアルは macOS Mojave で行いました。

PHP(Laravel) アプリを Azure MySQL に接続する

データベース接続の構成

ターミナルより、作業中のリポジトリのルートから

vim .env.production

でファイルを作成します。

インサートモードで次の中身を書き込みます。

  • <mysql_server_name> には作成した Azure Database for MySQL に名付けたリソース名を入力します。
  • phpappuser にはローカルで DB を作成した時に名付けたユーザー名を入力します。
  • MySQLAzure2017 にはローカルで DB を作成した時に指定したパスワードを入力します。
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

入力したら :wq! で保存して編集画面を閉じます。

通常このファイルは Azure App Service には必要がないため、.gitignore で除外します。
MySQL の接続情報を保護の為です。
このサンプルでは既に .gitignore にて除外されています。

SSL証明書を構成

規定で Azure Database for MySQL に接続するにはクライアントは SSL接続を強制されるようになっています。

接続には Azure Database for MySQL から提供された .pem 証明書を使用する必要があります。

作業中のリポジトリのルートから

cd config

で config フォルダの中に入り、

vim database.php

で中身を編集します。

以下の sslmode, options パラメータを connectionsmysql 項目に追加します。

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

:wq! で保存して終了します。

証明書である BaltimoreCyberTrustRoot.crt.pem は既にこのサンプルリポジトリに入っています。

ローカルでアプリをテスト

ターミナルより、環境ファイルとして .env.production を使用し、 Laravel データベースの移行を実行します。
Azure Database for MySQL の MySQL データベース内にテーブルを作成します。

php artisan migrate --env=production --force

新しいアプリケーションキーを作成します。

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

環境ファイルとして .env.production を使用してサンプルアプリを実行します。

php artisan serve --env=production

ブラウザより http://localhost:8000 に移動します。

何のエラーも表示されなければこの PHP アプリは Azure の MySQL データベースに接続しています。

確認出来たら Ctrl + c で停止します。

変更をコミット

以下の Git コマンドを実行して変更をコミットします。

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

これでアプリをデプロイする準備が整いました。

Azure へデプロイする

デプロイ資格者情報の構成

Azure Cloud Shell を開いて以下のコマンドを実行し、デプロイ資格者情報を構成します。

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

デプロイ資格者情報の構成は1回のみ実行していればいいので、既に資格者情報を持っている場合にはそちらを利用しても大丈夫です。

App Service プランの作成

Cloud Shell で以下のコマンドを実行して App Service プランを作成します。

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

Web アプリの作成

  • <app-name>にはグローバルで一意な名前に置き換えます。

# 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

これで Git デプロイが可能な空の Web アプリが作成されました。

deploymentLocalGitUrl プロパティに表示される URL は Git から Azure へのプッシュに後ほど使うのでコピーしておきます。

データベース設定の構成

  • <app-name>には先ほど作成した Web アプリ名を入力します。
  • <mysql_server_name> には作成した Azure Database for MySQL に名付けたリソース名を入力します。
  • phpappuser にはローカルで DB を作成した時に名付けたユーザー名を入力します。
  • MySQLAzure2017 にはローカルで DB を作成した時に指定したパスワードを入力します。

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"

Laravel の環境変数の構成

Laravel 上で App Service のアプリケーションキーを作成します。
ローカルのターミナルで Laravel の作業フォルダに戻り、以下のコマンドを実行します。

php artisan key:generate --show

続いて Cloud Shell に戻り、以下のコマンドでApp Service アプリにアプリケーションキーを設定します。

  • <app-name>には先ほど作成した Web アプリ名を入力します。
  • <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はアプリケーションを実際に運用する際にfalseを設定してセキュリティを強化出来ます。

アプリの仮想アプリケーションパスの設定

Cloud Shell で以下のコマンドを実行して仮想アプリケーションパスを設定します。
* <app-name>には先ほど作成した Web アプリ名を入力します。

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

Git から Azure へプッシュ

  • <deploymentLocalGitUrl-from-create-step>には、先ほど空の Web アプリを作成した時に表示された deploymentLocalGitUrl プロパティの URL を入力します。
    またはhttps://<username>@<app-name>.scm.azurewebsites.net/<app-name>.gitの形式でusernameにはデプロイ資格者情報のユーザー名、app-nameには Web アプリの名前を代入することでも接続出来ます。

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

git push azure master

ローカルから Azure へプッシュ出来たら実際に Web サイトへ行って表示を確認します。

http://<app-name>.azurewebsites.net

ローカルで確認したアプリと同じアプリが表示されます。

まとめ

今回は Azure App Service を用いた、PHP(Laravel)アプリと MySQL アプリを構築する方法を紹介していきました。

これで PHP ベースのデータベースを持つアプリをローカルから Azure 上へデプロイ出来るようになりました。

次回以降では PHP 以外のアプリのデプロイの方法も紹介していきたいと思います。

参考文献

PHP (Laravel) と MySQL – Azure App Service | Microsoft Docs