LaravelをHerokuにデプロイ(Laravel mix使用かつGitHub経由)

最近Herokuの活用事例を聞いて試してみたくなったので試した。そのメモ。

手順

  • GitHubリポジトリの準備
  • Herokuの準備
    • アプリの作成
    • BuildPackの適用
    • DBの準備
    • GitHubリポジトリと連携
  • 初回デプロイ
    • 最初は手動デプロイ
    • 環境変数の設定

GitHubリポジトリの準備

基本普通に作成したLaravelアプリのリポジトリを用意すれば問題ないが、以下の点に留意して準備する。

リポジトリのルートディレクトリにcomposer.jsonが存在するように

Herokuはビルドする際にリポジトリのルートディレクトリだけを見るみたいで、ルートディレクトリ以外でビルドしようとすると面倒。なので、基本ルートディレクトリにcomposer.jsonpackage.json等が配置されるようにすること。

Procfileの配置

ルートディレクトリに以下の内容のProcfileを配置。

web: vendor/bin/heroku-php-apache2 public/

ProcfileはHerokuでアプリが起動する際の処理を記述するみたいだけど詳しいことはよくわかっていない。とりあえず上記のように書いておくとpublicがドキュメントルートになる。

package.jsonheroku-postbuildを追加

当然だけど、Heroku側でnpm run productionされないとフロントエンドの諸々が用意されない。

以下のようにpackage.jsonheroku-postbuildを追加すると、パッケージインストール完了後記述したスクリプトが実行される。

{
    ~
    "scripts": {
        ~

        "heroku-postbuild": "npm run production"
    },
    ~
}

Herokuの準備

アプリの作成

普通に作成。

Buildpacksの適用

Settingsタブからheroku/nodejsheroku/phpをインストールしておく。

DBの準備

ResourcesタブのAdd-onsから、Heroku Postgresをインストールする。

GitHubリポジトリと連携

先んじて準備しておいたリポジトリと連携し、masterブランチにpushされた際に自動デプロイされるようにする。

DeployタブのDeployment methodからGitHubを選び、画面の指示に従って進めればOK。

初回デプロイ

最初は手動デプロイ

pushに反応して自動デプロイされるので、最初は手動でデプロイする。

環境変数の設定

Laravelに必要な環境変数の設定をする。

HerokuのWEBサイトからも設定できるが、面倒なのでCLIからやる。

ローカルのプロジェクトとHerokuアプリを結びつける

以下のコマンドをプロジェクトルートで実行する。

heroku git:remote -a [app name]

これで、リモートブランチとしてherokuが登録されると共に、herokuコマンド時に自動的に指定したアプリへのコマンドとして実行されるようになる。(これをしないと毎回-aオプションが必要になる。)

環境変数を設定する

APP_KEYとDB情報の設定を行う。

DB情報は、Heroku PostgresSettingsタブ内の項目Database Credentialsに記述されている。

必要な項目を以下のコマンドで環境変数として設定。

heroku config:set APP_KEY=$(php artisan key:generate --show) DB_CONNECTION=pgsql DB_HOST=...

参考

Laravel5.7: Herokuにデプロイする - Qiita

Laravel Mix + Heroku - Qiita

Heroku Node.js Support | Heroku Dev Center