*

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

CREATE DATABASE IF NOT EXISTS wordpress-database;
CREATE USER 'wp_user' IDENTIFIED BY 'wp_password';
GRANT ALL PRIVILEGES ON wordpress-database.* TO 'wp_user';

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

/** 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');
}

DBのユーザ設定で決定した任意のデータベース名とユーザ名とパスワード、プロジェクトIDとインスタンス名、を書き込みます。
app.yaml

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.ini

google_app_engine.enable_functions = "php_sapi_name, gc_enabled"

cron.yaml

cron:
- description: wordpress cron tasks
  url: /wp-cron.php
  schedule: every 2 hours

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

google_app_engine.enable_functions = "php_sapi_name, gc_enabled"

post_max_size = 20M
upload_max_filesize = 20MB

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

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

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

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

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

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

関連記事

1つのエンティティにプロパティをいくつまで作れるか

1つのエンティティにプロパティをいくつまで作れるか 1つのエンティティにプロパティをいくつまで

記事を読む

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

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

記事を読む

東京リージョン内でのGAE・GCS・GCE間の通信はこのくらいだった

11月8日に Google Cloud Platform にて待ちに待った日本リージョンがリ

記事を読む

GCP愛を語る

RGCP(GCP好き以外お断り) 技術的な話ばかりの中のAdventCalendarですが、本

記事を読む

たった1つのCloud SQLインスタンスで複数のWordPressを動かす

皆様こんにちは。 前回はCloudSQLやCloud Storageを用いてWordpress

記事を読む

Search API詳細解説 Part3「Search APIの使い方 検索編」

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

記事を読む

GAE/JからBigQueryへのStream Insert

今回はGAE/JからBigQueryへのStream Insertを試してみます。 BigQuer

記事を読む

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

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

記事を読む

GAリリース記念!!今更だけどGAE Flexible Environmentのチュートリアルを試してみた!

GAE Flexible Environment(以下FE)のGA(General Availa

記事を読む

Cloud Loggingの利用方法

はじめに 本記事はGoogle Cloud Platformの公式ページで公開されている「Goog

記事を読む

PAGE TOP ↑