Google App EngineでWordPressを安くスケーラブルに運用


前回の記事では、月に1万円超かかる構成になってしまったので、
flexible environment (FE)を使わずにstandard environment (SE)を使うことにしました。
SEだと、1日あたり28h未満のインスタンス稼働であれば永久に無料です。

FEとSEの違いはこちらの記事が非常に詳しいです。
要は、制限つきでも動くものならSEで十分かなと思います、wordpressとか。

1. git cloneする

今回の場合も、googleがサンプルを用意してくれてますので、これを利用。
https://github.com/GoogleCloudPlatform/appengine-php-wordpress-starter-project
しかしながら、このサンプルはかなり前からメンテされてないので、readmeに従いつつもちょっとずつ修正します。

2. 必要なSDKなどをインストール

ここからSDKなどインストールできますが、後のところでreadmeのコマンドが動かないものがあったので、よくわからない初心者は(わたしです)ポチポチできるGUIをインストールしましょう。

macなら

gcloud components install app-engine-php

すると app engineのコマンドが使えるようになるはずですが、不明な場合は
Or, you can download the original App Engine SDK for PHP. をクリックすると、簡素なアプリケーションのインストールパッケージが入手できます。

あとはmysqlをローカルにインストールしましょう。GCPも使える状態にしておきます。前回記事をご参照。

3. cloud SQLの準備

前回記事と同様に、cloud SQLを作成します。
f1-microにすると月額900円くらいで収まります。SLA?どうなんでしょう…

4. cloneしたファイルの修正

自分の環境で使えるようにするために、以下のような修正を行います。
まず、cloneしたレポジトリ内に入ったところにあるwp-config.phpですが

        define('DB_NAME', 'wordpress_db');
        define('DB_HOST', ':/cloudsql/[your-project]:[region]:[instance-name]');
        define('DB_USER', '[database-user-name]');
        define('DB_PASSWORD', '[database-password]');

Databaseに接続するところを↑のように修正します。
cloud SQLのインスタンスを作成したregionとインスタンス名、また、インスタンス内に作成したdbの名前や設定になります。

次に、app.yamlで

automatic_scaling:
  min_idle_instances: automatic
  max_idle_instances: 1        
  min_pending_latency: 3000ms
  max_pending_latency: automatic

のように修正します。これをやらないと、ちょっとトラフィックが来るとすぐスケールしてしまって無料枠を超えてしまうので。

5. Storageの有効化

さらに、wordpressで画像をアップロードする場所になるbucketを使うためにちょっと作業が必要です。
まず、GCPのコンソールで「IAMと管理 > サービスアカウント」に行って、サービスアカウントを発行します。
これは、何かのシステムがいろいろGCP上のリソースをいじるときの権限を決めるものです。
今回は、wordpressからバケットをいじらせたいので、バケットをいじる権限をつけます。今回は管理者でもいいでしょう。
Screen Shot 2017-04-15 at 19.41.28
で、作成したときに「鍵を生成しますか?」という項目があるので、JSONにチェックを入れて作成をクリック。
すると、このアカウント用の鍵情報が入ったjsonがダウンロードされると思います。
そのサービスアカウントJSONファイルをどこかセキュアな場所に配置したら、先程のwp-config.phpにて

    if ( !defined('ABSPATH') )
        define('ABSPATH', dirname(__FILE__) . '/wordpress/');

    putenv('GOOGLE_APPLICATION_CREDENTIALS=' . ABSPATH . 'wp-admin/bucket-service-account.json');

のように編集します。wordpressが起動するときに環境変数としてサービスアカウントの情報を渡してます。
あとは、
https://ja.wordpress.org/plugins/gcs/
からプラグインをダウンロードして、wp-content/plugins/に配置すればWPのコンソール上からアクティベートできます。

6. デプロイ!

まず、move_files_after_editing.sh を叩きます。中でファイルの配置とかをしてくれます。
ここまで来たら準備完了、さきほどインストールしたgoogle app engineのGUIアプリを起動します。
Screen Shot 2017-04-15 at 19.46.27
画面の左下の + を押すと、デプロイしたいアプリ情報が聞かれます。
Application IDの欄にはプロジェクト名を入力、ポートはデフォルトのままで。
先程のapp.yamlがあるディレクトリパスを指定して、okを押すとコンソール上に登録されます。

ここまでできたら、deployをクリック。ミスなどがなければapp engine上に展開されるはずです。
https://[project id].appspot.com/
にアクセスして起動を確認!

Databaseの中身や、今までの画像の取扱については、前回記事と同様に配置すればokです。

安くスケーラブル

このブログはすでにGAE上で動いてます!!今のところ無料!
アカウント作成後1年間は300ドル分の無料枠が使えるので、cloud SQLの月額900円は無料枠で吸収できます。(来年からはややかかる)

まあVPSの方がなんだかんだ楽だと思いますが、最新のアーキテクチャを使ってる楽しみがあります。
VPSだと一台にDBからアプリまで全載せですが、DBとインスタンス別の構成の方が明らかに強い。
あとは、オートスケーリングのメリットを享受できるようバズる記事を書くことですね…

追記

なぜかわからないがWordpressからDBにアクセスできなくなったので、いったんVPS環境に切り戻し。
うーん、なぜだ…

シェアする

  • このエントリーをはてなブックマークに追加

フォローする