LoginSignup
3
1

More than 3 years have passed since last update.

[2020年12月]Herokuにlaravelアプリケーションをデプロイする方法

Last updated at Posted at 2020-12-06

herokuにLaravelアプリをデプロイする方法について解説します!

前提

①アカウント登録ができていること
②heroku CLIをインストール済であること
公式のガイドを元にherokuのコマンドラインを打てるようにしておきましょう。

2020年12月時点での情報
過去のherokuデプロイ系の記事を見つつ実際にデプロイしたところ、細かい手順で変更があるのを確認しました。
今後も変更があるかもしれないので、うまくいかないことがあったら
公式リファレンスを確認しましょう。

リファレンスページ上部の最終更新履歴(↓画像の赤枠部)が新しくなっていたら、リファレンスの方法に沿ってすすめるのがイイかと!
(日本語版リファレンスもありますが、翻訳が最新版と異なる可能性がある点にだけ注意)
image.png

ざっくり手順を解説

  1. laravelのプロジェクト作成
  2. gitリポジトリを作成
  3. ProcFile作成
  4. herokuアプリケーションとして登録
  5. herokuへpushする
  6. config(設定)を行う
  7. DB設定をする
  8. マイグレーション実行

既にアプリを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を作成し忘れていると、以下のようなメッセージが途中に出てきます。

image.png

「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設定する

①Dashboardページから、アプリを選択します。
image.png

②アプリページ内のタブ一覧からSettingsを選択、Config Vars欄に、
KEY-VALUEの形式で値を入力するだけ!
image.png

手順7 DB設定をする

DBの設定は、それだけでひと仕事になるので、別記事を用意しました。
長文ですが、初めてデプロイする方でも分かりやすいよう書いたので、
よかったら参照してください。

herokuデプロイ時のDB設定まとめ

手順8 マイグレーション実行

herokuにpushした場合、composer installは自動でしてくれているので、
他の初期設定やマイグレーションをやっていきましょう。

heroku runに続けてartisanコマンドを打ちこみます。

heroku run php artisan migrate

production環境では以下のような表示があるかもですが、気にせずyes
image.png

マイグレーションが終わったら、アプリケーションのURLにアクセス!

エラーなく画面が表示されたらAPP_DEBUGをfalseにするのを忘れずに。
image.png

お疲れさまでした!

その他やっておくと便利な設定・コマンド

個人的な目線でコレしたいな、というものを数点紹介。
今後、自分で実践したら記事にしたいと思います!

httpsを強制する

ログを確認する
heroku logsコマンドで確認(参考資料)。

ファイルをS3へ保存する

注意書き

herokuの記事はたくさんの方が投稿して下さっているのですが、過去の記事に書かれていた設定手順が、今となっては不要になっている、というトコロも数点ありました。

・PHPの国際化用拡張モジュール(intl)を使う
↓のようなエラーが出て実行できなかったため、断念
image.png

BuildpacksにPHPを設定
image.png

↑の通り、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をみる方法

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1