herokuにLaravelアプリをデプロイする方法について解説します!
前提
①アカウント登録ができていること
②heroku CLIをインストール済であること
公式のガイドを元にherokuのコマンドラインを打てるようにしておきましょう。
②2020年12月時点での情報
過去のherokuデプロイ系の記事を見つつ実際にデプロイしたところ、細かい手順で変更があるのを確認しました。
今後も変更があるかもしれないので、うまくいかないことがあったら
公式リファレンスを確認しましょう。
リファレンスページ上部の最終更新履歴(↓画像の赤枠部)が新しくなっていたら、リファレンスの方法に沿ってすすめるのがイイかと!
(日本語版リファレンスもありますが、翻訳が最新版と異なる可能性がある点にだけ注意)
ざっくり手順を解説
- laravelのプロジェクト作成
- gitリポジトリを作成
- ProcFile作成
- herokuアプリケーションとして登録
- herokuへpushする
- config(設定)を行う
- DB設定をする
- マイグレーション実行
既にアプリをgithubにpushして開発している方は、手順3ProcFile作成から参照してください。
では、やっていきましょう!
方法
手順1 laravelプロジェクトの作成
composerコマンドでlaravelのプロジェクトを作成します。
自分の場合はver8のLaravelとlivewireというライブラリを触りたかったのでlivewire-applicationという名前にしました。
composer create-project laravel/laravel livewire-application --prefer-dist "8.0.*"
手順2 gitリポジトリを作る
herokuにはgithubへpushしたコードを毎日自動デプロイしてくれるなど、便利な機能があります。
逆にいえば、herokuにデプロイするにはgitを使う必要があるということ。
なので、Laravelのプロジェクトを自分のリポジトリにする必要があります。
githubのアカウントページで新しいリポジトリを作成し、pushしましょう。
cd livewire-application/src
git init
git add .
git remote add origin https://github.comユーザー名/リポジトリ名
git commit -m "new livewire project"
これで自分のgithubリポジトリにlaravelプロジェクトが作成されているはず!
手順3 ProcFile作成
Procfileは「あなたのアプリがデプロイされているherokuサーバにアクセスがあった時に、どこを参照するか?」を設定するファイルです。これをLaravel用に設定しましょう。
echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile
git add .
git commit -m "Procfile for Heroku"
上記の通り、Procfileは公開しても問題ないのでgitコミットしてます。
設定について解説すると、
Laravelリファレンス/設定/Publicディレクトリより
Laravelをインストールできたら、Webサーバのドキュメント/Webルートがpublicディレクトリになるように設定してください。
と書かれている通り、Laravelのアプリはpublic
ディレクトリがアクセスのエンドポイントになります。
heroku側の初期設定がpublic
になってないので、設定を変更しているワケですね。
手順4 herokuアプリケーションとして登録
Procfile
を作成した場所で、そのままheroku create
コマンドを打ちます。
hirog:livewire-application hirog_engineer$ heroku create
Creating app... done, ⬢ shallow-waters-42026
https://Protected-waters-42026.herokuapp.com/ | https://git.heroku.com/shallow-waters-42026.git
ざっくりいうと、これはgitコマンドのgit init
と同じです。
「この場所を起点に、これからherokuのアプリを新規登録しますよ。」と宣言しています。
また、ここでheroku側でのアプリ名も決定されます(名前はランダム)。
今回はProtected-waters-42026
という名前になりました。
手順5 herokuへpushする
git push heroku master
というコマンドを打ちます。
hirog:livewire-application hirog_engineer$ git push heroku master
Enumerating objects: 123, done.
Counting objects: 100% (123/123), done.
Delta compression using up to 4 threads
Compressing objects: 100% (101/101), done.
Writing objects: 100% (123/123), 68.26 KiB | 1.95 MiB/s, done.
Total 123 (delta 9), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
このコマンドを打つことで、git
を元にアプリのmaster
ブランチにあるコードがherokuにpush(送信)されます。
ちなみに、この時点でProcfileを作成し忘れていると、以下のようなメッセージが途中に出てきます。
「Procfileがないから、アクセスがあった時はrootディレクトリを参照されるようにしたよ」という意味です。
ただ、先ほども書いた通り、Laravelのアプリはpublic
をエンドポイントにしなければいけません。
手順を戻ってmaster
ブランチにcheckoutしてProcfileを作成しましょう。
手順6 config(設定)を行う
herokuにpushする時にも.gitignore
は有効になっているので、ここまでの手順で環境変数.env
はheroku上にありません。。
.env
に書くような情報はheroku用のコマンドを使って設定する必要があります。
最低限、設定しておく項目は、、、
KEY | VALUE | 役割 |
---|---|---|
APP_NAME | 任意(アプリケーション名) | ブラウザタブのタイトルなど、アプリ名の表示に使用 |
APP_KEY | key:generateコマンドで発行 | 認証情報の暗号化 |
SESSION_DRIVER |
database /file など(認証方法による) |
セッション管理の方法 |
APP_DEBUG | true/false | デバッグモードON/OFF |
※DBの接続情報、外部API連携キー、メールサーバ接続情報なんかも同じ要領で設定します。
※SESSION_DRIVER
はデフォルト値がfile
ですが、認証に使っているライブラリによっても変わります。.env
に書かれている値をそのまま入れます。
※最初にデプロイする時はAPP_DEBUG
をtrueに設定することをオススメします。デプロイ初期にエラーが起こっている時、デバッグモードじゃないと原因の把握がしづらいため。認証周りを含めデプロイがうまくいったところでfalseに変更するといいかと。
config設定の方法はCUI(コマンドライン)とGUI(herokuのアプリページ内)の2種類。書き換え・確認のしやすさからGUIでやるのがオススメです。
CUIでconfig設定する
srcディレクトリ内(Procfileがある場所)からheroku config:set
コマンドで設定できます。
// 例
// 暗号化キー
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show).
# APP_KEY: base64:.... みたいな表示がされる
// アプリ名
heroku config:set APP_NAME=livewire-project
// アプリのベースURL (git push heroku master で表示されたURLを入力)
heroku config:set APP_URL=https://sutara79-laravel.herokuapp.com
// セッションドライバ
heroku config:set SESSION_DRIVER=database
// デバッグモード
heroku config:set APP_DEBUG=true
// 設定の確認コマンド
heroku config
GUIでconfig設定する
②アプリページ内のタブ一覧からSettings
を選択、Config Vars
欄に、
KEY-VALUEの形式で値を入力するだけ!
手順7 DB設定をする
DBの設定は、それだけでひと仕事になるので、別記事を用意しました。
長文ですが、初めてデプロイする方でも分かりやすいよう書いたので、
よかったら参照してください。
手順8 マイグレーション実行
herokuにpushした場合、composer install
は自動でしてくれているので、
他の初期設定やマイグレーションをやっていきましょう。
heroku run
に続けてartisanコマンドを打ちこみます。
heroku run php artisan migrate
production環境では以下のような表示があるかもですが、気にせずyes
マイグレーションが終わったら、アプリケーションのURLにアクセス!
エラーなく画面が表示されたらAPP_DEBUG
をfalseにするのを忘れずに。
お疲れさまでした!
その他やっておくと便利な設定・コマンド
個人的な目線でコレしたいな、というものを数点紹介。
今後、自分で実践したら記事にしたいと思います!
・ログを確認する
heroku logs
コマンドで確認(参考資料)。
注意書き
herokuの記事はたくさんの方が投稿して下さっているのですが、過去の記事に書かれていた設定手順が、今となっては不要になっている、というトコロも数点ありました。
・PHPの国際化用拡張モジュール(intl)を使う
↓のようなエラーが出て実行できなかったため、断念
↑の通り、git push heroku master
した時にheroku側がpush内容から自動でBuildPackを設定してくれているっぽいです。
GUI(herokuのアプリ管理画面)のSettingsタブにもPHPが設定されているのが確認するだけでOKかと。
あくまで私自身がやってみて不要だった、というだけなので、場合によってはこれらの設定も必要になるかもしれません。
参考資料
・公式リファレンス
・Laravel5.7: Herokuにデプロイする
・【Heroku】LaravelとMySQLでデプロイする
・(youtube動画)How to Deploy Laravel Project with Database on Heroku for Free | Step by Step Tutorial by Code Band
・Herokuでpg:psqlを実行しようとしたらThe local psql command could not be located
・HerokuのPostgreSQLのdbをみる方法