この記事では、ローカル環境でLaravel 10のアプリを作成して、そのアプリをGCPのApp Engineにデプロイするまでの手順を解説していきます。
開発環境
- macOS Venture 13.2.1
- Laravel 10.15.0
- PHP 8.1.21
ローカルでLaravel 10のアプリを作成
まずは、ローカル環境でLaravelのアプリを作成します。ターミナルで以下のコマンドを実行してください。
curl -s "https://laravel.build/example-app" | bash
今回のローカルはDocker環境にするためLaravel Sailを使います。上記のコマンドでLaravelのアプリを作成したら、そのアプリのルートディレクトリに移動して、以下のコマンドを実行してください。
./vendor/bin/sail up
これでローカルでLaravelのアプリが立ち上がるはずです。http://localhost にアクセスして以下のような画面が表示されていればOKです。
GCPの新しいプロジェクトを作成
次はLaravelのアプリをデプロイするためのGCPの新しいプロジェクトを作成していきます。
まずは、Google Cloudのサイトを開いて、右上のコンソールをクリックしてください。
コンソールの画面を開いたら、画面の左上にあるプロジェクトを選択するプルダウンをクリックして、新しいプロジェクトを選択します。
何か好きなプロジェクト名をつけて「作成」をクリックします。今回は「test」という名前をつけます。
App Engineのアプリケーションを作成
では、次にLaravelのアプリをデプロイするApp Engineの設定をしていきます。
まずは、GCPの管理画面を開いて、画面の左上にあるナビゲーションメニューをクリックします。
※作業中のプロジェクトがLaravelのアプリをデプロイするためのプロジェクトになっていることも確認してくださいね。
すると画面の左側にメニューが表示されるので、「プロダクトとソリューション」の「すべてのプロダクト」を選択してください。
すべてのプロダクトの画面が表示されたら、画面を下にスクロールしていくと、サーバーレスのところにApp Engineの項目があるので、App Engineのピンのマークをクリックしてください。
これでメニューバーにApp Engineが表示されるようになります。
ここまでできたら、メニューバーのApp Engineのところにある「ダッシュボード」を選択してください。
ダッシュボードを開いたら「アプリケーションを作成」を選択してください。
まず、App Engineのリージョンを選択する画面が表示されるので、東京のリージョンを選択して「次へ」をクリックします。
アプリケーションの作成が終わったら、以下のような画面になります。App Engineの設定は一旦ここまでで完了です。
次はアプリをGCPにデプロイするためのコマンドをターミナルで使えるようにするための設定をしていきます。
Cloud SDKをインストールする
Cloud SDKとは、Google Cloudをコマンドで動かすためのツールです。これを使うことでターミナルでLaravelのアプリをApp Engineにデプロイするためのコマンドが使えるようになります。
まずは、Cloud SDKのインストールページからご自身の環境にマッチしたパッケージをダウンロードしてください。
ダウンロードしたZipファイルを展開します。次に、展開したファイルのディレクトリに移動してターミナルで以下のコマンドを実行します。
./google-cloud-sdk/install.sh
これでGCPをコマンドで操作するための準備ができました。では、実際にコマンドを使っていきましょう。
先ほど作成したLaravelのプロジェクトのディレクトリに移動してください。移動したら以下のコマンドをターミナルで実行します。
gcloud auth login
上記のコマンドはGCPのアカウントとgcloudコマンドの紐付けを行うためのコマンドです。
実行するとGCPにログインするアカウントを選択する画面がブラウザで表示されるので、laravelのアプリをデプロイするためのアカウントでログインします。
アカウントを選択すると、アクセスのリクエストのページが表示されるので「許可」をクリックします。
「これで gcloud CLI で認証されました。」という内容の画面が表示されたらアカウントの紐付けは完了です。
アカウントの紐付けは完了したので、次は今回使うGCPのプロジェクトの選択などをやっていきます。
以下のコマンドを入力してください。
gcloud init
このコマンドを実行すると、いくつか選択式の質問が出てくるので番号を選択して解答していきます。
まず、「Pick configuration to use:」に対しては、「Re-initialize this configuration [default] with new settings 」を選択します。
「Choose the account you would like to use to perform operations for this
configuration:」に対しては、Laravelのアプリをデプロイするアカウントを選択します。
「Pick cloud project to use: 」に対しては、該当するプロジェクトのIDを選択します。
「Your Google Cloud SDK is configured and ready to use!」という表示がターミナルに表示されたら、こちらの設定は完了です。
次はLaravelの設定をしていきます。
app.yamlファイルを作成
App Engineにアプリをデプロイするためにはapp.yamlというファイルが必要になります。このapp.yamlにApp Engineの設定を書いていきます。
では、Laravelのプロジェクトのルートディレクトリにapp.yamlを作成して、中身を以下のように書いてください。
# PHPのバージョンは8.1
runtime: php81
# スタンダード環境を指定
env: standard
runtime_config:
document_root: public
php_version: 8.1
automatic_scaling:
min_idle_instances: automatic
max_pending_latency: automatic
max_concurrent_requests: 80
env_variables:
# ログのエラーが出ないようにするための記述
LOG_CHANNEL: stderr
# キャッシュのエラーが出ないようにするための記述
CACHE_DIRECTORY: /tmp/laravel/cache
SESSION_DRIVER: cookie
APP_STORAGE: /tmp
# デプロイ時のcomposerのバージョン
build_env_variables:
GOOGLE_COMPOSER_VERSION: 2.2.1
App Engineの環境はスタンダード環境とフレキシブル環境という2つの環境があります。
この2つの環境には色々と違いがあるものの、2023年7月28日現在では、スタンダード環境で対応しているPHPのバージョンが8.2までとなっており、フレキシブル環境では7.3までとなっています。
Laravel 10の場合だとPHPのバージョンが8.1以上でなければいけないので、今回はスタンダード環境にデプロイしていきます。
env: standard
というのがスタンダード環境を指定するための記述です。
また、App EngineにLaravelのアプリをデプロイしたときに、ログやキャッシュに関するエラーが出る場合があるので、そういったエラーを防ぐための記述もしていきます。
env_variables:
# ログのエラーが出ないようにするための記述
LOG_CHANNEL: stderr
# キャッシュのエラーが出ないようにするための記述
CACHE_DIRECTORY: /tmp/laravel/cache
SESSION_DRIVER: cookie
APP_STORAGE: /tmp
composer.jsonの編集
次はcomposer.jsonの中身を編集していきます。composer.jsonのscriptsのところに以下のような記述を追加していください。
"post-install-cmd": [
"chmod -R 755 bootstrap\/cache",
"php artisan cache:clear"
]
この記述はデプロイしたときにキャッシュのエラーが出ないようにするための記述ですね。
その他のファイルを編集
composer.json以外にもアプリをデプロイしたときにキャッシュのエラーを防ぐために編集が必要なファイルがあるので、Laravelのファイルをいくつか編集していきます。
まず、bootstrapのディレクトリにあるapp.phpに以下の記述を追記します。
$app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));
次はconfigディレクトリにあるcache.phpのfileのところにあるpathを以下のように変更します。
'path' => '/tmp/cache',
同じくconfigディレクトリにあるsession.phpのdriverの部分を以下のように変更します。
'driver' => env('SESSION_DRIVER', 'cookie'),
最後に、configディレクトリにあるview.phpのcompiledの部分を以下のように変更します。
'compiled' => storage_path(),
.gcloudignoreを作成する
不必要なものやデプロイするとエラーになるファイルをデプロイしないようにするためにLaravelのプロジェクトのルートディレクトリに.gcloudignoreファイルを作成します。
このファイルは.gitignoreのようなもので、指定したファイルをデプロイのときに無視することができます。
.gcloudignoreファイルの中身は以下のようにしてください。
.DS_Store
/vendor
/node_modules
/bootstrap/cache/*
!/bootstrap/cache/.gitignore
/storage/framework/cache/*
!/storage/framework/cache/.gitignore
/storage/framework/sessions/*
!/storage/framework/sessions/.gitignore
/storage/framework/testing/*
!/storage/framework/testing/.gitignore
/storage/framework/views/*
!/storage/framework/views/.gitignore
/storage/debugbar/*
!/storage/debugbar/.gitignore
/storage/logs/*
!/storage/logs/.gitignore
/storage/*.key
/public/storage
/_ide_helper.php
/_ide_helper_models.php
/.phpstorm.meta.php
/.phpunit.result.cache
※上記の.gcloudignoreファイルはこちらの記事を参考にさせていただいております。
デプロイ
ここまでできたら、実際にLaravelのアプリをApp Engineにデプロイしていきます。
ターミナルでLaravelのプロジェクトのディレクトリに移動して、以下のコマンドを実行してください。
gcloud app deploy
このコマンドを入力すると「Do you want to continue (Y/n)? 」と聞かれるのエンターを押して、デプロイを実行します。
デプロイが完了するのをしばらく待ちます。ターミナルに以下のような表示が出たら、デプロイは完了です。
以下のコマンドをターミナルに入力すると、ブラウザが開いてデプロイしたLaravelの画面が表示されます。
gcloud app browse
App EngineからCloud SQLに接続する方法などについては、こちらの記事で解説しています。
まとめ
app.tamlファイルをLaravelのルートディレクトリに作成してデプロイするための設定を記述し、デプロイしたときのログやキャッシュのエラーを防ぐための対応をすることで、App Engineのスタンダード環境にlaravel 10のアプリをデプロイすることができます。
今回作成したLaravelのプロジェクトのリポジトリはこちらです。