*

GAEでWordPressを動かす

公開日: : 最終更新日:2015/11/05 投稿者: GAE , ,

これは2014年時点での記事になります。
2015年版の記事がありますのでそちらをご参照下さい。
WordPressをGAEで簡単に使う10のステップ

GAEをお使いの皆様こんにちは。
皆様はJava/Pythonで開発しているはと思いますが、今年の5月からGAEでPHPが使えるようになりました。

もともとPHPユーザの私も、GAEでPHPが動かせるという期待を胸に、WordpressをGAE上で動かしてみたいと思います。

WordPressとは、PHPベースのブログ投稿プラットフォームです。オープンソースで、プラグインやスキンを付けたり外したりしてカスタマイズできます。
幸いなことに、Wordpressの設定は、Google DevelopersのRunning WordPress という記事がありましたのでこちらを参考にします。

1. GAE for PHPの準備

まず、2013年10月1日現在、GAEでPHPを動作させるために、Limited Previewの申し込みを行う必要があります。
こちらを申し込み、許可をいただきます。

2. プロジェクトの作成

Google Cloud Consoleから新規のプロジェクトを作成します。

Project name (プロジェクト名)とProject ID (プロジェクトID)は任意ですが、小文字の英数と記号6から30文字以内で入力します。
今回は、プロジェクト名を MyWordpressGae、プロジェクトIDを mywordpressgae のように分かりやすい名前にします。
Project ID と書かれていますが、これはappspot.com のサブドメインで使われます。

appspot.com のサブドメインといえば、Application ID はどこにいったの?と思われると思いますが、Project ID という名称になったのでしょうか。。。

3. DBのインスタンス生成

Datastore を使用したいところですが、Wordpressでは今のところ、Datastoreに対応していない為、今回はCloud SQL を使用します。

Cloud SQL の Instance ID は、プロジェクトID:インスタンス名 の形式で入力します。
プロジェクトIDは固定されているので、任意のインスタンス名だけ入力します。
今回は、wordpress-database という名前を採用しました。
右の青い「Confirm」ボタンで決定し、インスタンスを作成します。

※Cloud SQL を使用する前に、Billing の登録が必要なので事前にクレジットカードの登録を行います。

4. DBのユーザ設定

続いて、先ほど作成したデータベースにアクセスする為のユーザを設定します。
下の画面から、Google APIs Console のGoogle SQL Console > SQL Prompt を開きます。

SQL Prompt にて、以下のクエリを1行ずつ実行します。(必ず1行ずつ実行する)
それぞれ、以下の名前となります。
※Cloud Storageからバケットを追加し、以下のように予め作成したSQLファイルをアップロードし、SQL Promptからバケット名とファイル名を指定してimportすることもできます。(そっちの方が一気にできます)

データベース名: wordpress-database
ユーザ名: wp_user
パスワード: wp_password
[php]
CREATE DATABASE IF NOT EXISTS wordpress-database;
CREATE USER ‘wp_user’ IDENTIFIED BY ‘wp_password’;
GRANT ALL PRIVILEGES ON wordpress-database.* TO ‘wp_user’;
[/php]

5. Wordpressの設定

WordPressの日本語版から最新バージョン(3.6.1)のwordpressをダウンロードして解凍します。
解凍すると wordpress というフォルダが取り出せるので、新規で wordpress-gae フォルダを作成し、それに入れます。

app.yaml、cron.yaml、php.ini を新規で作成し、同様に wordpress-gae に入れます。
また、wp-config-sample.php から wp-config.php を複製します。
ファイル構造は以下のようになります。

wordpress-gae
├ wordpress  ← 解凍したWordpressのフォルダ
│├ index.php
│├ wp-admin
│├ wp-config-sample.php
│├ wp-config.php  ← 上のwp-config-sample.phpをコピーして新規作成
│└ …
├ app.yaml ← 新規作成
├ cron.yaml ← 新規作成
└ php.ini ← 新規作成

新規で作成したファイルを公式のRunning WordPressの通りに書き込みます。
wp-config.php
[php]
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘wordpress-database’);

/** MySQL database username */
define(‘DB_USER’, ‘wp_user’);

/** MySQL database password */
define(‘DB_PASSWORD’, ‘wp_password’)

if(isset($_SERVER[‘SERVER_SOFTWARE’]) && strpos($_SERVER[‘SERVER_SOFTWARE’],’Google App Engine’) !== false) {
define(‘DB_HOST’, ‘:/cloudsql/mywordpressgae:wordpress-database’);
}else{
define(‘DB_HOST’, ‘localhost’);
}
[/php]

DBのユーザ設定で決定した任意のデータベース名とユーザ名とパスワード、プロジェクトIDとインスタンス名、を書き込みます。
app.yaml
[php]
application: mywordpressgae
version: wordpress
runtime: php
api_version: 1
threadsafe: true

handlers:
– url: /(.*\.(htm$|html$|css$|js$))
static_files: wordpress/\1
upload: wordpress/(.*\.(htm$|html$|css$|js$))
application_readable: true

– url: /wp-content/(.*\.(ico$|jpg$|png$|gif$))
static_files: wordpress/wp-content/\1
upload: wordpress/wp-content/(.*\.(ico$|jpg$|png$|gif$))
application_readable: true

– url: /(.*\.(ico$|jpg$|png$|gif$))
static_files: wordpress/\1
upload: wordpress/(.*\.(ico$|jpg$|png$|gif$))

– url: /wp-admin/(.+)
script: wordpress/wp-admin/\1
secure: always

– url: /wp-admin/
script: wordpress/wp-admin/index.php
secure: always

– url: /wp-login.php
script: wordpress/wp-login.php
secure: always

– url: /wp-cron.php
script: wordpress/wp-cron.php
login: admin

– url: /xmlrpc.php
script: wordpress/xmlrpc.php

– url: /wp-comments-post.php
script: wordpress/wp-comments-post.php

– url: /(.+)?/?
script: wordpress/index.php
[/php]
php.ini
[php]
google_app_engine.enable_functions = "php_sapi_name, gc_enabled"
[/php]
cron.yaml
[php]
cron:
– description: wordpress cron tasks
url: /wp-cron.php
schedule: every 2 hours
[/php]

6. Wordpressのデプロイ

準備が整いましたので wordpress-gae をデプロイします。
デプロイするには、Google Developer からSDK for PHP をダウンロードして、以下のコマンドを実行します。
[Python]
> C:\google_appengine\appcfg.py update C:\wordpress-gae
[/Python]
※appcfg.py を実行するために予め、Python実行環境を構築しておく必要があります。
デプロイしたら、http://mywordpressgae.appspot.com/ にアクセスしてアカウントを作成してみましょう。

これでWordpressが動作してすぐに投稿して使えます。

7. Wordpressの画像アップロード機能を有効にする

WordPressが使えるようになって記事を投稿して、画像をアップロードしようとすると以下のエラーが表示されます。
ファイルが空のようです。中身のあるファイルをアップロードしてください。このエラーは php.ini ファイルでアップロードができない設定になっているか、post_max_size が upload_max_filesize よりも小さく設定されているために発生している可能性もあります。
Wordpressのアップロードを有効にするために、以下の手順を踏んでいきます。

まず、Google App Engine for WordPress からプラグインをダウンロードして展開します。
展開した google-app-engine を /wordpress/wp-content/plugins ディレクトリに移動します。

ファイル構造は以下のようになります。
wordpress-gae
├ wordpress
│├ index.php
│├ wp-admin
│├ wp-config.php
│├ wp-content
││ ├ …
││ └ plugin
││  ├ …
││  └ google-app-engine
│└ …
├ app.yaml
├ cron.yaml
└ php.ini

WordPress でアップロードできる(画像)ファイルのサイズ上限を 20MB に設定するため、Wordpress の設定で新規作成した php.ini に2行付け加えます。

※今回は、例ということで20MBにしましたが、理論上GAEは32MBまでアップロードが可能です。
php.ini
[php]
google_app_engine.enable_functions = "php_sapi_name, gc_enabled"

post_max_size = 20M
upload_max_filesize = 20MB
[/php]

WordPress でアップロードしたファイルの保存先が今のところCloud Storageのみ対応ということで、Wordpress 画像アップロード用のストレージを作成します。
Cloud Storage から、NewBucket で新規のバケットを作成します。
バケット名は任意ですが、今回は wp-images-box に設定しました。

バケットを生成すると以下の画面が登場します。
こちらにて、アップロードした画像がリストで確認できます。

次は、Wordpress 管理画面の「プラグイン」のタブを開き、Google App Engine for WordPress を「有効」にします。

続いて、settingを開き、バケット名を、先ほど設定した wp-images-box に設定すると、画像のアップロードが可能になります。

これで画像のアップロードできるようになりました。

このように比較的容易にWordpressをデプロイすることができました。
GAEでWordpressを動かすユーザが増えるかもしれませんね。

関連記事

Search APIの「Faceted Search」を使ってみた

Search API詳細解説シリーズは完結しましたが、2015年2月19日のAppEngine SD

記事を読む

Prediction API入門(後編)

今回はPrediction API on GAE/J みなさん、こんにちは。Prediction

記事を読む

GAE/GOでVideo Intelligence APIを操作してみた!!〜事前準備編〜

先週のGCP Next 17’でGoogleから新しい機械学習APIが発表されました!その名

記事を読む

Search API詳細解説 Part4「Search API 詳細 検索性能編」

Search API詳細解説シリーズ タイトル Part1Search API 概要説明

記事を読む

Search API詳細解説 Part2「Search APIの使い方 登録・削除編」

Search API詳細解説シリーズ タイトル Part1Search API 概要説明

記事を読む

GAEでよくあるエラーの発生原因と対策1

GAE上で動くWebアプリケーションに特有の例外について、弊社での運用の事例からいくつか特徴的なもの

記事を読む

GAE負荷テスト その1「Hello World!」

2011年11月にGAEのプレビューが終わり、早数ヶ月経ちました。 これからGAEでの開発に乗り出

記事を読む

専用Memcacheは共有Memcacheよりも本当に性能が高いのか検証する Part2

前回のGAEの「専用Memcacheは共有Memcacheよりも本当に性能が高いのか検証する」が投稿

記事を読む

AppEngine Security Scan Tool

AppEngine Security Scan Toolが利用出来るようになりました。ついては、GA

記事を読む

Datastoreモデル変更の影響調査

GoogleAppEngine(以下GAEと呼称)に限らず、開発を行なっていると『テーブルの構造を変

記事を読む

PAGE TOP ↑