Laravelアプリケーションのherokuへのデプロイ【Windows】【Laravel認証機能】

herokuのアカウント作成は事前に済ませています

開発環境

  • Windows 10
  • Laravel9
  • Gitセットアップ済み
    ※Windows内の開発環境はXAMPPで作成

xammpのセットアップはこちら

サンプルアプリケーション作成

デプロイのためのサンプルアプリを作成します。
今回はLaravel9に認証機能を設定した、ほとんど機能のない単純なアプリケーションをデプロイしていきます。

アプリケーション作成

composer create-project laravel/laravel=9.* heroku-sample

phpMyAdminからDBを新規作成

ユーザを作成しながらDBを同時に作成。

LaravelからDBへの接続設定

.envファイルにDBへの接続情報を入力

Laravel認証機能のインストール

composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate
npm install
npm run dev

ログイン機能が動作することを確認

画面からユーザを作成し、そのユーザでログイン。
これでローカル環境での動作はOKとし、デプロイ作業へ。

Herokuへのデプロイ

Heroku CLIのインストール

下記サイトから自身のOSに合ったものを使用してインストール。
今回使用するのは「Windows 64ビット用インストーラ」。
今回は全て初期設定のままインストール。

再起動してインストールできていることを確認。確認コマンドは下記

heroku --version

Herokuへのログイン

heroku login

コマンドを実行するとメッセージが表示されます。適当なキー(qを押すと中断のようなので、q以外?)を押下するとブラウザでHerokuのログイン画面が表示されるのでログインしてください。

ちなみに私は多要素認証の設定はしていません。(デプロイが正常に行えることを確認してから、このあたりの設定を行うつもりです)
公式サイトの手順を見る限り、ブラウザを利用したログインであれば多要素認証を行っていても問題なさそうです。

Herokuにソースコードを設定

プロジェクトディレクトリに移動してHerokuコマンドを実行

cd ./myapp
heroku create
git init
heroku git:remote -a xxxxxxxxxx

heroku git:remote -a xxxxxxxxxxの「xxxxxxxxxx」部分については、自分のheroku createコマンドで表示されたgitのURLの内容に応じて変更してください。https://git.heroku.com/xxxxxxxxxx.gitのようになっていると思います。
HerokuマイページのDeployからも確認できるので、そちらも確認してみてください。

git add .
git commit -am "first"
git push heroku master

HerokuのDB設定

データベースアドオンの追加

今回はJawsDBを使用します。(アドオンサイト
インストールコマンドはこちら。

heroku addons:create jawsdb:kitefin
支払い方法の設定を求められる場合があります。その場合はHerokuで支払い設定を行いましょう。
JawsDBの場合はアドオンサイトの左に料金プランが記載されています。
プランによってインストールコマンドが異なります。(kitefinは無料プランです。)

DB設定

DBのURLを取得

heroku config:get JAWSDB_URL

出力内容はこんな形式。
mysql://username:password@hostname:port/default_schema

出力内容を使用してHerokuのDB接続設定を行う

heroku config:set DB_CONNECTION=mysql
heroku config:set DB_HOST=<hostname>
heroku config:set DB_DATABASE=<default_schema>
heroku config:set DB_USERNAME=<username>
heroku config:set DB_PASSWORD=<password>

設定ができているか確認したい方は、ブラウザでHerokuにアクセスし、アプリケーションの詳細ページに移動してください。
Setting」から「Config Vars」の「Reveal Config Vars」から確認できます。

HerokuのLaravelアプリケーション設定

migrationの実行

heroku run php artisan migrate

DBのmigrationが実行できない場合、エラーメッセージを参考にDBへの接続設定等を見直してみてください。

Procfileの作成(アプリケーションの公開ディレクトリの設定)

公開ディレクトリの設定のため、「Procfile」を作成します。

echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile
git add .
git commit -m "Procfile (Heroku)"
git push heroku

403エラーになってしまう場合、Procfileの内容を確認してみてください。
「”」で入力内容が囲まれている場合、「”」を削除してから再度pushしてみてください。

APP Keyの設定

.envに作成されているKeyを設定しましょう。

heroku config:set APP_KEY=<APP_KEY>

npmの設定

ここまでの手順でアプリケーションにアクセスするとLaravelのログインページが表示されるかと思います。
しかし、Top右上のRegisterなどから認証機能にアクセスするとエラーとなってしまいます。
これは、認証機能で必要なファイルが作成されていないためです。
(開発環境ではnpm run devコマンドなどで作成されていたファイル)
そのため、Herokuのビルド設定を行います。

アプリケーション詳細ページにアクセスしたら「Setting」の「Buildpacks」を確認してください。
ここでnodejsのビルドが実行されるように設定する必要があります。
Add buildpackから「nodejs」を選択して「Save changes」を選択してください。
PHPとnodejsがBuildpacksに表示されれば設定完了です。

警告メッセージの通り、次のデプロイ時に有効となるため再度デプロイします。
変更なしでpushを行うため、空のコミットを作成してpushしましょう。
デプロイのための空コミットであることをコミットメッセージに追加しておくとよいでしょう。

git commit --allow-empty -m "Trigger Heroku deploy"
git push heroku

これで認証機能も問題なく使用できるはずです。
お疲れ様でした。

ユーザを作成してログインができました。

今回はここまで。
今回は最小構成ではありますが、認証機能まで使用しているということで少し癖がありましたね。

LaravelのHerokuデプロイの記事はたくさんの記事がありますが、認証機能を使用したアプリのデプロイをしている記事が少なかったので書いてみました。
皆様の参考になれば幸いです。