GAEのスタンダード環境にLaravel5.7をデプロイする
はじめに
GAEのスタンダード環境にLaravel5.7をデプロイしたので、その手順を書いています。基本的に公式ドキュメントを参考に実施しましたがLaravel5.7だと同じように設定できない箇所がありましたので、一部公式と手順が異なります。
公式ドキュメント
Laravelプロジェクト作成
Homestead:7.20.0 php:7.2 Laravel Framework:5.7.28
LaravelのプロジェクトはHomesteadを使用して作成しています。また、スタンダード環境で動作させるためにphp7.2を指定しています。同じようにHomesteadでプロジェクトを作成する場合は下記の記事を参考にしてください。php7.2を指定する方法も書いてあります。
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
Linux、macOSを使用している場合は、次のコマンドで自動的に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が参考になりました。英語だと読むのに苦労しますが情報が多いので助かります!
GAEにデプロイする
gcloud config set project sample gcloud app deploy gcloud app browse
GAEにデプロイした事が無い方は以下の記事に詳細を書いていますので参考にしてください。
デプロイできたか確認
ブラウザが立ち上がり、Laravelがデプロイできました!
まとめ
最初はLaravel5.8で試していたのですが、GAEにデプロイすると様々なエラーが出て時間だけが過ぎてしまっていました。ググってみると5.7でデプロイされている方がいたので5.7で試すとあっさりデプロイできました。何だったんだ今までの苦労は・・・。これも経験ですね。苦労した分、Laravelの画面が表示された時は嬉しかったです。