🔖

【Heroku】Laravelの初回デプロイに実施すること

2021/09/23に公開

APP_KEYを環境変数に設定する

ローカルのリポジトリとHerokuのAppを紐付けておきましょう。

heroku git:remote -a ${HEROKU_APP_NAME}

そしてローカルで以下のコマンドを実行するとAPP_KEYを生成し環境変数にセットできます。

heroku config:set APP_KEY=$(php artisan key:generate --show)

Apacheの設定

Procfileを生成しドキュメントルートを設定します。

echo 'web: vendor/bin/heroku-php-apache2 public/' > Procfile

URLをHTTPSで生成させる

Herokuにデプロイする場合、それらはStagingやProductionになりえると思います。
それらの環境で生成されるURLをhttpsを強制にしておきましょう。
まず環境変数でAPP_ENVを設定しておきます。

heroku config:set APP_ENV=staging

AppServiceProviderのboot()に以下を追加します。

public function boot()
{
    if (\App::environment(['staging', 'production'])) {
        \URL::forceScheme('https');
    }
}

HttpをHttpsにリダイレクトさせる

Milldewareによってすべてのリクエストをチェックしてリダイレクトするようにしましょう。ForceHttpsという名前でMiddlewareを作成します。

php artisan make:middleware ForceHttps

生成されたForceHttpsのhandleを以下のように修正します。
追加したのはifの3行です。
APP_ENVがStagingかProduction環境かつ、HTTP_X_FORWARDED_PROTOでプロトコルをチェックしhttpであれば、httpsでリダイレクトするようにします。

    public function handle($request, Closure $next)
    {
        if (\App::environment(['staging', 'production']) && $_SERVER["HTTP_X_FORWARDED_PROTO"] != 'https') {
            return redirect()->secure($request->getRequestUri());
        }
        return $next($request);
    }

そしてKernel.phpに以下のように作成したForceHttpsを追加します。

    protected $middleware = [
        \App\Http\Middleware\ForceHttps::class, // 追加
    ];

初期設定は覚えられない!

初期設定って頻繁に繰り返して行うことではないのでなかなか覚えられず事あるごとにググるタイプです。この記事で一箇所にデプロイに関してまとめることができたので、どなたかのお役に立てれば幸いです。

Discussion