3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPress on GAEのチュートリアルをやってみた件

Last updated at Posted at 2019-07-16

なぜやったのか

元々はさくらのVPSの安価なプランにWordPressを乗っけてサービスを運用していましたが、

アクセス数の急増により、プラン変更かサーバー移行の選択を迫られました。

なるべく無停止かつ安全にスケーリングしたいので、GCPのApp Engine(以下、GAE)を採用しました。

(さくらのVPSだとインスタンスを停止しないとプラン変更できない)

対象となる人

WordPressをGAE Flexible乗せたい人

GAEに乗せたものの、画像アップロードに失敗する人

やること

GAEにWordPressを載せる

やらないこと

スケーリングの設定

前提条件

プロジェクトの準備

Google Cloud SDKの初期設定を行います。適切なプロジェクトとアカウントを設定します。

$ gcloud init

プロジェクト内にApp Engineアプリケーションを作成します。

$ gcloud app create

WordPressから上げたファイルや画像を保存できるようにGCSバケットの設定をします。

$ gsutil defacl ch -u AllUsers:R gs://YOUR_PROJECT_ID.appspot.com

Cloud SQLインスタンス作成

記事やサイト情報を保存するためのDBはCloud SQLです。

ここでは wpをリソース名に使用していきます。

Cloud SQLの第2世代インスタンスを作成します。

パスワードは強固なものにしましょう。

$ gcloud sql users set-password root --host=% \
  --instance wp --password=YOUR_INSTANCE_ROOT_PASSWORD

このMySQLインスタンスにアクセスするには、Cloud SQL Proxyを使用します。

Cloud SQL Proxyのインストール方法は少し複雑ですのでここでは参考URLだけとし、割愛させて頂きます。

「プロキシを使用して外部アプリケーションから接続する」1. ~ 4.を行ってください。

プロキシを実行しましょう。

鍵を作成していない場合は -credential_fileオプションは不要です。

$ ./cloud_sql_proxy \
  -dir /tmp/cloudsql \
    -instances=YOUR_PROJECT_ID:us-central1:wp=tcp:3306 \
      -credential_file=PATH_TO_YOUR_SERVICE_ACCOUNT_JSON_FILE

プロキシが実行されると、ローカルでMySQLサーバー立てた時と同じようにアクセスができるようになります。

$ mysql -h 127.0.0.1 -u root -p
couldn't connect to "~": ensure that the account has access to "~" (and make sure there's no typo in that name). Error during createEphemeral for ~ googleapi: Error 403: The client is not authorized to make this request., notAuthorized
^C2019/07/08 10:38:34 Received TERM signal. Waiting up to 0s before terminating.

こういったエラーが出る場合は、認証情報の作成が上手く出来ていない可能性がありますので、見直してみましょう。

それでは、WordPressのデータベースを作成しましょう。

mysql> create database wp;
mysql> create user 'wp'@'%' identified by 'PASSWORD'; // Don't use this password!
mysql> grant all on wp.* to 'wp'@'%';
mysql> exit

コマンドラインツールの使い方

App Engine FlexibleにWordPressを乗せる為のコマンドラインツールが公式で配布されていますので、こちらを使っていきます。

リポジトリのクローンをします。

$ git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git

WordPressのサンプルの場所まで移動します。

$ cd php-docs-samples/appengine/flexible/wordpress

Composerで必要なライブラリをインストールします。

$ composer install

GAE用に変換してくれるスクリプトがあるので、自身の環境のパラメータを併せ込んで実行します。

$ php wordpress.php setup -n \
    --dir=./wordpress-project \
    --db_instance=wp \
    --db_name=wp \
    --db_user=wp \
    --project_id=[YOUR_PROJECT_ID] \
    --db_password=[YOUR_DATABASE_PASSWORD]

変換が完了したら、WordPressプロジェクトディレクトリに移動します。

$ cd wordpress-project

さあ、いよいよデプロイです。5~10分ほど時間が掛かりますので、ティーでも嗜みながら待ちましょう。

$ gcloud app deploy \
    --promote --stop-previous-version app.yaml cron.yaml

デプロイが完了すると、実際にアクセスできるようになっています。

https://[YOUR_PROJECT_ID].appspot.com

これでGAEにWordPressを乗っけることができました。やったね!

よ〜し、画像もアップロードしてイケイケな記事を書くぞ〜〜〜〜。

スクリーンショット 2019-07-08 14.30.47.png

Unable to create directory wp-content/uploads/2019/07. Is its parent directory writable by the server?

なん・・・だと・・・。画像がアップロードできない。

実はこれ、GCPの公式チュートリアルには載っておらずコマンドラインツールのREADME.mdに書いてあります。

Go to the Dashboard at https://PROJECT_ID.appspot.com/wp-admin. On the Plugins page, activate the following plugins:

GCS media plugin
After activating the plugins, try uploading a media object in a new post and confirm the image is uploaded to the GCS bucket by visiting the Google Cloud console's Storage page.

WordPressの管理画面に行って「GCS media plugin」を有効化と設定をする必要あります。

スクリーンショット 2019-07-08 14.35.48.png

Google Cloud Storage pluginを有効化し、設定をしていきます。

スクリーンショット 2019-07-08 14.36.44.png

Bucket name for media upload にGCSバケットの名前を入力し、保存すればオッケーです!

まとめ

GAEを使うことによって、インフラの知識が無くても、簡単かつ安全にスケーリングできるWordPressサイトを作成出来ます。

今回、スケーリングの詳細設定は行いませんでしたが、ある程度のスパイクが来てもGAEの自動スケーリングが対処してくれます。

良いことづくめですね!GCP万歳!!

参考文献

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?