GAE Standard の PHP7環境の話です。
サービスの分割
GAEでLaravelを動かしていますが、そこにブログの機能を追加したい要望が出ました。
その際、/blog
のサブディレクトリで動かすことが条件でした。
Laravelのpublicフォルダ下にWordPressを設置することもできますが、メンテナンスも考えて今回は分離して運用します。
GAEはサービスという単位でディレクトリごとに復数のプロダクトを動かすことができます。
以下のドキュメントが詳しいです。
dispatch.yaml 構成ファイル | App Engine スタンダード環境での PHP 7.2 に関するドキュメント
ドキュメントに従い、dispatch.yamlを以下のように記述し、デプロイしました。
これで、wpというservice名でblog配下を配信できる準備ができました。
1 2 3
| dispatch: - url: "*/blog*" service: wp
|
WordPressプロジェクトのダウンロード
以下のドキュメントに従い、ダウンロード、インストールしていきます。手順通り実行すれば、GAEで動作するように設定されたWordPressがダウンロードされます。
このドキュメントはルート直下にインストールすることを前提にしているのでダウンロード後に設定を変えます。
Run WordPress on Google App Engine standard environment
wp-config.phpの修正
まず、wp-config.php
です。サイトのURLとホームを/blog
ありにします。
1 2 3 4 5 6 7 8 9
| define('WP_SITEURL', $protocol_to_use . HTTP_HOST); define('WP_HOME', $protocol_to_use . HTTP_HOST);
↓
define('WP_SITEURL', $protocol_to_use . HTTP_HOST. '/blog/'); define('WP_HOME', $protocol_to_use . HTTP_HOST. '/blog/');
|
gae-app.phpの修正
次にgae-app.php
を修正します。GAEで動かした際にまずこのファイルにアクセスが割り振られます。
このWordPressはURL的には/blog
配下ですが、サービス的にはルート直下にインストールされるので、その差を修正します。
1 2 3 4 5 6 7 8
| $file = get_real_file_to_load($_SERVER['REQUEST_URI']);
↓
$uri = preg_replace('/\/blog/', '', $_SERVER['REQUEST_URI'], 1); $file = get_real_file_to_load($uri);
|
app.yamlの修正
最後にapp.yaml
を以下のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
runtime: php72
service: wp
entrypoint: serve gae-app.php
handlers: - url: /blog/(.*\.(htm|html|css|js)) static_files: \1 upload: .*\.(htm|html|css|js)$
- url: /blog/wp-content/(.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg)) static_files: wp-content/\1 upload: wp-content/.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg)$
- url: /blog/(.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg)) static_files: \1 upload: .*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg)$
- url: /blog/wp-includes/images/media/(.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg)) static_files: wp-includes/images/media/\1 upload: wp-includes/images/media/.*\.(ico|jpg|jpeg|png|gif|woff|ttf|otf|eot|svg)$
|
デプロイ
あとはドキュメントどおり、 gcloud app deploy app.yaml cron.yaml
すればOKでした。
余談ですが、Laravel側でWordPressの記事を表示したいとの要望があり、その連携はAPIを作って、連携しています。