App ServiceとAzure Database for MySQLで簡単Wordpressサイト構築

#はじめに
2017年5月にAzure Database for MySQLがプレビューで登場しました。

MySQLをAzureで使うには以下の4つの方法がありますが、やっと本命のAzure Database for MySQLが(Previewですが)出てくることで、フルマネージドで利用することが可能となります。

- 仮想マシン上に自分でMySQLサーバを立てる
- サードパーティーのClearDBを利用
- App Service MySQL in-appを利用
- **Azure Database for MySQLを利用**

本記事ではApp ServiceとAzure Database for MySQLを使って簡単にWordpressのサイトを構築する手順をまとめました。

**記事中の画面キャプチャーは全て2017/11/17時点のものですのでGA後に若干構成が異なる場合があります**

#構築の流れ
以下の順序でAzure上にWordpressを構築していきます。

1. Azure Database for MySQLのデプロイ
2. WordpressをApp Service上にデプロイ
3. MySQLのファイヤーウォール設定
4. WordpressとMySQLのSSL接続有効化
5. (option)カスタムドメインの登録とSSL有効化
6. Wordpressの初期設定
7. (option)WordpressのSSL対応

#Azure Database for MySQLのデプロイ
今回は東日本リージョンで作成します。
適当なリソースグループを作成後、Azureポータルの左上の「＋」をクリック後、フィルタ欄に「mysql」と入力、一覧から「Azure Database for MySQL」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/5232a89d-04e0-5be1-4149-330c29513326.png)


サーバー名はWorld Wideでユニークになる名前を入力します。
サーバー管理者ログイン名は適当に、パスワードはこの後にWordpress構築時に必要となりますので忘れないようにしてくださいね。
MySQLのバージョンは今回は5.7にしました。
価格レベルですが、初期状態ではStandardになりますが、今回はテスト用なのでなるべく価格の安いBasicに変更しています。

作成ボタンを押して、しばらく待つとMySQLのデプロイ完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/2a28ce5e-dbf5-e313-5338-24a259966858.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/13928899-3a41-42cb-d6d4-11828faac912.png)


#WordpressをApp Service上にデプロイ
今回はWordpressさんが提供してくれているMarketplaceに登録されているApp Service用のをそのまま利用します。

Azureポータル左上の「＋」をクリック後、フィルタ欄に「wordpress」と入力、一覧から「Wordpress」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/48fa050a-f4cb-7bc1-5035-2666235e0a74.png)

アプリ名はWorld Wideでユニークになる名前を入力します。
データベースプロバイダーには「Azure Database for MySQL」を選択します。
App ServiceプランはMySQLと同じリージョンである東日本で、Basic 1コアで作成します。
(この後カスタムドメインを使用するためBasic以上にする必要があります)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/895449d6-075b-78c6-6eb4-c22930ef0320.png)

データベースの設定ではデータベースサーバには先に作成したMySQLを選択後、パスワードにも先に設定したものを入力します。
データベース名は適当でいいのですが、今回は「wordpress01」としました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/0ff11115-ea5d-d8e3-a692-06e107bf3e3d.png)

全ての項目入力後最後に「作成」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/d73e1f6c-0c7f-164f-f57b-5b072fc68f1a.png)

暫くすると作成完了して、状態がRunningとなります。
こちらのURL欄に表示されているホスト名(FQDN)はあとでカスタムドメインを設定するときに必要なので控えておきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/26b3308b-89e2-3fd8-a241-b6e62844800d.png)

念のためブラウザからURLを入力してアクセスしてみると、DBの接続設定がまだ行われていないので、以下のエラーが表示されると思います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/dbdebb40-47c2-f124-a0f9-47c691aadb91.png)

#MySQLのファイヤーウォール設定
Azure Database for MySQLは初期状態ではどこからも通信ができない設定になっています。
今回はWordpressがインストールされているApp Serviceからのみアクセスできれば良いです。

App Serviceの「プロパティ」を表示して、中の「送信IPアドレス」にかかれているカンマ区切りで入っている複数のIPアドレスが送信元となるIPアドレスですので、控えておきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/9047cd16-c69e-2817-4b63-c2e348a5fb74.png)

今度はMySQLの「接続のセキュリティ」を開き、「ファイアウォール規則」に先ほどのIPアドレスを全て追加します。
「規則名」は適当に重複しないように。開始IPと終了IPには同じIPアドレスを設定して、複数行追加します。
最後に「保存」を押して適用します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/316f3ef6-6b1e-60fe-8042-a28de12e6047.png)

#WordpressとMySQLのSSL接続有効化
初期状態でAzure Database for MySQLはクライアントからのDB接続はSSL接続のみを許容しています。
今回のケースではDB接続はAzureデータセンター内(それも東日本内)に閉じているため、パケットを外部から見られてしまう可能性はありませんが、せっかくですのでWordpressからMySQLにSSL接続を行う設定も有効化します。

情報としてはMS内のApp ServiceチームBlog「[Connect Azure App Service to Azure database for MySQL and PostgreSQL via SSL](https://blogs.msdn.microsoft.com/appserviceteam/2017/05/10/connect-azure-app-service-to-azure-database-for-mysql-and-postgresql-via-ssl/)」に書かれている内容をそのまま行いました。
日本語の記事としては三宅さんの「[Azure MySQLでWordPressからのSSL接続を有効にする](https://k-miyake.github.io/blog/azure-mysql-ssl/)」がおすすめです。

先ずは[証明書ファイル](https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt)をダウンロードしてきて、opensslコマンドでpen形式に変換します。
opensslコマンドが無い方は適当なLinux仮想マシンを立ち上げるか、Windows 10のWindows Subsystem for Linuxを使うとよいと思います。

```
$ openssl x509 -inform DER -in BaltimoreCyberTrustRoot.crt -out MyServerCACert.pem
```

ローカルPC上に作成されたpemファイルをApp Service上にアップロードするのに、Kuduが便利です。
App Serviceの「高度なツール」から「起動」をクリックすると新しいウインドウが開き、Kuduの画面が出ます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/5de6b064-3987-858d-7565-595119ca164a.png)

「Debug Console」メニューから「CMD」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/e03e4e7f-f82f-6212-f819-735be494e665.png)

ファイルマネージャーから「home」「site」「wwwroot」に移動後、「＋」をクリックして「New Folder」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/3551413e-c84d-0b4e-afbc-14e1ce89ae7b.png)

フォルダ名には「bin」と名付けます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/762ca1e5-f5cd-48bc-4c83-9de01b5d86c4.png)

ファイルマネージャーから「bin」フォルダに移動後、ローカルPCのエクスプローラーから先ほど作成したpemファイルをドラッグ&ドロップでファイルマネージャーにもっていくとアップロードされます（便利）。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/68225cb0-b890-3a07-d1fb-1d3e372f7d97.png)

続いてApp Serviceの「アプリケーション設定」にて「アプリ設定」に環境変数を追加します。

キー: MYSQL_SSL_CA
値: D:\home\site\wwwroot\bin\MyServerCACert.pem

最後に「保存」をクリックするのも忘れないように。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/078f0077-7197-abe6-f65a-3bab10550dcb.png)

次に再度Kuduの画面に戻り、ファイルマネージャーから「home」「site」「wwwroot」の下に移動後、「wp-config.php」ファイル左の鉛筆アイコンをクリックして編集モードに入ります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/56070a84-0ad0-8f0c-19c3-eb2cfd0a9317.png)

ファイル編集画面で適度な場所に以下の二行を追加します。今回は39行目に追加しました。

```
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
define('MYSQL_SSL_CA', getenv('MYSQL_SSL_CA'));
```

最後に「SAVE」を押してファイルを保存します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/2e2e9705-aaff-0b99-218b-61fcbc9cedca.png)

一度App Serviceを再起動後、「URL」欄をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/ff54cfe5-f534-9b66-6b53-459deabd83bd.png)

Wordpressの初回インストール画面が表示されればDBの接続設定は完了です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/e7f290f6-b7c4-850a-eafe-8950ad737993.png)

#(option)カスタムドメインの登録とSSL有効化
**こちらの章は独自ドメインを持っている方、SSL証明書を持っている方はお試しできますが、スキップしても構いません**

先に独自ドメインに新しくCNAMEレコードを追加します。私は自身のドメインをAzure DNSで管理しているので、Azureポータルからnya-n.netのレコードセットを追加します。

名前は「blog」、種類は「CNAME」、エイリアスとしてApp Serciceのホスト名(FQDN)を入力してCNAMEレコードを追加しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/6ddda549-7ce1-c2c3-ffd8-2785b9503804.png)

App Serviceの「カスタムドメイン」を選択後、「＋ホスト名の追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/17eda4b1-53b1-08d5-8b63-8b5291d90bb4.png)

「ホスト名」に先ほどCNAMEレコード追加で設定したホスト名(FQDN)を入力後、「検証」をクリックします。
検証結果がオールグリーンになると「ホスト名の追加」が押せるようになるのでクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/1faf9f12-426b-34a9-e21e-865997495838.png)

暫く待つと「サイトに割り当てられるホスト名」に先ほど追加したホスト名が表示されます。
こちらの反映には時間がかかる場合があるみたいです、たまに「最新の情報に更新」を押して追加されるまで待ちます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/87118ee8-1947-7d43-ea73-ddfd1a5d3787.png)

続いてSSL証明書の設定です。SSL証明書に関する記事は「[Azure Web Appsに独自ドメイン＆SSLサーバ証明書を設定する](https://qiita.com/yotan/items/a3f2da793995485e7e06)」を参考にされるとよろしいかと。
ここではさくっと証明書ファイル(pfx)のアップロードとSSLバインドを済ませた画面を下に示します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/60e94768-fa01-6c4a-d1f2-0f104d413ebd.png)

ここまで終わると、App Serviceの概要画面でも「URL」欄がカスタムドメインに書き換わりますので、こちらをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/56ce21ee-0947-cd3f-ead2-2ae14e6cb499.png)

無事カスタムドメインでWordpressの初期インストール画面にアクセスできました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/87ab20e0-1826-6b8e-a2f8-59a44e39f464.png)

#Wordpressの初期設定
ここからはあまりAzureとは関係ないのですがWordpressの初期設定について簡単に説明します。

最初の言語選択画面では「日本語」を選択後「続ける」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/771d03d3-79dd-2967-ddef-4b2b8eb2b4e3.png)

「ようこそ」画面では必要な情報を適当に入力します。
パスワードはなるべく複雑なものが良いでしょう。どうしても覚えやすいパスワードで脆弱表示が出てしまう場合は「脆弱なパスワードの使用を確認」にチェックを入れれば先に進めます。
最後に「WordPressをインストール」をクリックして少し待ちます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/cf96be47-62c6-f163-eca8-98df870ffd29.png)

無事インストール完了です。
「ログイン」を押して先に進みます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/f8bf0f50-c0ba-344f-3a2e-30714e0246b5.png)

先ほど設定したユーザIDとパスワードでログインします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/87633f64-3c3b-333c-6079-64140976f90a.png)

無事ログイン後、ダッシュボード画面がでました。
新しいWordpressのVersionが出ているときにはまずは更新しましょう(操作画面は割愛)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/b0afca8a-ed8a-29e4-a680-aa03814b692b.png)

いわゆるホームページもちゃんと表示されます。おめでとうございます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/575b2c5b-2036-299b-e8c4-054baad45518.png)

#(option)WordpressのSSL対応
先にApp ServiceをSSL対応にした場合、Wordpressの各種設定やリンクもhttps::... でアクセスさせる(できる)必要があります。

自分はそれほぞWordpressには詳しくないのですが、どうやら「Really Simple SSL」というプラグインを入れると一発解決とのことでした。

Wordpressのダッシュボードから「プラグイン」を選択後、「新規追加」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/7d444eb2-51ea-7986-7486-f44cb6e16fe0.png)

プラグインを追加画面の「キーワード」検索項目に「really simple」と入力すると目的の「Really Simple SSL」が見つかるので、「今すぐインストール」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/4e56171f-40e3-20eb-69a2-7a134ba24ff0.png)

「有効化」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/87414517-04a7-9e34-59b4-ba96f32a57a1.png)

プラグイン画面に戻るので「はい、SSLを有効化します。」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/1e21d5eb-9954-9907-0054-bc3384ce95fe.png)

SSL有効化が完了した旨のメッセージが表示され、既にこちらのダッシュボードがhttpsで接続されていることが確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/72e248c1-07c1-dfba-5810-8ae9c6c49106.png)

ホームページもちゃんとhttpsで表示されます。httpで接続を行っても自動的にhttpsページにリダイレクトされます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/435360df-e77a-e94d-f603-6ddaff304208.png)

#おわりに
Azure上でApp ServiceとAzure Database on MySQLのふたつのサービスだけで、非常に簡単にWordpressサイトが構築できました。
カスタムドメインやhttps接続を行わないのであればさらに手軽にお試しできると思いますので、ぜひ皆さんもお試しするとよいと思います。