Google App Engine for PHPにWordPressをインストールする手順
Google App Engineの環境に対してWordPressをインストールして、
サイトの公開を行う全手順についてご紹介します。
このままやるだけで簡単にサイトの公開まで行えるようにご説明しています。
Google App Engineを利用した環境でWordPressの公開ができれば、
急激な負荷上昇時などにも自動的にインスタンスが起動して負荷の調整が行われ、
サイトの安定環境が利用できるような気がした為、
今回WordPressのインストールを検討することにしました。
概要
Google App Engine for PHPにWordPressをインストールする手順
Google App Engine for PHPにWordPressを
インストール(デプロイ)するに当たっては事前に準備が必要です。
事前準備
最初にGoogle App EngineとCludSQL側の準備を行って、
ダウンロードしてきたWordPressに対して接続設定等を行います。
一通り設定が行えたら、ローカル環境で一旦動作の確認を行います。
2014/09/20追記
今回、 Google App Engineで構成する環境は、
すべて1つのアプリケーションに対して有効にしたCloudSQLおよびCloudStorageを利用します。
結果、以下のような構成でご紹介します。
少し構成を変えた配置も利用できますのでご紹介しておきます。
Google App Engineでアプリケーションの作成
Google App Engineで新規にアプリケーションを作成している必要があります。
アプリケーションの作成手順については以下でご紹介しています。
Google App Engineで新規にアプリケーションを作成することで、
一意なアプリケーションIDの取得が行えます。
MySQLデータベース(CloudSQL)の準備
新規アプリケーションの準備ができたら、
次はWordPressをインストールするデータベースを準備します。
Google App Engineで利用するデータベースとして、
CloudSQL(MySQL)が利用されることが多いことと思います。
ここでもCloudSQLの利用を想定してご紹介します。
CloudSQLを利用するための一連の作業を以下でご紹介しています。
MySQLインスタンスの作成、データベースの作成を行うことで、
WordPressのwp-config.phpに対して設定するデータベース接続情報が得られます。
ここではこのように設定したと仮定します。
- データベース名: wddb
- ユーザー名: sandbox_user
- パスワード: XXXXX
ここまで準備ができたら、WordPressに対してGoogle App Engine向けの設定を行います。
WordPressのダウンロード
WordPressのダウンロードは通常WordPress.orgから行えますが、
ここではGitHubより行います。
(注意)
WordPressの中身自体はWordPress.orgからダウンロードしたものと変わらないようですが、
GitHubのGoogle App Engineからダウンロードを行うことで、
wp-config.phpおよび、app.yamlなどがセットでダウンロードできるため作業が簡単です。
以下サイトにアクセスして、WordPressのダウンロードを行います。
Quick Start WordPress for Google App Engine by GoogleCloudPlatform
アクセスしたら[Download for Windows]をクリックします。
※OSは各自の環境で選択ください。
2014/09/15現在のダウンロード先URLは以下です。
ダウンロードが完了し展開すると以下のようなファイルが生成されます。
丸ごとWordPressを含めたファイルが含まれています。
バージョンは「WordPress 4.0-alpha 英語版」です。
ダウンロードしたファイルをCドライブ下などに展開しておきます。
ここでは「 C:\gae_dev\sandbox-wp40jp\wordpress 」に対して展開したものとします。
この「 C:\gae_dev\sandbox-wp40jp 」をGoogle App Engineのアプリケーションフォルダとします。
Google App Engine for WordPressプラグインの配置
WordPressをGoogle App Engineで利用する上では、
Google App Engine独特のファイル制御に対応させるために、
Google App Engine for WordPressプラグインが必要になります。
GitHubからダウンロードしたものには元々このプラグインが導入されています。
もし、よく利用するプラグインがあるような場合には、
この時点でpluginsディレクトリに対してプラグインファイルを配置しておくといいでしょう。
WordPressのGoogle App Engine向けの設定
WordPressをGoogle App Engine上で動かすには、
Google App Engineの流儀に合わせて設定を行う必要がありますが、
GitHubからダウンロードしたものは設定がほぼ済んでいます。
wp-config.phpファイルの準備
wp-config.phpファイルが既に生成された状態になっていて、
ローカル環境とサーバー環境の切り替えが自動で行えるように記述されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
<?php /** * The base configurations of the WordPress. * * This file has the following configurations: MySQL settings, Table Prefix, * Secret Keys, WordPress Language, and ABSPATH. You can find more information * by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing * wp-config.php} Codex page. You can get the MySQL settings from your web host. * * This file is used by the wp-config.php creation script during the * installation. You don't have to use the web site, you can just copy this file * to "wp-config.php" and fill in the values. * * @package WordPress */ // Required for batcache use define('WP_CACHE', true); // ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wordpress_db'); /** MySQL database username */ define('DB_USER', 'root'); if (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) { /** Live environment Cloud SQL login and SITE_URL info */ define('DB_HOST', ':/cloudsql/your-project-id:wordpress'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); } else { /** Local environment MySQL login info */ define('DB_HOST', '127.0.0.1'); define('DB_USER', 'root'); define('DB_PASSWORD', 'password'); } // Determine HTTP or HTTPS, then set WP_SITEURL and WP_HOME if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) { $protocol_to_use = 'https://'; } else { $protocol_to_use = 'http://'; } define( 'WP_SITEURL', $protocol_to_use . $_SERVER['HTTP_HOST']); define( 'WP_HOME', $protocol_to_use . $_SERVER['HTTP_HOST']); /** Database Charset to use in creating database tables. */ define('DB_CHARSET', 'utf8'); /** The Database Collate type. Don't change this if in doubt. */ define('DB_COLLATE', ''); /**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); /**#@-*/ /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each a unique * prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_'; /** * WordPress Localized Language, defaults to English. * * Change this to localize WordPress. A corresponding MO file for the chosen * language must be installed to wp-content/languages. For example, install * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German * language support. */ define('WPLANG', ''); /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. */ define('WP_DEBUG', false); /* That's all, stop editing! Happy blogging. */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/wordpress/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php'); // configures batcache $batcache = [ 'seconds'=>0, 'max_age'=>30*60, // 30 minutes 'debug'=>false ]; |
このwp-config.phpを元にしてデータベースの接続情報を以下のように設定します。
設定が以下のような場合の設定例です。
- データベース名: wddb
- ユーザー名: sandbox_user
- パスワード: XXXXX
データベースのホスト名はGoogle Cloud SQLインスタンスを作成した際の、
インスタンスIDを指定します。
インスタンスIDが「sandbox-rensrv:YYYYY」である場合には、
- データベースホスト名: ’:/cloudsql/sandbox-rensrv:YYYYYY’ とします。
インスタンスIDの確認はDeveloperConsoleのCloudSQLにて確認できます。
設定した例は、以下のようになります。
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define('DB_NAME', 'wddb'); /** MySQL database username */ // define('DB_USER', 'root'); if (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'],'Google App Engine') !== false) { /** Live environment Cloud SQL login and SITE_URL info */ define('DB_HOST', ':/cloudsql/sandbox-rensrv:YYYYYY'); define('DB_USER', 'sandbox_user'); define('DB_PASSWORD', 'XXXXX'); } else { /** Local environment MySQL login info */ define('DB_HOST', 'localhost'); define('DB_USER', 'sandbox_user'); define('DB_PASSWORD', 'XXXXX'); |
※34,35,36行目の設定はローカル環境のMySQLの接続情報を設定します。
またデータベース名はこの記述の場合はCloudSQLと同名のデータベースをローカルに作成します。
ローカル環境にMySQLのインストールが必要になりますので、
インストールしていない場合には、以下を参考にインストールをしておきます。
以下はGoogle App Engineに限ったことではありませんが、
一意のユニークキーをhttps://api.wordpress.org/secret-key/1.1/salt/ に
アクセスし取得したらそのまま貼りつけます。
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
/**#@+ * Authentication Unique Keys and Salts. * * Change these to different unique phrases! * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service} * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again. * * @since 2.6.0 */ define('AUTH_KEY', 't7nG<[X&>{|VTDK*b{j%hoHR3s[+ 2(W)%x;:D3<<B_Do9d0Hy_d=u:A_`9R$sXG'); define('SECURE_AUTH_KEY', ':<3Avdp*s Y;~{&wy0x5]Dt2@iWzj(m7NubKGDQ_dE6}lVwR:DEi6,>C/Pe+p_N<'); define('LOGGED_IN_KEY', 'iNz&m;hCN :|4lH=+RS6U^YyKSGl.E![f]TN),ia^?:4FjR_2k=C,#m8;(FbMY3!'); define('NONCE_KEY', 'eYrivVF/9gBKd~uq-7F-sy.T&B0z8BM(|I@[NKMpdclJ(lXO*B{)N|Nn~er0lhQV'); define('AUTH_SALT', '}(6S^Um:7yd1pU%q>WvK:3h;{P7rMnX ;(8P0Wl2R.~jBps)xJ6uNQZ <lW$BNJu'); define('SECURE_AUTH_SALT', '`:a*HbOhQv MxiiPKH./Mqrkr77P{Ym#+ow5%dW}<y&6@JDHT1SzRlH;Nz=Qzb(C'); define('LOGGED_IN_SALT', 'AX-|xE;i~6T#(0w(OS2zu5._|%nU_$W}8C&-R^!|w<](Y5LT1f;y.P9:=}GMP%S,'); define('NONCE_SALT', '-P6=m%*LDJ?H9(3jW*wH7`g()kk[l7!/@,fw92z8d]sB6>C^Ka;u+I[y|-)9[7e/'); /**#@-*/ /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each a unique * prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wp_'; /** * WordPress Localized Language, defaults to English. * * Change this to localize WordPress. A corresponding MO file for the chosen * language must be installed to wp-content/languages. For example, install * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German * language support. */ define('WPLANG', ''); /** * For developers: WordPress debugging mode. * * Change this to true to enable the display of notices during development. * It is strongly recommended that plugin and theme developers use WP_DEBUG * in their development environments. */ define('WP_DEBUG', false); /* That's all, stop editing! Happy blogging. */ /** Absolute path to the WordPress directory. */ if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/wordpress/'); /** Sets up WordPress vars and included files. */ require_once(ABSPATH . 'wp-settings.php'); // configures batcache $batcache = [ 'seconds'=>0, 'max_age'=>30*60, // 30 minutes 'debug'=>false ]; |
WP3.9からWP4.0日本語版へ変更
ダウンロードしてきたWordPressは「WordPress 4.0-alpha 英語版」です。
これを日本語化するに当たっては、私は以下のような手順で行いました。
WordPress4.0日本語版をWordPress.orgよりダウンロードしてきて、
「wordpress\wp-content\languages」フォルダをそのままコピーして配置しました。
次にwp-config.phpに対して以下の1行を挿入しました。
57 58 59 60 61 62 63 |
/** The Database Collate type. Don't change this if in doubt. */ define('DB_COLLATE', ''); define('WPLANG', 'ja'); /**#@+ * 認証用ユニークキー |
WordPress4.0以降はこの設定は原則不要で言語選択による導入が実装されています。
(参考)
しかしながら、 Google App Engineで[一般設定]を更新すると、
言語が英語に戻されてしまう症状に出会いました。
その為、言語ファイルの手動実装とwp-config.phpの言語指定を記載しました。
app.yamlファイルの編集
Google App Engine Launcherによって作成されたapp.yamlファイルを、
テキストエディタで開き確認します。
1行目の「your-project-id」に対して、
Google App Engineで作成したアプリケーションID(プロジェクトID)に変更します。
2行目のversionは変更してもしなくても構いませんが、
最初に好きな分かりやすい名前に変更しておくといいでしょう。
このversionを変更すると、過去のアプリケーションを公開したまま、
新しいバージョンのアプリケーションをアップロードし、
動作確認をして切り替えることができるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
application: your-project-id version: wpfromstarterproject runtime: php api_version: 1 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-(.+).php script: wordpress/wp-\1.php - url: /(.+)?/? script: wordpress/index.php |
なお、このGitHubからダウンロードしてきたapp.yamlであれば、
特に他の部分を編集することなくWordPressが動作することが確認できましたが、
詳しく知りたい方は、以下が参考になります。
Configuring with app.yaml – PHP — Google Developers (英語)
php.ini ファイルの確認
通常は手動でphp.iniファイルを用意するのですが、
アプリケーションディレクトリに対して、php.iniファイルが既に作成されています。
これは特に変更する必要はありません。
1 2 3 |
google_app_engine.enable_functions = "php_sapi_name, gc_enabled" allow_url_include = "1" upload_max_filesize = 8M |
cron.yaml ファイルの確認
通常は手動でcron.yamlファイルを用意するのですが、
アプリケーションディレクトリに対して、cron.yamlファイルも既に作成されています。
これは特に変更する必要はありません。
1 2 3 4 |
cron: - description: wordpress cron tasks url: /wp-cron.php schedule: every 2 hours |
一通り、ファイルの準備ができたら、ローカル環境で動作の確認を行います。
ローカル環境で実行
デプロイする前にまずローカル環境での実行を確認します。
ローカル環境で実行してWordPressの動作を確認するには、
MySQLデータベースがインストールされており、
wp-config.phpに指定したローカル側のホスト名(例:localhost)、
データベース名、ユーザー名、パスワードで接続が可能である必要があります。
「Google App Engine Launcher」を起動してアプリケーションを登録します。
[File]-[Add Existing Application…]を選択します。
アプリケーションの追加時にはWordPressを展開した、
「 C:\gae_dev\sandbox-wp40jp 」を指定して[Add]をクリックします。
アプリケーションの一覧に対してアプリケーションが追加されます。
アプリケーションが追加されたら追加されたアプリを選択し[Run]をクリックします。
一覧のアイコンが緑に変わったら[Browse]をクリックしてサイトを表示します。
WordPressのローカルインストール
サイトが表示されおなじみのWordPressインストールが開始されます。
インストール完了
ログイン
ダッシュボード表示
ダッシュボード表示が行われたら、パーマリンク設定などの一連の設定変更を試します。
ローカル環境で実際に投稿をおこなったりして表示の確認を行います。
ローカル環境であれば特に問題なく動作の確認が行えると思います。
WordPressのデプロイ
では動作確認が終わったところでサイトをデプロイ(アップロード)します。
「Google App Engine Launcher」でアプリを選択した状態で[Deploy]をクリックします。
Googleアカウント(特に変更がない場合)を入力してログインします。
すぐにログインされ、Google App Engine Launcherコンソール上に
デプロイ(アップロード)の状況が表示されます。
表示にエラーメッセージなどが表示されていないことを確認し、
閉じていいよというメッセージが表示されればデプロイは完了です。
You can close this window now.
デプロイが完了して、Google App Engine アプリケーションOverView を開き、
アプリケーション一覧を確認すると、ステータスが[Running]表示になっています。
[Running]横のポップアップアイコンをクリックすることでサイトの表示が行えます。
Google App Engine環境で実行
サイトを表示するとおなじみのインストール開始画面が表示されます。
WordPressのGoogle App Engine環境インストール
インストール画面が表示されたら通常通りインストールを行います。
インストール完了
ログイン
ダッシュボード表示
ダッシュボード表示が行われたら、パーマリンク設定などの一連の設定変更を試します。
パーマリンク設定の設定タグの修正
パーマリンク設定を行った際には選択したURL形式のタグに対して、
「/index.php/」が挿入された形で設定がされてしまう場合があります。
この場合はカスタム設定のURL形式部分で「/index.php/」を削除することで対応が行えます。
サイトURLの固定表示化
なお、 Google App Engine環境に対してGitHub上のWordPressをインストールすると、
サイトのアドレスはトップ固定になります(編集不可)
サイトの言語選択肢の表示乱れ
言語ファイルを追加でインストールしていますが、
wp-config.phpに対して、define(‘WPLANG’, ‘ja’); の記述がない場合には、
一般設定を保存したタイミングで英語表記に戻されてしまいました。
define(‘WPLANG’, ‘ja’); を記述した状態でも以下のような表示がされてしまいました。
画像アップロードエラーに対する対応
Google App Engine for PHPではファイル管理の仕組みが通常のWordPressとは異なっており、
バケットというファイル保存領域を利用します。
その為「Google App Engine for WordPress」プラグインが有効ではない場合には、
以下のようにエラーとなります。
なお、「Google App Engine for WordPress」プラグインの設定と、
バケットの指定方法については以下でご紹介しています。
プラグインの設定を行うと問題なく画像ファイルがアップロードできるようになります。
このようにして、Google App Engine 上でWordPressをホストして、
サイトを公開することができます。
その他のエラー例
なお、WordPressの設置過程でCloudSQLを採用しているかと思いますので、
課金情報の登録は済ませていることと思います。
課金情報を登録している場合には以下のエラーには出会わないと思いますが、
WordPressを設置したアプリケーション(プロジェクト)と、
CloudSQLを有効化したプロジェクトが異なっている場合には、
以下のようなエラーに遭遇する場合もあるかもしれません。
サイトのデプロイを何度も繰り返して表示確認を行っていると、
サイトの表示が反映されないと感じることもあるかと思います。
サイトの表示が反映されない場合には以下を試すといいでしょう。
さいごに
今回、このGoogle App Engine for PHPにWordPressをインストールを行った際に、
様々なサイトを拝見いたしました。
結果、書いてある通りやってみてもうまくいかなかったりと大変苦労をしました。
その結果、英語版ではありましたが、
Quick Start WordPress for Google App Engine by GoogleCloudPlatform で、
公開されていたWordPressを利用して日本語化する方法が、
一番安定してインストールが行えることが分かりました。
非常に長い投稿になってしまいましたが、
手順を踏んでインストールすることで、問題なく利用ができるようになると思います。
WordPress for Google App Engine を検討されている方のお力になれれば幸いです。
参考
書いてあるまんまで私にはうまく導入することができませんでしたが、
Google App Engineの基本的な流儀を学ぶ上で参考にさせて頂きました。
大変助かりました。ありがとうございます。
Blog @vierjp : 29.Google App Engine for PHPでWordPressを動かしてみた
takahara氏にはいつもお世話になっています。
Google App Engine (GAE)でPHPもMySqlを使えるようになったことでWrodPressが使えるよw …
Google™はGoogle Inc. の登録商標(第4478963号及び第4906016号)です。
GoogleロゴはGoogle Inc. の国際登録商標です。
国際登録番号:881006及び926052及び1086299及び1091990及び1145934
公開日:
最終更新日:2014/09/20