Google App Engine で静的ウェブサイト + PHPスクリプトをホスティングする

このページでは、Google App Engine で静的ウェブサイト + PHPスクリプトをホスティングする手順・例を説明します。

注意

  • 静的サイトに一部 PHP スクリプトファイルがあるような構成の企業・団体などの小規模ウェブサイト(ホームページ)を想定しています。
  • PHP のバージョンは 7.2 です。

0. 準備

  • Google Cloud SDK をあらかじめインストールし、gcloud コマンドが使用できるようにしてください。
  • Google Cloud Console でプロジェクトを作成しておいてください。(例: example)

1. サイトの作成

通常のサイト作成の手順と同じように HTML, CSS, JavaScript, 画像, PHP スクリプトファイルなどを含むファイル一式を用意します。

(例)

  • 📁 example
    • 📁 css
      • 📄 style.css
    • 📁 js
      • 📄 script.js
    • 📁 img
      • 📄 test.jpg
    • 📁 contact
      • 📄 index.html
      • 📄 mailform.php
    • 📄 index.html

※ 例では PHP スクリプトファイルは contact/mailform.php です。

補足

本題とは少し話がそれますが、Google App Engine + PHP 7.2 の場合は Mail API が提供されておらず、Google App Engine + PHP 5.5 で使用できた mail()google\appengine\api\mail\Message を使用したメール送信ができません。代わりに Mailjet や SendGrid を使用してください。

2. app.yaml の作成

サイトフォルダ (1 の例だと 📁 example) 直下に app.yaml を作成し、下記のように記載します。

runtime: php72

handlers:
# ルートにアクセスされた時、index.html を表示
- url: /
  static_files: index.html
  upload: index.html
  secure: always

# 下層フォルダ自体にアクセスされた時、各フォルダの index.html を表示
- url: /(.+)/$
  static_files: \1/index.html
  upload: .+/index\.html$
  secure: always

# 静的ファイル
- url: /(.+\.(html|css|js|gif|png|jpg))$
  static_files: \1
  upload: .+\.(html|css|js|gif|png|jpg)$
  secure: always

# 上記以外は index.php
- url: .*
  script: auto
  secure: always

runtime: php72 の場合は、静的ファイル以外のアクセスはすべてサイトフォルダ直下の index.php に引き継がれます。

3. index.php の作成

サイトフォルダ (1 の例だと 📁 example) 直下に index.php を作成し、下記のように必要な PHP スクリプトを読み込み・実行できるようにします。

<?php
// リクエスト URI のパス部分から、必要なスクリプトを読み込みます。
switch (@parse_url($_SERVER['REQUEST_URI'])['path']) {
    // 例
    case '/contact/mailform.php':
        require 'contact/mailform.php';
        break;

    // 上記以外は 404
    default:
        http_response_code(404);
        exit('Not Found');
}

4. デプロイ

コマンドプロンプト等でサイトフォルダの位置に移動したのち、gcloud app deploy --project プロジェクト名 (例の場合 gcloud app deploy --project example) を実行し、ファイルをアップロードします。

5. 確認

コマンドプロンプト等でサイトフォルダの位置に移動したのち、gcloud app browse --project=プロジェクト名 (例の場合 gcloud app browse --project=example) で実際の動作を確認し、問題なければ完了です。

参考