GoogleAppEngine/StandardでWordpressサイトを構築

Posted by roadman on Wednesday, September 18, 2019

TOC

  • 表題の通り、今更感ありますが、GoogleAppEngine/StandardでWordpressサイトを構築する方法です。案外、phpインストール周りで手こずったので自分のメモとしてまとめておきます。
  • 正直構築とか面倒なのでdocker-wordpressでやりたいが、gae standardだとできない…(Flexならできるでしょうけど)
  • Wordpressの構築だけでなく、便利そうなコマンド(hubとかgiboとか)もいれています。
  • 作業環境はmac(mojave)です。

準備

hubコマンド

  1. brewでhubをinstall

    brew install hub
    
  2. hubにgithubアカウントを設定する

    hub
    
    • アカウント情報を対話形式で聞かれるのでよしなに入力。本題ではないので、詳細は参考サイトをみてください。
  3. 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
    
  4. 表示されたURLをブラウザで開いてみると、リポジトリができてますね。

    open https://github.com/hogehoge/gae_wordpress_example
    

gcp設定

  1. gcloudコマンドをcomponentsをupdateする。

    gcloud components update
    
  2. gcloudコマンドをアカウント認証する。

    gcloud auth login アカウント名
    
    • ブラウザが開いてgoogleアカウントに認証とかが出ますのでよしなに済ませる。
  3. projectを作成する。

    $ gcloud projects create gae-wordpress-example
    
  4. projectを切り替える。

    $ gcloud config set project gae-wordpress-example
    Updated property [core/project].
    

cloud sqlにwordpress用のinstanceを用意

  1. wordpress用のcloud sqlインスタンスを作成する。

    $ gcloud sql instances create wordpress001 \
     --activation-policy=ALWAYS \
     --tier=db-n1-standard-1 \
     --region=asia-northeast1
    
    • インスタンス名に001とつけているのは、今後増やした時に同じ名前にならないようにするため。
    • regionzoneのオプションは同時には指定できない。大抵はregionだけでいい。
    • db-n1-standard-1は普通のwordprssを動かすには問題ない性能ですが、練習で立ち上げたりするにはオーバースペックです。料金も月で$64ぐらいかかるので、最初はdb-f1-micro(月$10程度)でもいい。あと練習のために構築してるだけなら、忘れずに停止or削除しておきましょう。
  2. 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
    
  3. 作ったデータベースにpasswordを設定する。

    gcloud sql users set-password root \
     --host=% \
     --instance wordpress \
     --password=YOUR_INSTANCE_ROOT_PASSWORD
    
    • パスワードは必ずランダムなものを設定するようにしましょう。練習だから適当でいいか、と推測可能なものをつけてしまって止め忘れて侵入されるなどはよくある話。たとえ練習でも簡単に推測不可能な文字列を入れる習慣をつけてください。大した手間じゃないです。

php動作環境の用意

  1. 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でもいいのですが、phpenvrbenvと併用した時に競合して正常に動作しなかったりするため、anyenvでいれておいた方がいいです。
  2. 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
    
  3. composerで必要なtoolをインストール

    composer require google/cloud-tools
    

wordpressを用意

  1. giboコマンドでgitignoreファイルを作っておく。

    gibo dump vim Wordpress > .gitignore
    echo "vendor" >> .gitignore
    
    • 意図しないファイルをリポジトリにアップしてしまわないようにgitignoreは先に作っておきます。
  2. gae用のwordpressパッケージをインストール

    php vendor/bin/wp-gae create
    
    • dbの情報とかregionとか対話形式で入力してください。

gaeにdeploy

  1. deployの前にmy-wordress-project/app.yamlに以下の設定を追加します。

     automatic_scaling:
       min_instances: 0
       max_instances: 1
    
    • 初期設定ではautomatic_scalingmax_instancesの設定がありませんが、これは少々危険です。gaeインスタンスはmax_isntancesの設定がない場合、アクセス数に応じて際限なくインスタンスを増やす可能性があります。特にテストの場合はmax_instances1min_instances0とすべきです。
    • ただ今回の場合だとminを0にしても、cronで定期的にアクセスがあるため起動台数は常に1となります。
  2. 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名を指定した場合は、インスタンスは上書きされます。
  3. deployが成功したらすぐにブラウザでアクセスしてwordpressのログイン設定をします。

    $ gcloud app browse
    Opening [https://gae-wordpress-example.appspot.com] in a new tab in your default browser.
    
    • 初期設定されていないwordpressは勝手に設定されてしまう危険があるので、deploy後は速やかに設定を行う。
  4. 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にアップロードできる設定をしておきます。
  1. 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、何とかして欲しい…
  1. sqlインスタンスを停止する。

    gcloud sql instances patch wordpress001 --activation-policy NEVER
    
  2. projectを削除する。

    gcloud projects delete gae-wordpress-example
    

終わりに

  • gcpが公式の手順を公開してくれているので簡単にできました。
  • このままだと再現性に乏しい(手作業)なので、circleciとかにあとでしておきたい。
  • 独自ドメインにしてSSLも設定しておきたい。
  • さらに言えばgae seやめてdocker使いたい…