Azure WebアプリでWordPressサイトを構築する

Azure Webアプリ(Web Apps)でWordPressサイトを構築する方法を説明いたします。

本格的な運用に耐えうるWebサイトの構築を目指すため下記を利用します。

  • App Service プランは「STANDARD」を利用。
  • データベースは有料のClearDBを利用。
  • ストレージはAzure BLOBを利用。
  • コンテンツ配信はAzure CDNを利用。
  • 永続的なデータベース接続を利用。

今回は、通常のWordPressを構築し、プログラムを書き換える方法で実現します。

前準備

まず、下記を準備します。準備方法は別途説明します。

  • Azureサブスクリプションの利用制限を解除する。
  • Azureストレージを作成する。
  • Azure CDNを構築する。
  • メール配信サービスのSendGridを構築する。
  • App Service プランの「STANDARD」を作成する。
  • ClearDB(MySQL)を作成する。

また、WordPressの管理ページやサイトの表示は指定があるまで接続しないようにしてください。

WordPressを作成する

AzureでWordPressを作成します。

AzureサイトでWordPressを作成する

Azureポータルにログインします。

Azure Webアプリを新規作成

左下の「+新規」をクリックします。
コンピューティング、WEBアプリ、ギャラリーからの順にクリックします。

Azure WordPressを選択

Microsoft Azure 向けアプリの検索で「CMS」をクリックし、下部の「WordPress」をクリックし、右下の「→」をクリックします。

Azure WordPressを構成

アプリケーションの構成で以下を設定します。
URL欄に、URLを設定します。
データベース欄で、「既存のMySQLデータベースを使用します」を選択します。
WEBSCALEGROUP欄で、App Service プランで作成したSTANDARDプランを選択します。
他の項目は今回は設定しません。(作成後に変更が可能です)
注意点としては、作成後にリソースグループを変更するのが難しいため、最初にWEBSCALEGROUPを指定します。

Azure WordPressのMySQLを選択

既存のMySQLデータベースで以下を設定します。
データベースで作成した有料のClearDBを選択します。
左下の同意をチェックします。
右下のチェックマークをクリックします。

作成完了まで数十秒かかります。

Webアプリを設定する

各種Webアプリを設定します。ここからはAzureプレビューポータルにログインして行います。(Azureポータルでも同じことが可能です。)

FTPなどの認証で利用するパスワードを設定する

Azure Web Appsを選択

メニューでWeb Appsブレードを開き対象のWordPressサイトをクリックします。

Azure Web Apps デプロイ資格情報の設定

Web アプリの設定ブレードで、デプロイ資格情報を選択します。
デプロイ資格情報の設定ブレードで、FTP/デプロイ ユーザー名とパスワード を入力し、保存をクリックします。

アプリケーションを設定する

Azure Web Apps アプリケーションの設定

Web アプリの設定ブレードで、アプリケーション設定を選択します。
アプリケーションの設定ブレードで下記を設定します。その他の項目は初期値のまま変更しないこととします。

PHPバージョン

WordPressが利用するプログラム言語のPHPのバージョンを指定する項目です。
最新の「5.6」を選択します。
執筆時点(2015年秋)時点で最新の5.6は、以前のバージョンと比べ大幅なセキュリティ向上やパフォーマンス向上をしているため、可能な限りPHP 5.6を選択した方が良いでしょう。

プラットフォーム

WordPressが稼働するAzure Webサーバーが32bit環境で動作するか64bit環境で動作するかを指定する項目です。
パフォーマンスが高い「64bit」環境を設定します。

常時接続

WordPressが常にWebサーバーのメモリに読み込まれた状態にするかを指定する項目です。
「オン」に設定します。
常時接続がオフの場合、WordPressへの接続がしばらく無いとWebサーバーのメモリからアンロードします。これによりシステム側はメモリなどのリソースを節約できます。
ただし、再度接続があった場合にメモリに読み込む処理が発生してしまうため、それだけホームページの閲覧者は待たされることになります。
この待ち時間を減らすため、常時接続を「オン」に設定します。

保存をクリックします。

FTPでソースをダウンロードする

WinScpなどのFTPソフトでWordPressのソースをダウンロードします。

FTPの情報を設定する

Azure Web Apps FTP情報

転送プロトコル

転送プロトコルは、「FTP」「暗黙のTLS/SSL 暗号化」を設定します。
上記設定によりFTPS転送プロトコルとなり、情報のやりとりを暗号化し、セキュリティ上安全になります。

ホスト名

Webアプリブレードの「FTPS ホスト名」を設定します。

ユーザー名

Webアプリブレードの「FTP/デプロイメント ユーザー名」を設定します。

パスワード

デプロイ資格情報で設定したパスワードを設定します。

リモートディレクトリ

WordPressをインストールしたWebサーバーのディレクトリは、「/site/wwwroot」となります。

FTPでWordPressのソースをダウンロードする

前述の設定でFTPを接続し、Webサーバーの「/site/wwwroot」以下をダウンロードします。
ダウンロードしたファイルを編集し、WordPressを設定します。

WordPressのソース「wp-config.php」を変更する

WordPressのソースを変更する必要性があります。ファイル名はWebサーバーの「/site/wwwroot」以下のパスを記載します。また行数は位置の目安となります。

wp-config.php

認証用ユニークキーを設定する

50行目の認証用ユニークキーを、WordPress.orgの秘密鍵サービスを開いて表示した値を貼り付けてください。
セキュリティーに関わる部分となりますので、必ず、サイトごとにWordPress.orgの秘密鍵サービスで生成した値を設定してください。(サイトごとに値を変える必要があります。)

データベーステーブルの接頭辞を設定する

67行目の「$table_prefix = ‘wp_’;」を「$table_prefix = ‘(サイト名)’;」に変更します。
「(サイト名)」の部分はサイト名など、管理しているサイトで一意になるようにします。
「$table_prefix」は一つのMySQLデータベースを複数サイトで利用する場合、データベースの中で他のサイトと区別できるようにするための設定値です。複数サイトを利用している場合は必ず一意の名前になるように設定します。同じ「$table_prefix」を設定すると、参照するデータベースの中身が同じになってしまい、別々のサイトなのに同じ値を表示するなど不具合が発生します。

ステージング環境を利用するためのURLを設定する

Azureステージング環境を利用するため、URLを自動で判定するコードを最初のコメント欄下に追加します。
define(‘WP_HOME’, ‘http://’.$_SERVER[‘HTTP_HOST’]);
define(‘WP_SITEURL’, ‘http://’.$_SERVER[‘HTTP_HOST’]);
このコードを追加しないと、本番環境とステージング環境で同じURLを参照してしまい、ステージング環境が正常に動作しなくなります。

ただし、設定 > 一般設定 の「WordPress アドレス (URL)」と「サイトアドレス (URL)」の編集ができなくなります。

WordPressの自動バージョンアップを抑止する

WordPressの自動バージョンアップを抑止するコードを最初のコメント欄下に追加します。
define ( ‘WP_AUTO_UPDATE_CORE’, false );
WordPressのバージョンアップで不具合などが発生する場合があります。また、今回設定する内容が上書きされてしまう可能性もあるため、バージョンアップは確認しながら手動で行うように変更します。

FTPでソースをアップロードする

WinScpなどのFTPソフトでWordPressのソースをダウンロードします。

アップロード対象のソースは下記になります。

  • wp-config.php

WordPressのインストールと更新

WordPressをインストールする

WordPress管理ページの表示

サイトURLは、Azure Webアプリのダッシュボードの右側中段くらいにある「URL」となります。
サイト管理ページのURLは、インストールしたサイトURLに「/wp-admin/」を追加したURLとなります。
管理ページURLを開くと、WordPressインストール設定ページを表示しますので、必要な項目を設定ください。


Azure WordPressインストール

サイト名

WordPressサイトに表示するサイト名を設定します。インストール後に変更可能です。

ユーザー名

WordPressサイトの管理ページにログインするユーザー名を設定します。インストール後にユーザーを追加することが可能です。

パスワード

ユーザー名のパスワードを設定します。

メールアドレス

メインの管理者のメールアドレスを設定します。インストール後に変更可能です。

プライバシー

チェックをOFFにします。チェックをOFFにすることで検索エンジンに表示しないようになります。
まだ、ページなどを作成していないため最初はOFFにし、サイトが出来上がった後にONに変更します。

これでWordPressのインストールが完了しました。

WordPressを更新する

サイト管理ページにログインし、WordPressを更新します。

更新ページの表示

左メニューの ダッシュボード で 更新 をクリックし、更新ページを開きます。
更新がある場合は、「更新 2」のような表示があります。

WordPressの更新

Azure WordPressアップデート

WordPressの新しいバージョンがある場合は図のように「WordPress の新しいバージョンがあります。」と表示があります。
「WordPress x.x.x-ja」という末尾が「ja」の下にある「いますぐ更新」をクリックし、バージョンアップします。

プラグインの更新

Azure WordPressプラグインの更新

プラグインの新しいバージョンがある場合はプラグイン欄に表示があります。
更新するプラグインを選択し、「プラグインを更新」をクリックします。

テーマの更新

テーマの新しいバージョンがある場合はテーマ欄に表示があります。
更新するテーマを選択し、「テーマの更新」をクリックします。

FTPでWordPressのソースをダウンロードする

更新が完了したら、前述の設定でFTPを接続し、Webサーバーの「/site/wwwroot」以下をダウンロードし、最新のファイルに更新します。

WordPressのソースを変更する

WordPressのソースを変更する必要性があります。ファイル名はWebサーバーの「/site/wwwroot」以下のパスを記載します。また行数は位置の目安となります。

wp-settings.php

利用する日時を日本標準時に変更する

43行目の「date_default_timezone_set( ‘UTC’ );」を「date_default_timezone_set( ‘Asia/Tokyo’ );」に変更します。
WordPressが表示などに利用する時刻を「日本標準時」に設定します。
ここを変更しないと、ブログなどの日時を表示する部分で日本標準時と異なる日時を表示してしまいます。

wp-includes\wp-db.php

データベースとの接続を常時接続でオープンするように変更する

1452行目の「mysqli_real_connect」を下記に変更します。
if ( WP_DEBUG ) { mysqli_real_connect( $this->dbh, ‘p:’ . $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags ); } else { @mysqli_real_connect( $this->dbh, ‘p:’ . $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags ); }

データベースとの接続を常時接続でオープンするように変更する

1482行目の「mysql_connect」を下記に変更します。
ただし、「mysql_connect」は PHP 5.5.0 で非推奨となっているため、変更の可能性が高いです。
if ( WP_DEBUG ) { $this->dbh = mysql_pconnect( $this->dbhost, $this->dbuser, $this->dbpassword, $client_flags ); } else { $this->dbh = @mysql_pconnect( $this->dbhost, $this->dbuser, $this->dbpassword, $client_flags ); }

FTPでソースをアップロードする

WinScpなどのFTPソフトでWordPressのソースをダウンロードします。

アップロード対象のソースは下記になります。

  • wp-settings.php
  • wp-includes\wp-db.php

WordPress メディアを設定する

Azure BLOB コンテナーを作成する

Azure BLOBの選択

Azureプレビューポータルのメニューでストレージアカウントを選択し、対象のストレージアカウントを選択します。
ストレージアカウントブレードで、コンテナーをクリックします。
BLOBサービスブレードで、コンテナーをクリックします。


Azure BLOB コンテナーの作成

コンテナブレードで、左上の「+追加」をクリックします。
新しいコンテナーブレードで、名前を入力し、アクセスの種類に「コンテナー」を選択し、下部の「作成」をクリックします。


Azure ストレージアカウントのキー

ストレージアカウントブレードに戻り、右上の鍵マークをクリックします。
キーの管理ブレードで、ストレージ アカウント名 と、プライマリ アクセス キー を書き留めておきます。後ほど、WordPressの設定で利用します。

WordPressで利用するBLOBコンテナーの作成が完了しました。

WordPress イメージフォルダを設定する

WordPress イメージフォルダの場所を変更する

Azure WordPress イメージフォルダの変更

サイトの画像をアップロードするフォルダをルート直下の「images」フォルダ(例:http://xxxx/images/)に変更します。(他のフォルダ名にする場合は「images」を変更したいフォルダ名に置き換えてください。)
ブラウザでインストールしたサイトURLに「/wp-admin/options.php」を追加したURL(例:http://xxxx/wp-admin/options.php)を開きます。
すべての設定ページ で、「upload_path」欄に「images」を入力し、「upload_url_path」欄は空白にします。(upload_pathには、ルート以下のパスを設定します。)
画面下部の 変更を保存 をクリックします。

WordPress メディア設定を変更する

Azure WordPress メディアの設定

サイト管理ページ、左メニューの設定でメディアをクリックします。
先ほど設定した「upload_path」と「upload_url_path」は以後ここに表示するようになります。
「アップロードしたファイルを年月ベースのフォルダに整理」のチェックをOFFににし、画面下部の「変更を保存」をクリックします。

WordPressプラグイン「Windows Azure Storage for WordPress」をインストールする

Azure WordPress Azure用プラグインのインストール

サイト管理ページ、左メニューのプラグインで新規追加をクリックします。
プラグインを追加ページの右上にある検索ボックスに「Windows Azure Storage for WordPress」を入力し、Enterキーを押し検索します。
検索結果の「Windows Azure Storage for WordPress」欄にある「今すぐインストール」をクリックし、インストールします。


Azure WordPress Azure用プラグインの有効化

プラグインのインストールが完了したら、プラグインを有効化をクリックします。


Azure WordPress Azure用プラグインのストレージアカウント設定

プラグインを設定します。
左メニューの設定で Windows Azure をクリックします。
Windows Azure Storage for WordPress ページで、「Store Account Name」欄に先ほど取得した「ストレージ アカウント名」を入力し、「Primary Access Key」欄に「プライマリ アクセス キー」を入力し、画面下部の「変更を保存」をクリックします。


Azure WordPress Azure用プラグインのコンテナー設定

設定を保存後、「Default Storage Container」欄に作成したコンテナーを選択します。
「Use Windows Azure Storage for default upload」欄のチェックをONにし、画面下部の「変更を保存」をクリックします。

「Use Windows Azure Storage for default upload」をチェックすることで、画像などをWordPressにアップロードした場合、常に指定した Azure BLOBコンテナー にファイルを格納します。

Windows Azure Storage for WordPress のインストールが完了しました。

上記手順により、Azure の WordPress を利用できるようになりました。


アプリ開発・Web開発のグッドテック(GoodTech) 白井理一朗 がお届けしました。 http://goodtech.co.jp/


皆様のご意見をお待ちしております。