株式会社プライムストラクチャーのエンジニアの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
パラメータを connections
の mysql
項目に追加します。
'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 以外のアプリのデプロイの方法も紹介していきたいと思います。