今回は、AzureのPaaS上にWordpressを設置する方法を紹介します。これまで、WordpressをIaaS上で運用してきましたが、そろそろIaaSを卒業して、PaaSでサービスを運用していこうと思い、PaaS上に設置することにしました。 Azureのマーケットプレイスには、このようにAzure App Service用にWordpressのテンプレート が用意されていますが、実際に運用するにあたっては、不十分な点も多く、今回はゼロから環境構築をすることにしました。 簡単に今回の手順を紹介すると次のようになります。
- App Service (Windows)を作成
- Azure Database for MySQLを作成
- Azure Database for MySQLを構成
- App Serviceへカスタムドメインを設定
- App ServiceのカスタムドメインにLet’s Encryptを使って証明書を設置 (HTTPS通信設定)
- WordPressをApp Serviceへアップロード
- WordPressをAzure Database for MySQLに接続するよう設定
それぞれの手順について、紹介します。
目次
設置にあたって注意すること
今回は、AzureのPaaS上にWordpressを設置する方法を紹介します。なぜ、Windows 上に設置設置したかというと、今回はサーバ証明書をLet’s Encryptと呼ばれる無料の証明書を使う予定ですが、3ヶ月で証明書が有効期限が切れてしまうため、自動的に更新するように設定できるようにします。 Azure App ServiceではコンテナのWindows / LinuxとOSを選択することができます。しかし、WindowsコンテナとLinuxコンテナでは、利用できる機能が異なるため注意が必要です。
App Service (Windows) を作成する手順
まず、Wordpressを設置するApp Serviceを作成します。azure portalへアクセスし、「リソースの作成 > Webアプリ」と選択します。そして、次の図のように、リソースグループ、インスタンス名、ランタイムスタック、オペレーティングシステム、地域、App Serviceプランを入力します。ここで、インスタンス名は、重複することができないので、独自の名前をつけてください。また、オペレーティングシステムは、この後の手順でWindowsでしか行えない作業を含むため、必ずWindowsを選択してください。 必要な項目を入力したら、「確認および作成」ボタンを押して、作成を完了してください。
Azure Database for MySQLを作成する手順
次に、Wordpressのデータベースとして、Azure Database for MySQLを作成します。azure portalへアクセスし、「リソース作成 > データベース > Azure Database for MySQL」と選択します。そして、リソースグループ、サーバー名、データソース、場所、バージョン、管理者ユーザー名、パスワードを次のように入力します。サーバー名は、重複することができないので、独自の名前をつけてください。 必要な項目を入力したら、「確認および作成」ボタンを押して、作成してください。
Azure Database for MySQLの設定
次に作成したAzure Database for MySQLを設定します。ここでは、App Serviceからデータベースへのアクセスを許可すること、また、現在、作業しているPCからアクセスしてデータベースを作成できるようアクセスを許可します。 まず、azure portal上で作成したAzure Database for MySQLへ移動し、サイドバー のメニューにある「接続のセキュリティ」を選択します。次に、「Azureサービスへのアクセスを許可」を「はい」にし、その下にある「現在のクライアントIPアドレスを追加する」を押して、現在の作業PCのIPアドレスが追加されるのを確認して、「保存」ボタンを押します。
App Serviceにカスタムドメインを設定する手順
次にApp Serviceにカスタムドメインを設定して、独自ドメインでアクセスできるようにします。まず、事前にドメインを管理するサイトでApp Serviceへルーティングするように設定します。例えば、Azure DNSで管理している場合、まず、azure portalのDNSゾーンから適切なドメインを選択します。次に、「レコードセット」ボタンを押して、レコードセットを追加します。名前にはカスタムドメインに設定したいFQDNを入力し、種類はCNAMEを選択してください。次にエイリアスのレコードセットは「いいえ」を選択し、エイリアスはApp ServiceのFQDNを入力します。そして、「OK」ボタンを押して作成を完了します。
次にApp Service側で設定をします。まず、azure portal上で作成したApp Serviceに移動します。次にサイドバー にある「カスタムドメイン」メニューを選択し、「カスタムドメインの追加」ボタンを押します。そして、カスタムドメインに、先ほど設定したCNAMEの名前を入力し、「検証」ボタンを押します。適切に設定できている場合、検証結果の項目が表示されるので、「カスタムドメインの追加」ボタンを押して追加を完了させます。
適切に追加できた場合、下の図のように状態フィルターに設定したカスタムドメインが表示されるようになります。
カスタムドメインにHTTPSアクセスできるようにする手順
次に設定したカスタムドメインにHTTPSでアクセスできるようサーバ証明書を設定します。今回はLet’s Encryptという無料でサーバ証明書を発行・利用できるサービスの証明書を利用します。 この設定には、アクセス権限をリソースグループに追加し、App Service上でLet’s Encryptの設定をする必要があります。まず、アクセス権限の設定方法について紹介します。
アクセス権限の設定
まず、アクセス権の設定に必要なクライアントID / クライアントシークレットを作成します。Azure Active Directoryにアクセスし、サイドメニューにある「アプリの登録」を選択します。次に「新規登録」ボタンを押し、次のように入力します。名前は任意の値で、アクセス範囲は一番上の「この組織ディレクトリのみに含まれるアカウント」を選択し、リダイレクトURIには先ほど設定したカスタムドメインを設定します。
次にリソースグループに作成したアプリ登録の情報を付与し、アクセス権を追加します。まず、リソースグループのリスト画面でApp Service が含まれるリソースグループを選択します。次にサイドバー にあるアクセス制御(IAM)を選択し、「追加」ボタンを押すと現れる「ロールの割り当ての追加」を選択します。そして、現れた右サイドのウインドウに役割を「共同作成者」、選択で先ほど作成したアプリの名前を選択します。
WebJobs用のストレージアカウントの作成
次に、App Serviceが定期的に証明書の有効期限を更新して、期限切れにならないようにするためのバッチ処理をApp Serivce内で運用できるWebJobsという機能がApp Serviceには備わっています。その機能を用いて、WebJobsが動作するための作業空間として、ストレージアカウントが必要になります。 まず、メニューの「リソースの作成」を選択して、ストレージアカウントを選択します。そして、次のように必要な項目を入力して、「作成」ボタンを押し、ストレージアカウントを作成します。
App ServiceでLet’s Encryptの設定手順
まず、azure portalで証明書を設定するApp Serviceにアクセスし、左のメニューから「拡張機能」を選択します。そして、「拡張機能の選択」で「Azure Let’s Encrypt」を選択し、「法律条項」を「Accepted」にし、「OK」ボタンを押します。
次に、拡張機能のインストールが完了したら、同じ「拡張機能」メニューの中で「Azure Let’s Encrypt」という項目が見えるようになるので、それを選択します。そして、「参照」ボタンを押すと、設定画面がポップアップします。 そして、次のように必要な項目を入力します。
まず、「Tenant」については、onmicrosoft.comで終わるApp Serviceが含まれるActive Directory名を入力します。次に、「SubscriptionId」については、Azureの課金オブジェクトであるサブスクリプションのIDを入力します。次に「ClientId」は、Active Directoryの作成したアプリを選択したときに表示されるクライアントIDを入力し、ClientSecretについては同じ画面のサイドメニューにあるを選択して、シークレットを作成して入力してください。次に、ResourceGroupNameについては、App Serviceが所属するリソースグループの名前を入力し、ServicePlanResourceGroupNameにはApp Service Planが所属するリソースグループ名を入力します。そして、UseIPBasedSSLはチェックしないまま、SiteSlotNameも空のままにします。そして、DashboardConnectionStringとStorageConnectionStringには、先ほど作成したストレージアカウントの画面で、サイドメニューの「アクセスキー」を選択し、接続文字列にある値を入力してください。そして、Update Application Settings and Virtual Directory (If needed)はチェックしないままにしてください。 そして、「Next」ボタンを押して登録を完了させます。
WordPressをApp Serviceへアップロードする手順
次に、WordpressをApp Serviceへアップロードします。App Serviceではオンラインストレージから同期、Git、FTPでアップロードすることができます。どのような方法に対応しているかは、サイドメニューの「デプロイメント > デプロイセンター」を選択すると利用可能なサービス一覧が見られます。
その中で、今回は、FTPでアップロードする方法を選択しました。「FTP」を選択し、「ダッシュボード」ボタンを押します。すると、下の図のようにFTPエンドポイントのURL、ユーザ情報(ユーザ名、パスワード)が表示されるため、その情報を使って、FTPクライアントでアクセスし、wordpressのサイトからダウンロードした最新のソースコードを解凍して、アップロードしてください。
私の場合、普段のコーディングにVisual Studio Codeを利用しているので、一番簡単にアップロードできる方法は、Azure App Service 用のプラグインを利用する方法で、Wordpressをアップロードしました。
このプラグインをインストール後に、Azureのアイコンをクリックすると、App Serviceのリストが表示されます。ここで、赤枠で囲った上向の矢印を押すとメニューが現れ、ディレクトリごとWordpress一式をアップロードできます。
WordPressをAzure Database for MySQLに接続する手順
Azure Database for MySQL は、デフォルトでSSL接続するようになっていますが、WordPressは同じマシンに設置されたMySQLサーバへ接続することを想定しているため、SSLに対応していません。そのため、いくつかの手順をふむ必要があります。今回は、こちらのサイトを参考にしながら、証明書をApp Serviceへアップロード、App Serviceの環境変数に証明書のパスを追加し、wp-config.phpにその情報を書き込むという作業を行いました。
そして、ブラウザでApp Serviceにアクセスし、Azure Database for MySQLの情報を登録すると、無事に接続できるようになります。
参考サイト
- App Serviceのプラン
- App ServiceにPHPアプリを設置する方法
- Azureでドメインを購入する方法
- App Serviceでカスタムドメインを設定する方法
- Azure App ServiceにLet’s Encrypt証明書を導入する方法
- App ServiceへLet’s Encryptの証明書をインストールする方法 (github)
- Azure MySQLへWordpressからSSL接続する方法
- WP Email SMTPでGmailを設定する方法