2019-2-11
LaravelをHerokuにデプロイ(Laravel mix使用かつGitHub経由)
最近 Heroku の活用事例を聞いて試してみたくなったので試した。そのメモ。
手順
- GitHub リポジトリの準備
- Heroku の準備
- アプリの作成
- BuildPack の適用
- DB の準備
- GitHub リポジトリと連携
- 初回デプロイ
- 最初は手動デプロイ
- 環境変数の設定
GitHub リポジトリの準備
基本普通に作成した Laravel アプリのリポジトリを用意すれば問題ないが、以下の点に留意して準備する。
リポジトリのルートディレクトリにcomposer.json
が存在するように
Heroku はビルドする際にリポジトリのルートディレクトリだけを見るみたいで、ルートディレクトリ以外でビルドしようとすると面倒。なので、基本ルートディレクトリにcomposer.json
やpackage.json
等が配置されるようにすること。
Procfile
の配置
ルートディレクトリに以下の内容のProcfile
を配置。
web: vendor/bin/heroku-php-apache2 public/
Procfile
は Heroku でアプリが起動する際の処理を記述するみたいだけど詳しいことはよくわかっていない。とりあえず上記のように書いておくとpublic
がドキュメントルートになる。
package.json
にheroku-postbuild
を追加
当然だけど、Heroku 側でnpm run production
されないとフロントエンドの諸々が用意されない。
以下のようにpackage.json
にheroku-postbuild
を追加すると、パッケージインストール完了後記述したスクリプトが実行される。
{
~
"scripts": {
~
"heroku-postbuild": "npm run production"
},
~
}
Heroku の準備
アプリの作成
普通に作成。
Buildpacks の適用
Settings
タブからheroku/nodejs
とheroku/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 Postgres
のSettings
タブ内の項目Database Credentials
に記述されている。
必要な項目を以下のコマンドで環境変数として設定。
heroku config:set APP_KEY=$(php artisan key:generate --show) DB_CONNECTION=pgsql DB_HOST=...