GAEのスタンダード環境にLaravel5.7をデプロイする

f:id:takuyafujita:20190407064943j:plain

はじめに

GAEのスタンダード環境にLaravel5.7をデプロイしたので、その手順を書いています。基本的に公式ドキュメントを参考に実施しましたがLaravel5.7だと同じように設定できない箇所がありましたので、一部公式と手順が異なります。

公式ドキュメント

cloud.google.com

Laravelプロジェクト作成

Homestead:7.20.0
php:7.2
Laravel Framework:5.7.28

LaravelのプロジェクトはHomesteadを使用して作成しています。また、スタンダード環境で動作させるためにphp7.2を指定しています。同じようにHomesteadでプロジェクトを作成する場合は下記の記事を参考にしてください。php7.2を指定する方法も書いてあります。

takuyafujita.hatenablog.com

GAEデプロイ用のapp.yamlを作成

以下の内容でapp.yamlを作成します。app.yamlはLaravelプロジェクトの直下に格納します。

runtime: php72

env_variables:
  ## Put production environment variables here.
  APP_KEY: YOUR_APP_KEY
  APP_STORAGE: /tmp
  VIEW_COMPILED_PATH: /tmp

APP_KEYを設定

app.yamlのYOUR_APP_KEYを、次のコマンドで生成したアプリケーションキーに置き換えます。

php artisan key:generate --show

LinuxmacOSを使用している場合は、次のコマンドで自動的にapp.yamlが更新できます。

sed -i '' "s#YOUR_APP_KEY#$(php artisan key:generate --show --no-ansi)#" app.yaml

APP_STORAGEを設定

キャッシュを書き込むためのパスをapp.yamlのAPP_STORAGEに設定した「/tmp」に変更します。

bootstrap > app.php を変更

return文の前に以下の内容を追記します。

# [START] Add the following block to `bootstrap/app.php`
/*
|--------------------------------------------------------------------------
| Set Storage Path
|--------------------------------------------------------------------------
|
| This script allows you to override the default storage location used by
| the  application.  You may set the APP_STORAGE environment variable
| in your .env file,  if not set the default location will be used
|
*/
$app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));
# [END]

config > view.php を変更

Compiled View Pathを以下の様に変更します。

/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/

// 削除
// 'compiled' => env(
//     'VIEW_COMPILED_PATH',
//     realpath(storage_path('framework/views'))
// ),

// 追加
'compiled' => storage_path(),

laravel-dump-serverを削除

現状、GAEでlaravel-dump-serverを使用すると下記のエラーになります。

Class 'BeyondCode\DumpServer\DumpServerServiceProvider' not found

Laravel5.7.6以降を使用する場合、composer.jsonからbeyondcode/laravel-dump-serverを削除することで回避できます。未確認ですが、laravel-dump-serverはLaravel5.7.6以降で追加されていますので、5.7.5以下のバージョンを使用しているのであれば対応不要かもしれません。

削除前

    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.5"
    },

削除後

    "require-dev": {
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^2.0",
        "phpunit/phpunit": "^7.5"
    },

削除後はcomposerの更新を忘れずに!

composer update

この問題は下記のissuesが参考になりました。英語だと読むのに苦労しますが情報が多いので助かります!

github.com

GAEにデプロイする

gcloud config set project sample

gcloud app deploy

gcloud app browse

GAEにデプロイした事が無い方は以下の記事に詳細を書いていますので参考にしてください。

takuyafujita.hatenablog.com

デプロイできたか確認

ブラウザが立ち上がり、Laravelがデプロイできました!

f:id:takuyafujita:20190407163027j:plain

まとめ

最初はLaravel5.8で試していたのですが、GAEにデプロイすると様々なエラーが出て時間だけが過ぎてしまっていました。ググってみると5.7でデプロイされている方がいたので5.7で試すとあっさりデプロイできました。何だったんだ今までの苦労は・・・。これも経験ですね。苦労した分、Laravelの画面が表示された時は嬉しかったです。