2015年5月7日木曜日

既存のWordPressサイトをGoogle App Engineに移行

google-app-engine_wordpressWordPressで作ったホームページをGoogle App Engineに移行したときの覚書。サイトはこちら。

スケジュールはGoogle カレンダーを使ってるし、写真はFacebookページのアルバムを表示しているので、管理画面にログインして何か作業をする必要はない(記事、画像をアップロードしない)。

運用してみて月額1000円以上かかるなら、おとなしくVPSを借りる予定。

環境: Windows 8.1 x64, WordPress 4.2.2

参考サイト

 

目次

  1. Google Cloud SDKをインストール
  2. Google Developers Consoleでプロジェクト作成
  3. Google Cloud SQLにインスタンスを作成
  4. WordPress用のテンプレートをダウンロードして上書き
  5. デプロイ
  6. phpMyAdminをインストール
  7. カスタムドメインの設定
  8. 管理画面にアクセス。GAE用のプラグインを導入。
  9. キャッシュの設定
  10. 費用面などを考慮して今後もGAEを使うか

 


1.Google Cloud SDKをインストール

公式サイトからダウンロード、インストール。

Python 2.7.6 64bitもインストールされた。

Google Cloud SDK Shellを起動。

サインイン
> gcloud auth login

ブラウザで認証完了。

PHP用App Engineパッケージをインストール(更新)。
> gcloud components update gae-python

All components are up to date.

 

 


2.Google Developers Consoleでプロジェクト作成

Google Developers Consoleにアクセスして「プロジェクト作成」

プロジェクト作成後、プロジェクトの概要へ自動で遷移する。

 

 


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

次にWordPressをインストールするデータベースを作成する。

Google Developers Console → ストレージ → Cloud SQL → インスタンスを作成する

インスタンスID: jka-sg: wordpress
地域: アジア 米国
階層: D0 - 128 MB RAM

詳細を開いて料金プランは「パッケージ」を選択。詳しくは公式サイトで。

地域を「米国」にしないとApp Engineから接続できない(プロジェクトを作成するときに地域を「米国データセンター」と選択しているから)。

インスタンス作成後、詳細画面でデータベースを作成。

「アクセス制御」からroot@localhostのバスワードを変更。App Engineからのアクセスは常にroot@localhostになるらしい。

 

 


4.WordPress用のテンプレートをダウンロードして上書き

GAEでWordPressを動かすためのテンプレートがあるのでダウンロードする。

wordpressフォルダを移行するWordPressで置き換える。

wp-config.phpだけテンプレートので上書きして、必要な項目を編集。

app.yamlを編集。「version」はピリオドを使えない。わかりやすい名前にしておく。

application: jka-sg
version: jka-sg-1
runtime: php55
api_version: 1

databasesetup.sqlは削除

 

 


5.デプロイ

Google App Engine Launcherを起動。

File → Add Existing Application...

app.yamlが置いてあるフォルダを選択。

一覧のアプリケーションを選択して「Deploy」

04:37 PM Uploading 547 files and blobs.

プログレスバーがないので進行中なのか心配になる。

Task Managerを見ると「pythonw.exe」がネットワークを使っているので多分これ。

アップロードが終わるとエラーになった。

04:46 PM Uploaded 547 files and blobs.
04:46 PM Compilation starting.
04:47 PM Compilation completed.
04:47 PM Starting deployment.
04:47 PM Rolling back the update.
Error 400: --- begin server output ---

Client Error (400)
The request is invalid for an unspecified reason.
--- end server output ---
2015-05-06 16:47:02 (Process exited with code 1)

You can close this window now.

Google Cloud SQLへの接続かなと調べてみてもわからず。

もう一度「Deploy」してみると今度は成功。

成功するとコンソール画面の計算処理 → App Engine → ダッシュボードに表示される。

「http://jka-sg.appspot.com/」に接続しても真っ白。データベースへの接続は成功しているみたい。失敗すると下記エラーになるはず。

Error establishing a database connection

接続できない場合はCloud SQLのアクセス制御 → 承認の「App Engine アプリケーション ID」に値があるか確認。

(追記)真っ白になってたのはwp-content/object-cache.phpがあって、redisに接続しようとしてたから。削除したら無事表示された。

 

 


6.phpMyAdminをインストール

管理はphpMyAdminで出来ると何かと便利。公式サイトにチュートリアルがあった。

Google App Engineの「モジュール」という機能を使う。

app.yamlの最初はこんな感じになる。

application: jka-sg
version: phpmyadmin-1
module: phpmyadmin
runtime: php55
api_version: 1

デプロイすると「http://phpmyadmin.jka-sg.appspot.com/」へアクセス可能になるはず。

phpMyAdmin-4.4.5-englishを使った。

移行するDBをエクスポート&インポート。

 

 


7.カスタムドメインの設定

計算処理 → App Engine → 設定 → カスタムドメイン

Google Appsに登録済みのドメインでないとSSLは使えないみたい。

エイリアスとして登録してあるドメインも選択肢に出てこなかったので、プライマリで登録してあるドメインでないとダメらしい。

 

 


8.管理画面にアクセス。GAE用のプラグインを導入。

デフォルトで管理画面へはSSLでないとアクセスできないので、app.yamlを編集してデプロイし直す。

#secure: always

メールの送信などをGoogle App Engine向けに最適化してくれるプラグインがあるので導入。

アクティベートすると、このプラグイン内でSSLを強制するコードが書かれているので、管理画面が表示されなくなった。

テーマのfunctions.phpに下記コードを書いて回避。

function func_init() {
    // Disalbe SSL for Google App Engine
    // This will enable by "Google App Engine" plugin.
    add_filter( 'secure_auth_redirect', '__return_false' );
    force_ssl_admin( false );
}
add_action('init', 'func_init');

このプラグインの有効性はよく分からない。

 


9.キャッシュの設定

WordPress用のテンプレートに
wp-content/advanced-cache.php
wp-content/object-cache.php
があって、よろしくキャッシュしてくれそうだったのでこれらをコピーしてデプロイ。

いい感じに速くなった。

 


10.費用面などを考慮して今後もGAEを使うか

メリットとデメリットを考えてみた。

 

<メリット>

  • 表示が速い
  • アクセス過多時の安定感
  • サーバーのメンテナンス不要
  • プロジェクトを編集できるメンバーを簡単に編集できるので複数人で管理しやすい

 

<デメリット>

  • レンタルサーバーより割高
  • httpsを使うためにはGoogle Appsが必須
  • まだGAEのPHP対応はベータ版
  • ファイルを更新するときの技術的な壁

 

料金はGoogle Cloud SQL分だけ。他は無料枠に収まる。

Cloud SQL インスタンスの料金プランを「パッケージ」にした場合は
$0.36 x 30日 = $10.8(月額1,295円)

料金プランを「従量制」にしてバックアップをせず、cron.yamlも削除した(追記:削除ではダメ詳細は後述)場合は
22時間経過した時点で$0.55
で明らかに予算オーバー。

従量制の場合はインスタンスにアクセスがあった場合にだけ1時間単位で課金される。

詳しくは公式サイトを参考に。

 

このサイトは基本変更しないので、キャッシュする時間を24時間にしてみた。

wp-config.phpを編集してデプロイ。

$batcache = [
  'seconds'=>0,
  'max_age'=>24*60*60, // 24 hours
  'debug'=>false
];

 

< 2015/05/21 Modified >
キャッシュの設定をしても思ったように金額が減らないと思ったらcron.yamlを削除してもcronの設定を削除できない。

cron.yamlを編集

cron:

にしてデプロイ。

 

< 2015/05/22 Modified >
まだcronが動いているみたい。コマンドラインで実行してみた。

Google Cloud SDK Shellを起動

まずはSDKのアップデート
C:> gcloud auth login
C:> gcloud components update gae-python

プロジェクトの設定、確認
C:> gcloud config set project jka-sg
C:> gcloud info

プロジェクトのアップデート
C:>appcfg.py update D:\Documents\Projects\dksg\jka_hp\GAE\jka-sg\

cronのアップデート
C:>appcfg.py update_cron D:\Documents\Projects\dksg\jka_hp\GAE\jka-sg\

 

< 2015/06/02 Modified >
1時間1回くらいwp-loginに対してPOSTされていたので、毎日$0.6課金される。WP Google Authenticatorを導入したらこれらのアクセスもなくなった。

これでもう少し様子見。

 

< 2015/06/04 Modified >
それでも1時間に1回くらいはデータベースへのアクセスが発生してしまう。パッケージプランにして毎日$0.36運用の方が断然安いので、GAEを使うと月額1,295円ぐらいかかることが確定。

安いVPS借りて定期バックアップする運用からは抜け出せないのか。。。

 

< Related Posts >

コメントを投稿
Related Posts Plugin for WordPress, Blogger...

Blog Archives