Laravel を Heroku にデプロイする方法
最近Laravelを利用することが多くなってきました。個人でもチームでも。
そこでせっかく作ったものはデプロイしてみたいと思い、今回はHerokuにアップする方法を説明します。
まずは前提条件。
前提
・すでにローカルでLaravelは構築されていること
(Laravelのローカルでの構築手順はtadakenさんのこちらのブログが詳しいです。)
・Laravelのバージョンは 5.7.20 です
・Herokuのアカウント登録済み
(こちらよりアカウント登録をお願いします。)
次に今回の目次です。
それでは実際に行なっていきましょう。
Heroku CLIインストール
まずはHeroku CLIをインストールします。こちらよりインストールできます。
またはmacの場合、下記コマンド実行でインストール可能です。
brew install heroku/brew/heroku
Herokuに新規アプリ作成
Herokuに新規アプリを作成します。まずはHerokuにログインします。下記コマンド実行します。
heroku login
すると、下記のようなメッセージが表示されます。
heroku: Press any key to open up the browser to login or q to exit:
これは、「q」以外のコマンドをクリックするとブラウザでherokuのページが開くという意味です。Enterをクリックします。すると、下記のようなページが表示されます。
「Log in」をクリックします。すると、下記画面が表示されログインされます。
一旦ターミナルに戻ります。すると下記のように表示されていると思います。
Logging in... done
Logged in as [Herokuに登録したメールアドレス]
これでHerokuにログインできているので、新しいアプリを作成します。下記コマンド実行します。
heroku create
すると、下記のように表示されます。
Creating app... done, ⬢ [herokuアプリケーション名]
https://[herokuアプリケーション名].herokuapp.com/ | https://git.heroku.com/[herokuアプリケーション名].git
これで新規アプリが作成されました。こちらのURLにアクセスすると、下記のようにHerokuのデフォルト画面が表示されます。
PostgreSQLの追加
次にPostgresSQLを追加します。PostgresSQLはHerokuのダッシュボードから追加していきます。下記よりHerokuダッシュボードにログインします。
ログインすると、下記のようにアプリ一覧が表示されます。先ほど作成したアプリをクリックします。
次に、メニュータブより「Resources」をクリックします。
「Add-ons」の検索ボックスに「postgres」と入力すると「Heroku Postgres」が表示されるので、こちらを選択します。
すると、下記モーダルが表示されるので、「Hobby Dev - Free」が選択されていることを確認し、「Provision」をクリックします。
すると、「Add-ons」に「Heroku Postgres」が追加されています。
以上でデータベースのアドオンが完成です。
次に、データベース接続の設定を行います。下記コマンドを実行します。
heroku config:get DATABASE_URL
こちらはデータベースの接続情報を確認するコマンドです。(Heroku Postgres を追加した時点で、接続情報は設定されています)
こちら実行すると、下記のように表示されます。
postgres://aaabbb:cccddd@ec2-abc-def-ghi.compute-1.amazonaws.com:5432/xyz123
こちらがデータベースの設定内容になります。ここにデータベース名、データベースユーザ名、パスワード等が記載されています。
それぞれをconfig:setコマンドにてセットしていきます。下記実行します。
heroku config:set DB_CONNECTION=pgsql
heroku config:set DB_HOST=ec2-abc-def-ghi.compute-1.amazonaws.com
heroku config:set DB_DATABASE=xyz123
heroku config:set DB_USERNAME=aaabbb
heroku config:set DB_PASSWORD=cccddd
以上でデータベースの設定は完了です。
Herokuにデプロイする
それではいよいよHerokuにデプロイします。
まず Procfile という 設定ファイルを作成します。Laravelのルートディレクトリに移動し、下記実行します。
vi ./Procfile
するとファイル作成画面になるので、下記記入し保存します。
web: vendor/bin/heroku-php-apache2 public/
次にファイルをHerokuにアップします。HerokuへのアップロードはGitを利用します。
Laravelルートディレクトリにて、下記実行します。
git init
heroku git:remote -a [herokuアプリケーション名]
git add .
git commit -m "first commit"
git push heroku master
これでファイルがHerokuにアップロードできました。
次にAPP_KEY の設定を行います。下記実行します。APP_KEYはセキュリティ等の機能で暗号化に利用される設定項目です。
(APP_KEYがないと Laravel は動かないようです。)
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)
最後にデータベースのマイグレーションを行います。下記実行します。
heroku run "php artisan migrate"
途中で下記のように聞かれますので、 「yes」と入力しEnterをクリックしてください。
Do you really wish to run this command? (yes/no) [no]:
マイグレーションが開始します。マイグレーションが終了したら完成です。
デプロイしたサイトを確認する
それではデプロイしたサイトを確認してみましょう。下記実行します。
heroku open
すると、ブラウザが開きサイトが表示されます。
以上で対応完了です。お疲れ様でした!
おまけ:ファイル更新時の対応方法
今後ローカルで開発したファイルをHerokuにアップした場合は、GitにてプッシュすればOKです。下記実行にてHerokuにアップされます。
git add .
git commit -m "メッセージ"
git push heroku master
以上です。
注意1:複数アプリケーション利用の場合
複数Herokuのアプリケーションを持っている方は、アプリ切り替えのオプションを指定しる必要があります。
heroku コマンド --app アプリ名
例として、コマンドは「heroku open」アプリ名を「sample-app」とする場合は下記となります。
heroku open --app sample-app
以上です。