Herokuにアプリケーションをデプロイする方法(Laravel編)
開発したアプリケーションをインターネットに公開する際に、VPSやAWSのEC2を利用できます。
しかし、VPSやEC2などのサービスは基本的にサーバの管理を自身で行わなければいけません。
サーバ管理ではディスク容量に十分な空きスペースがあるか、CPUやメモリなどのリソースに余裕があるかなど、様々なメトリクス(指標)を把握・管理しなければいけないため、インフラが得意でなかったりアプリケーションの開発に集中したい場合などには時間をかけられない・かけたくない時もあります。
Herokuではインフラの管理はすべてマネージド(Herokuが管理してくれる)ので、サーバを管理する必要がなくなります。
この記事ではLaravelアプリケーションをHerokuにデプロイする方法について説明します。
Herokuとは
Herokuはアプリケーションを実行するための環境を用意してくれるプラットフォームで、サーバの管理の他、アドオンを追加することでAWS S3やデータベースサーバを追加することもできます。
またビルドパックと呼ばれるビルド設定を追加したり、自身でビルドスクリプトを記述することでPHPやNode.js、Javaなど様々な言語のアプリケーションをデプロイできます。
Herokuを使ってみる
※アプリケーションは既に作成済みの前提です。この記事では新しいLaravelプロジェクトでアプリケーションをデプロイします。
※アカウントは登録済の前提です。アカウントがない場合は次のページから登録できます。
Herokuの操作は管理画面からもできますが、CLI(コマンドラインインターフェース)も提供されています。
この記事ではCLIからの操作を説明します。
Heroku CLIをインストールする
次のページのガイドに従って、Heroku CLIのインストールおよびheroku login
コマンドまで実行します。
アプリケーションを作成する
次のコマンドでアプリケーションを作成できます。
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ではいくつかのプロセスを実行することができます。
アプリケーションをWEBで公開する際にはweb
プロセスを実行する際のコマンドを指定する必要があります。
プロセスを実行する際のコマンドを指定するには、プロジェクトのルートディレクトリ(Laravelであればartisan
ファイルと同じディレクトリ)に次のようなProcfile
を作成します。
web: $(composer config bin-dir)/heroku-php-apache2 public
このようにweb
プロセスを指定すると、public
ディレクトリをドキュメントルートとしてApacheのプロセスが起動されます。
public/.htaccess
に相当するNginxの設定ファイルを追加すれば、Nginxでweb
プロセスを起動することもできます。
環境変数を設定する
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などにキャッシュを保存するなどファイルシステムを使わないように注意する必要があります。