GoogleAppEngine/StandardでWordpressサイトを構築
- 表題の通り、今更感ありますが、GoogleAppEngine/StandardでWordpressサイトを構築する方法です。案外、phpインストール周りで手こずったので自分のメモとしてまとめておきます。
- 正直構築とか面倒なのでdocker-wordpressでやりたいが、gae standardだとできない...(Flexならできるでしょうけど)
- Wordpressの構築だけでなく、便利そうなコマンド(
hub
とかgibo
とか)もいれています。 - 作業環境はmac(mojave)です。
準備
hubコマンド
-
brewで
hub
をinstallbrew install hub
- github操作をコマンドラインから簡単にできるコマンド。便利です。
-
hubにgithubアカウントを設定する
hub
- アカウント情報を対話形式で聞かれるのでよしなに入力。本題ではないので、詳細は参考サイトをみてください。
-
hubコマンドのテストのためにリポジトリを作ってみる。
hogehoge
はアカウント名なので自分のアカウントに変更してください。$ mkdir gae_wordpress_example $ cd gae_wordpress_example $ git init $ hub create -p hogehoge/gae_wordpress_example https://github.com/hogehoge/gae_wordpress_example
-
表示されたURLをブラウザで開いてみると、リポジトリができてますね。
open https://github.com/hogehoge/gae_wordpress_example
gcp設定
-
gcloud
コマンドをcomponentsをupdateする。gcloud components update
-
gcloud
コマンドをアカウント認証する。gcloud auth login アカウント名
- ブラウザが開いてgoogleアカウントに認証とかが出ますのでよしなに済ませる。
-
projectを作成する。
$ gcloud projects create gae-wordpress-example
-
projectを切り替える。
$ gcloud config set project gae-wordpress-example Updated property [core/project].
cloud sqlにwordpress用のinstanceを用意
- gae se on wordprssの公式の手順に従ってやってみる。
- Run WordPress on Google App Engine standard environment | Run WordPress on Google App Engine standard environment | Google Cloud Platform Community | Google Cloud
- ただし上記の手順はregion/zoneが指定されていないので、東京や大阪で使いたい場合はregionを指定する。
-
wordpress用のcloud sqlインスタンスを作成する。
$ gcloud sql instances create wordpress001 \ --activation-policy=ALWAYS \ --tier=db-n1-standard-1 \ --region=asia-northeast1
- インスタンス名に
001
とつけているのは、今後増やした時に同じ名前にならないようにするため。 -
region
とzone
のオプションは同時には指定できない。大抵はregion
だけでいい。 -
db-n1-standard-1
は普通のwordprssを動かすには問題ない性能ですが、練習で立ち上げたりするにはオーバースペックです。料金も月で$64
ぐらいかかるので、最初はdb-f1-micro
(月$10程度)でもいい。あと練習のために構築してるだけなら、忘れずに停止or削除しておきましょう。
- インスタンス名に
-
wordpress用のdatabasesを作成する。
$ gcloud sql databases create wordpress --instance wordpress001 Creating Cloud SQL database...done. Created database [wordpress]. instance: wordpress001 name: wordpress project: gae-wordpress-example
-
作ったデータベースにpasswordを設定する。
gcloud sql users set-password root \ --host=% \ --instance wordpress \ --password=YOUR_INSTANCE_ROOT_PASSWORD
- パスワードは必ずランダムなものを設定するようにしましょう。練習だから適当でいいか、と推測可能なものをつけてしまって止め忘れて侵入されるなどはよくある話。たとえ練習でも簡単に推測不可能な文字列を入れる習慣をつけてください。大した手間じゃないです。
php動作環境の用意
-
anyenvをインストール
$ git clone https://github.com/riywo/anyenv ~/.anyenv $ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile $ exec $SHELL -l
- ここは
anyenv
でなくともphpenv
でもいいのですが、phpenv
はrbenv
と併用した時に競合して正常に動作しなかったりするため、anyenv
でいれておいた方がいいです。
- ここは
-
phpをインストール
$ brew install bison re2c libxml2 libjpeg libpng icu4c libzip autoconf automake $ echo 'export PATH="/usr/local/opt/bison/bin:$PATH"' >> ~/.bash_profile $ exec $SHELL -l $ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / $ phpenv install 7.2.22
- mac(mojave)で普通にphpenvでinstallしようとすると色々エラーが出るので、先にその解決をしています。
-
composerで必要なtoolをインストール
composer require google/cloud-tools
wordpressを用意
-
gibo
コマンドでgitignoreファイルを作っておく。gibo dump vim Wordpress > .gitignore echo "vendor" >> .gitignore
- 意図しないファイルをリポジトリにアップしてしまわないようにgitignoreは先に作っておきます。
-
gae用のwordpressパッケージをインストール
php vendor/bin/wp-gae create
- dbの情報とかregionとか対話形式で入力してください。
gaeにdeploy
-
deployの前に
my-wordress-project/app.yaml
に以下の設定を追加します。automatic_scaling: min_instances: 0 max_instances: 1
- 初期設定では
automatic_scaling
のmax_instances
の設定がありませんが、これは少々危険です。gaeインスタンスはmax_isntances
の設定がない場合、アクセス数に応じて際限なくインスタンスを増やす可能性があります。特にテストの場合はmax_instances
は1
、min_instances
は0
とすべきです。 - ただ今回の場合だとminを
0
にしても、cronで定期的にアクセスがあるため起動台数は常に1
となります。
- 初期設定では
-
deployする。
$ gcloud app deploy app.yaml cron.yaml -v 1 You are creating an app for project [gae-wordpress-example].
-
-v
は必ずつけましょう。省略した場合、タイムスタンプがversion名になりますが、これは削除しない限り残るので、deployするたびにinstanceが増えていくことになります。同じversion名を指定した場合は、インスタンスは上書きされます。
-
-
deployが成功したらすぐにブラウザでアクセスしてwordpressのログイン設定をします。
$ gcloud app browse Opening [https://gae-wordpress-example.appspot.com] in a new tab in your default browser.
- 初期設定されていないwordpressは勝手に設定されてしまう危険があるので、deploy後は速やかに設定を行う。
-
deployされているか確認します。
$ gcloud app versions list --service=default SERVICE VERSION TRAFFIC_SPLIT LAST_DEPLOYED SERVING_STATUS default 1 1.00 2019-09-17T01:41:47+09:00 SERVING
GoogleCloudStorageの設定
- wordpressからメディアをアップロードする時に、google cloud storageにアップロードできる設定をしておきます。
-
GCSバケットを設定。
YOUR_PROJECT_ID.appspot.com
はデフォルトです。PROJECT IDは書き換えて以下のコマンドを実行。$ gsutil defacl ch -u AllUsers:R gs://YOUR_PROJECT_ID.appspot.com
- プラグイン設定ページで、指定したバケット名を入力します。
projectの削除
- 必要なければgaeインスタンスは削除しておきたいところですが、gaeのdefaultサービス(1つしかgaeサービスがない場合はdefaultになります)は削除できません。削除したいならprojectごと消すしかない。また、
cron.yaml
を見るとわかりますが、wordpressのcron実行のために15分毎にcron endpointにアクセスしているためインスタンス台数も1から下がりません。 - ですので、必要ない場合はprojectごと削除します。
- この辺りはgcp、何とかして欲しい...
-
sqlインスタンスを停止する。
gcloud sql instances patch wordpress001 --activation-policy NEVER
-
projectを削除する。
gcloud projects delete gae-wordpress-example
終わりに
- gcpが公式の手順を公開してくれているので簡単にできました。
- このままだと再現性に乏しい(手作業)なので、circleciとかにあとでしておきたい。
- 独自ドメインにしてSSLも設定しておきたい。
- さらに言えばgae seやめてdocker使いたい...