2014年2月9日日曜日

[GAE/PHP] GAEでWordpressを動かす

Wordpressと縁のある昨今です。
今更ながら、Google App EngineでWordpressを動かしてみたいと思います。

Wordpressは、サーバとPHPとMySQLが揃っていれば動作しますが、Google App Engineでは、MySQLの代わりにGoogle Cloud SQLを使用します。また、Wordpressに画像をアップロードするときには、Wordpressフォルダ上に入れることができないので、Google Cloud Storageを使います。

1.プロジェクト作成とWordpressダウンロード

こちらにて、プロジェクトを作成してください。
https://cloud.google.com/console/project
Project IDは、my-wordpress-page にします。



続いて、こちらをダウンロードして展開してください。
http://ja.wordpress.org/latest-ja.zip


projectという名前を付けた新しいフォルダに、展開したwordpressを移して、app.yaml、cron.yaml、php.iniを新規作成します。
app.yaml、cron.yaml、php.iniには、それぞれ以下のように記述します。

【app.yaml】
application: my-wordpress-page
version: 0-1-0
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

applicationは、先ほど作成したProject IDのmy-wordpress-pageと書き換えます。
versionとは、このプロジェクトのversionです。今回は、バージョンを0-1-0にしました。
runtimeはphpを、api_versionは1に設定します。
handlersは、Javaでいうとweb.xmlに記載されたwebページのルーティング方法なので、今回はいじりません。

【php.ini】
google_app_engine.enable_functions = "php_sapi_name, gc_enabled"
Google App Engineでphpを有効にします。これはその通りに書いてください。

【cron.yaml】
cron:
- description: wordpress cron tasks
url: /wp-cron.php
schedule: every 2 hours/wp-cron.phpを2時間毎に実行するようにcronを記述します。
これもこの通りに書いてください。

2. Google Cloud SQLインスタンスの生成

Google Cloud SQLは、プロジェクトにクレジットカードを登録して課金を有効にしないと使えませんので、有効にしてください。(使い方にもよりますが、私は月2000円はいかない程度です。また、設定はいつでも変更できます。課金の設定はこちらから)


左のメニューからCloud SQLを選択して、NEW INSTANCEでCloud SQLインスタンスを生成します。


CloudSQLインスタンスのInstance IDは、my-wordpress-page : ins-wordpressにします。
Project IDであるmy-wordpress-pageは既に決まっているので、ins-wordpressのみ書き入れます。
Billing Planですが、あまりアクセスがないのならPer Userで良いですが、頻繁にアクセスが有ると考えられる場合は、Packageの方が割安でしょう。
最後に右側のConfirmボタンでインスタンスを作成します。


インスタンスが生成されました。

3. Google Cloud SQLインスタンスにデータベースを作成

WordpressがGoogle Cloud SQLのデータベースにアクセスできるようにします。
予め、データベース名、データベースにアクセスする用のユーザ名、そのユーザのパスワードを決めておきます。
データベース名:wp-database
ユーザ名:devuser
パスワード:mypasswordpress

これをSQL文に書き写します。
【create.sql】
CREATE DATABASE IF NOT EXISTS wp-database;
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'mypasswordpress';
GRANT ALL PRIVILEGES ON wp-database.* TO 'devuser';
データベースとユーザを作成して、アクセス権限を付与させます。

続いて、Google Cloud Storageを有効にします。こちらも課金しないと使えないので課金を有効にしておいてください。今回、Google Cloud Storageを使用する理由は、Wordpressには直接関係ありませんが、上で作成したSQLファイルをアップロードしてCloud SQLインスタンスにインポートする為に必要です。ですので、Storageを有効にしてください。(インポートが完了したら無効にしてもかまいません)



Google Developer Consoleの左のメニューから、Cloud Storageを選択し、NEW BUCKETという赤いボタンをクリックします。New Bucketというウィンドウが表示されますのでバケット名(今回は、wp-backet)を入力してcreateし、新しく作成したバケットを開きます。


UploadからFIlesを選択します。


データベース生成用のSQLファイルがアップロードできました。


Cloud SQLの画面に戻り、my-wordpress-page : ins-wordpressを開きます。画面上側に import... があるので、クリックします。Import Dataといウィンドウが表示されますので、Google Storage Pathをgs://先ほど作成したバケット名wp-backet/先ほど作成したcreate.sqlにして、OKを押します。


Operationsから先ほどのSQLインポートの結果が確認できます。
Import from gs://wp-backet/create.sql succeeded.

4. Wordpress側でデータベースの設定

Google SQLの方は、準備が整いましたので、Wordpress側でデータベースの設定を行います。
wordpress/wp-config.phpを開いて、先ほど設定したID等に書き換えます。
Project ID:my-wordpress-page
インスタンス名:ins-wordpress
データベース名:wp-database
ユーザ名:devuser
パスワード:mypasswordpress

【create.sql】
/** WordPress のためのデータベース名 */
define('DB_NAME', 'wp-database');
/** MySQL データベースのユーザー名 */
define('DB_USER', 'devuser');
/** MySQL データベースのパスワード */
define('DB_PASSWORD', 'mypasswordpress');
/** MySQL のホスト名 */
define('DB_HOST', ':/cloudsql/my-wordpress-page:ins-wordpress');

注意するべきところは、MySQLのホスト名です。
Google Cloud SQLでは、:/cloudsql/my-wordpress-page:ins-wordpress という書き方をします。
また、インスタンス名とデータベース名を混同しないようにしてください。(データベース接続エラーと表示されます。)

5. デプロイして確認

いよいよデプロイ(アップロード)します。SDK for PHP からappcfgツールをダウンロードしてきてください。
デプロイコマンドは、
appcfg.py update project/
projectフォルダはwordpressが入っているフォルダ名となります。
appcfg.pyがありません等言われた場合は、フルパスで入れてください。それと、pythonで動きますので、pythonを使えるようにインストールしておきましょう。

http://my-wordpress-page.appspot.com/にアクセスすると、Wordpressが確認できました。

0 件のコメント:

コメントを投稿