LaravelをHerokuにデプロイする【Heroku-postgresql使用】
LaravelをHerokuにデプロイする。DBにはHerokuPostgresを使用する。
本記事の対象読者はHerokuCLIはインストール済み、基本的なコマンドは習得済みとする。
流れ
- Herokuからアプリを作る
- HerokuPostgresを実装
- 起動用のProcfileを作る
- ローカルリポジトリとHerokuのリモートリポジトリの関連付け
- デプロイ
- 環境変数の設定を施す(多いのでシェルスクリプトを実装するべき)
- マイグレーション
Herokuからアプリを作る
ダッシュボードからNewをクリックしてアプリを作る。リージョンはアメリカで。
HerokuPostgresを実装
HerokuPostgresを採用する。作ったアプリのページからResourcesタブをクリックして、HerokuPostgresを検索して追加。
HerokuPostgresのページからDBの認証情報を全て控えておく。
起動用のProcfileを作る
Laravelのプロジェクトのディレクトリにて、Procfileを作るため、下記コマンドを実行する。
echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile
ざっくり言うと、これはデプロイ後にプロジェクトを起動させるためのものだ。
ローカルリポジトリとHerokuのリモートリポジトリの関連付け
デプロイするLaravelのプロジェクトにて、ローカルリポジトリを作り、コミットする。
git init
git add .
git commit -m "1st commit"
続いて、先程作ったアプリのリモートリポジトリと関連付け。アプリのDeployタブをクリックすると、こんなコマンドの画面が表示されるので、これに倣ってコマンドを打つ
heroku git:remote -a [先程作ったアプリ名]
デプロイ
プッシュする。
git push heroku master
これでデプロイ自体は完了。ただ、これだけでは正常に動かないので、次項で環境変数(DBの認証情報や秘密鍵、デバッグモード等の設定)を指定する。
環境変数の設定を施す(多いのでシェルスクリプトを実装するべき)
環境変数の設定は
heroku config:set [設定内容]
この構文でできる。そのため、以下のコマンドを順次実行していく。
heroku config:set APP_DEBUG=false
heroku config:set APP_URL=[デプロイ先のサイトのドメイン名 ( Herokuのアプリ名が test-laravel なら、指定するのは test-laravel.herokuapp.com ) ]
heroku config:set APP_KEY=[この部分は後述]
heroku config:set DB_CONNECTION=pgsql
heroku config:set DB_HOST=[Hostを入れる]
heroku config:set DB_PORT=5432
heroku config:set DB_DATABASE=[Databaseを入れる]
heroku config:set DB_USERNAME=[Userを入れる]
heroku config:set DB_PASSWORD=[Passwordを入れる]
APP_KEY
のデータは下記コマンドを実行し、base64:
から始まる文字列をセットすれば良い
php artisan key:generate --show
DBの認証情報も含むので、実行するコマンドは非常に多い。面倒な場合はシェルスクリプトを組んで実行してもOK
マイグレーション
DBの認証情報設定後、マイグレーションを実行する。マイグレーションはHeroku上で実行されるので、heroku run
が先頭に付く点に注意。
heroku run php artisan migrate
マイグレーション完了の標準出力が表示されたらデプロイ作業は完了。
結論
DjangoのHerokuデプロイに比べれば、今回のLaravelはそれほど難しくはない。環境変数の設定のコマンドはやや面倒だが、シェルスクリプトを作って実行すれば良いので、デプロイ作業自体は10分もあれば十分かと。ライブラリもプッシュ時に自動的にインストールしてくれるので実機のUbuntuにデプロイするよりは楽。
後は、デプロイ後にマイグレーションを忘れずに実行すること。HerokuPostgresにマイグレーションファイルの内容を反映させる。