herokuにLaravelのプロジェクトをデプロイする(公開する)

Laravel Laravel

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…」で表示されたデータベースの設定の値です。

KEYVALUE
DATABASE_URLここは表示されている値そのまま
APP_DEBUGデバッグが必要な場合があるので「true」としておく
DB_CONNECTIONpgsql
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」に追加登録します。

KEYVALUE
APP_KEYphp 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」に値を追加します。

KEYVALUE
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

この記事を書いた人

余分なこだわりは捨てる。それがぼくのスタイル。

PHPでWebアプリを作り、小さな花の写真を撮ってよろこんでいる人。元Webエンジニア。プログラミング講師。余分なこだわりを捨てて生きやすくなりたいと思いつつも、なかなかこだわりを捨てきれない頑固者。まろと呼んでください。

さかのうえの まろをフォローする
Laravel
シェアする