FOUR WINDS TECH BLOG

WEBサイト制作・WEBアプリケーション開発が得意な会社の技術ブログ

Herokuにアプリケーションをデプロイする方法(Laravel編)

開発したアプリケーションをインターネットに公開する際に、VPSやAWSのEC2を利用できます。

しかし、VPSやEC2などのサービスは基本的にサーバの管理を自身で行わなければいけません。

サーバ管理ではディスク容量に十分な空きスペースがあるか、CPUやメモリなどのリソースに余裕があるかなど、様々なメトリクス(指標)を把握・管理しなければいけないため、インフラが得意でなかったりアプリケーションの開発に集中したい場合などには時間をかけられない・かけたくない時もあります。

Herokuではインフラの管理はすべてマネージド(Herokuが管理してくれる)ので、サーバを管理する必要がなくなります。

この記事ではLaravelアプリケーションをHerokuにデプロイする方法について説明します。

Herokuとは

jp.heroku.com

Herokuはアプリケーションを実行するための環境を用意してくれるプラットフォームで、サーバの管理の他、アドオンを追加することでAWS S3やデータベースサーバを追加することもできます。

またビルドパックと呼ばれるビルド設定を追加したり、自身でビルドスクリプトを記述することでPHPやNode.js、Javaなど様々な言語のアプリケーションをデプロイできます。

Herokuを使ってみる

※アプリケーションは既に作成済みの前提です。この記事では新しいLaravelプロジェクトでアプリケーションをデプロイします。

※アカウントは登録済の前提です。アカウントがない場合は次のページから登録できます。

signup.heroku.com

Herokuの操作は管理画面からもできますが、CLI(コマンドラインインターフェース)も提供されています。

この記事ではCLIからの操作を説明します。

Heroku CLIをインストールする

次のページのガイドに従って、Heroku CLIのインストールおよびheroku loginコマンドまで実行します。

devcenter.heroku.com

アプリケーションを作成する

次のコマンドでアプリケーションを作成できます。

heroku apps:create

上記コマンドを実行すると、アプリケーション名(例: arcane-gorge-56836)が表示されます。

他のコマンドを実行する際に指定するので、アプリケーション名を控えておきます。

もしアプリケーション名がわからなくなった場合はheroku appsコマンドを実行するか、管理画面から確認できます。

ビルドパックを追加する

Laravelのアプリケーションを実行するにはサーバにPHPをインストールしたり、Composerで管理している依存パッケージをインストールしたりする必要があります。

heroku/phpビルドパックを追加すると、上記のようなPHPアプリケーションを実行する環境を作成する処理を自動的に実施します。

ビルドパックを追加するには、次のコマンドを実行します。

heroku buildpacks:add -a arcane-gorge-56836 heroku/php

-aオプションは作成時に出力されたアプリケーション名を指定します。

Procfileを追加する

Herokuではいくつかのプロセスを実行することができます。

devcenter.heroku.com

アプリケーションをWEBで公開する際にはwebプロセスを実行する際のコマンドを指定する必要があります。

プロセスを実行する際のコマンドを指定するには、プロジェクトのルートディレクトリ(Laravelであればartisanファイルと同じディレクトリ)に次のようなProcfileを作成します。

web: $(composer config bin-dir)/heroku-php-apache2 public

このようにwebプロセスを指定すると、publicディレクトリをドキュメントルートとしてApacheのプロセスが起動されます。

public/.htaccessに相当するNginxの設定ファイルを追加すれば、Nginxでwebプロセスを起動することもできます。

devcenter.heroku.com

環境変数を設定する

Laravelではデータベースの接続情報やログの出力先などを.envで設定できます。

Herokuの場合.envではなくHerokuの環境変数を利用して設定するのがデファクトスタンダードです。

Herokuで環境変数を設定するには、次のコマンドを実行します。

heroku config:set -a arcane-gorge-56836 \
    APP_NAME=サンプルアプリケーション \
    APP_ENV=production \
    APP_KEY=base64:xxxxxxx \
    APP_DEBUG=false \
    APP_URL=https://arcane-gorge-56836.herokuapp.com/ \
    LOG_CHANNEL=stderr \
    LOG_LEVEL=error

アプリケーションをデプロイする

Herokuにアプリケーションをデプロイするには、GitでアプリケーションコードをHerokuのリポジトリにプッシュします。

git push heroku master

リモートリポジトリがない場合は次のコマンドでリモートリポジトリを追加します。

git remote add heroku https://git.heroku.com/arcane-gorge-56836.git

アプリケーションを確認する

次のコマンドを実行すると、ブラウザでアプリケーションを開きます。

heroku apps:open -a arcane-gorge-56836

以上でHerokuにLaravelのアプリケーションをデプロイできます。

Herokuでファイルシステムを使う場合の注意

Herokuではデプロイするたびに新しいコンテナが作成されるため、サーバ上に書き込んだファイルは永続化されません。

つまり、ユーザーがアップロードした画像等のファイルやアプリケーションログなどをファイルシステムに書き込むと、データが消失します。

Herokuにアプリケーションをデプロイする場合はログ出力先を標準出力に変更したり、S3にファイルをアップロードしたり、RedisやMemcachedなどにキャッシュを保存するなどファイルシステムを使わないように注意する必要があります。