herokuにLaravelのプロジェクトをデプロイする手順をまとめてみました。
herokuにアプリケーションを作成する
空のアプリケーションを新規作成する
herokuにログインし、アプリケーションを新規作成します。
「New」をクリックします。
「Create new app」をクリックします。
「App name」は、他のアプリケーション名と重複しないものを入力する必要があります。空欄にすると、ランダムな名前が設定されます。
「region」は「United States」のままでOK。
「Create app」をクリックすると、空のアプリケーションが作成されます。
使用するデータベースを設定する
「Resources」をクリックします。
「Add-ons」のところで「postgres」と入力し、「Heroku Postgres」を選択します。
「Plan name」は「Hobby Dev – Free」を選択し、「Submit Order Form」をクリックします。
「Heroku Postgres」が追加されました。
「Heroku Postgres」をクリックします。ブラウザの別のタブが開きます。
「Settings」をクリックして、「View Credentials…」をクリックします。
データベースの設定が表示されます。この値は後ほどの設定に必要になります。
ブラウザのアプリケーションのタブに戻り、「Settings」をクリックします。
「Reveal Config Vars」をクリックします。
「Config Vars」の値を入力していきます。値は先程の「View Credentials…」で表示されたデータベースの設定の値です。
KEY | VALUE |
DATABASE_URL | ここは表示されている値そのまま |
APP_DEBUG | デバッグが必要な場合があるので「true」としておく |
DB_CONNECTION | pgsql |
DB_DATABASE | 「Database」の値 |
DB_HOST | 「Host」の値 |
DB_PASSWORD | 「Password」の値 |
DB_PORT | 「Port」の値(5432) |
DB_USERNAME | 「User」の値 |
heroku用にLaravelのプロジェクトを編集する
herokuでLaravelのアプリケーションを動作させるための設定を行います。
Procfileを作成
Laravelのプロジェクト直下(.envなどのファイルがあるディレクトリ)に「Procfile」という名前のファイルを作成し、下記の内容を記載します。
web: vendor/bin/heroku-php-apache2 public/
AppServiceProviderを編集する
asset()でURLを生成している場合、HTTPSでの接続を強制しておく必要があります。app/Providers/AppServiceProvider.phpを編集します。
public function boot()
{
// asset()でURLを呼び出している個所でHTTPSでアクセスするようにする
if (config('app.env') === 'production') {
\URL::forceScheme('https');
}
}
herokuにLaravelのプロジェクトをデプロイする
Laravelのプロジェクトのディレクトリでターミナルを開き、herokuにログインします。
heroku login
heroku: Press any key to open up the browser to login or q to exit:
と表示されるので、Enterキーを押下します。ブラウザが立ち上がり、下記の画面が表示されます。
「Log In」をクリックして、ターミナルへ戻ります。
Logging in... done
Logged in as <herokuに登録したメールアドレス>
と表示されればOK。
APP_KEYを発行し、herokuの「Reveal Config Vars」のところに追加登録します。
php artisan key generate --show
base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
表示された「base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…」の部分を「APP_KEY」の値として「Config Vars」に追加登録します。
KEY | VALUE |
APP_KEY | php artisan key:generate –show で表示された値 |
gitにherokuをリモートリポジトリとして追加します。「heroku」というリモート名で登録されます。
heroku git:remote -a <アプリケーション名>
「アプリケーション名」は、herokuでアプリケーションを新規作成したときの名前です。
ファイルをindexに追加し、commitします。
git add .
git commit -m "herokuにデプロイする準備"
リモートへpushします。pushすると同時にcomposer.jsonが読み込まれ、必要なライブラリがダウンロードされるようです。
git push heroku master
「Open app」をクリックすると、Laravelアプリケーションが動作します。
作業は以上です。お疲れさまでした!😃
そのほか
heroku用のブランチを作る
heroku用にファイルを作成したり編集したりする必要があるので、heroku用のブランチを作ったほうがいいかもしれません。
ブランチを新規作成。
git branch heroku
ブランチの切り替え。
git checkout heroku
ローカルのherokuリポジトリからリモート(heroku)のmasterブランチへpushする。
git push heroku heroku:master
ちなみに、リモートのリポジトリ名が「master」以外だと、アプリケーションにアクセスしたときに「403 Forbidden」になります。
アプリケーション名を設定する
resources/views/layouts/app.blade.phpを使っていたり、config(‘app.name’,)でアプリケーション名を表示させている場合、画面に表示されるアプリケーション名が「Laravel」になっているので、独自のアプリケーション名を設定します。
「Config Vars」に値を追加します。
KEY | VALUE |
APP_NAME | 独自のアプリケーション名 |
設定が反映されないときは、下記のコマンドを実行します。
heroku run php artisan config:cache
Laravel 6のプロジェクトが動かない
herokuで提供されているPHPのバージョンが8.1なので、Laravel 6のプロジェクトは動きませんでした。
heroku run php -v
PHP 8.1.5 (cli) (built: Apr 14 2022 12:55:49) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies
with Zend OPcache v8.1.5, Copyright (c), by Zend Technologies
heroku run php artisan migrate でエラーになります。composer.jsonでPHPのバージョンを8.0に指定することで解決しました。
"php": "~8.0.0",
ローカルでcomposer update をやり直します。
composer update
コミットします。
git add .
git commit -m "PHPを8.0にバージョン指定した。"
pushします。
git push heroku master
マイグレーションします。
heroku run php artisan migrate
herokuのPHPのバージョンを確認すると8.0.18でした。
heroku run php -v
PHP 8.0.18 (cli) (built: Apr 14 2022 12:45:45) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.18, Copyright (c) Zend Technologies
with Zend OPcache v8.0.18, Copyright (c), by Zend Technologies