世界を旅して暮らしたい放浪エンジニアブログ

HerokuにLaravelをデプロイする方法

今回はPaasとして有名なHerokuにLaravelのアプリをデプロイしてみたいと思います。

[ 目次 ]

はじめに

こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回は、PaaSHerokuにLaravelアプリをデプロイする方法をまとめていきたいと思います。Herokuの新規登録からデプロイまで行なっていきます。

Heroku

【前提】

  • Laravelコマンドなど開発環境が構築できていること
  • gitコマンドが利用できる状態であること
  • HerokuではRDBとしてPostgreSQLを利用する
  • メール送信は利用しないので扱わない

Herokuとは

PaaS(Platform as a Service)の1つでWEBサービスのアプリケーションを実行する為のプラットフォームです。
Web/APサーバーやDBサーバー、OSなどを提供してくれるプラットフォームで、利用者のサーバー構築や運用の手間を省いてくれます。

対応している言語は以下になります。

  • Node
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

詳細はこちらをご確認ください。

無料枠が用意されていますので、プロトタイプの作成や開発環境などにも有効活用できます。

価格設定についてはこちらをご確認ください。

Herokuの新規登録

公式サイト からアカウントの新規登録を行っていきます。

Herokuホーム

新規登録画面から新規登録してください。
以下の入力が必要になります。

  • First name : 苗字
  • Last name : 名前
  • Email address : メールアドレス
  • Company name : 会社名 -> 任意なので個人利用の場合は空欄にします
  • Role : 役職 -> 適したものを選択してください。
  • Country : 国
  • Primary development language : 主な開発言語 -> 今回はPHPにしました。デフォルトのbuildpacksとしてPHPが追加されます。もちろん他の言語のアプリもデプロイできます。

Heroku新規登録

新規登録後、認証メールが届きますので、そちらのURLをクリックしパスワード設定画面からパスワードを設定します。

Herokuパスワード設定

パスワード設定が完了したらログイン画面からログインを試してみてください。
ログイン後、ダッシュボード画面に遷移できればHerokuの新規登録/ログインは完了です。

Herokuログイン

Heroku CLIのインストール

Heroku CLI をインストールして、herokuコマンドで操作できるようにしましょう。私はMacを利用しているのでbrewを利用したインストールを行っています。
以下のコマンドからインストールを行いましょう。

$ brew tap heroku/brew && brew install heroku

他のOSについては試していませんが、公式を参考にインストールして頂ければと思います。
バージョンを確認するオプションなどを利用してherokuコマンドのインストールを確認してみてください。

$ heroku --version

Laravel5.7のプロジェクト作成

既にLaravelの開発環境ができていることを前提としています。
まずは、laravelコマンドを使ってプロジェクトを作成します。

$ laravel new heroku-x-laravel-sample

php artisan serveなどサーバーを起動してデフォルトの画面が表示されることを確認してください。
サーバーはご自身の開発環境に合わせてセットアップ&起動してください。

以下の画面が表示されればOKです。

Laravelデフォルト画面

今回はDBやメールなどの開発環境の設定は省きます

Herokuからアプリを作成

Herokuのダッシュボードからアプリを作成していきます。
ダッシュボードの "Create new app"ボタンを押下します。

Herokuダッシュボード

アプリ名称を入力し登録します。リージョンは"United State"のままにします。
(Freeプランでは、リージョンはアメリカかヨーロッパしか利用できません)

Herokuアプリ作成

アプリ作成後はDeploy画面に遷移します。
デプロイはこちらの画面にコマンドがあるので "Heroku CLI"を利用してデプロイしていきます。

HerokuアプリDeploy

Heroku CLIを利用してLaravelアプリをデプロイ

先ほど作成したLaravelのプロジェクトルート"heroku-x-laravel-sample"で作業していきます。
Heroku CLIを利用したコマンド操作になります。

Heroku CLIのセットアップ

まずは、ターミナルからHerokuにログイン

$ heroku login

Herokuのリモートリポジトリを追加します。

$ git init
$ heroku git:remote -a heroku-x-laravel-sample

$ # git remote コマンドでリポジトリが設定されたか確認
$  git remote -v

Procfileを作る

LaravelのプロジェクトルートにProcfileを作成します。

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

国際化用拡張モジュール(intl)を利用する

国際化用拡張モジュール(intl) がHerokuではインストールされないようなので、composerで追加します。

Laravelのプロジェクトルートで以下のコマンドを実行し、ライブラリを追加します

$ composer require ext-intl:*

composer.jsonrequireext-intlが追加されていればHerokuへのデプロイ時にライブラリがインストールされます。

アプリの環境変数を設定する

今回はコマンドで操作しますが、ブラウザからも設定可能です。

Herokuアプリ設定

Laravelの環境変数を追加します。

$ heroku config:set APP_NAME=heroku-x-laravel-sample \
APP_ENV=production
APP_KEY=$(php artisan key:generate --show)  \
DEBUGBAR_ENABLED=true \
APP_URL=https://heroku-x-laravel-sample.herokuapp.com/ \
SESSION_DRIVER=file

Herokuにpushしてデプロイ

以下のコマンドを実行してHerokuにpushします。
pushするとデプロイが実行されます。

$ git add .
$ git commit -am "Initial Commit"
$ git push heroku master

アプリを確認する

Herokuのアプリ画面の右上にある"Open app"を押下しアプリを確認しましょう
Laravelのデフォルト画面が表示できれば成功です。

Laravelデフォルト画面

データベースとしてPostgreSQLを利用する

HerokuのアドオンとしてPostgreSQLを追加します。無料枠では1万レコードまで利用できます。
まずは、無料枠で試してみましょう。
詳細はこちら

PostgreSQLのアドオンを追加

以下のコマンドでPostgreSQLを追加します。

$ heroku addons:create heroku-postgresql:hobby-dev

Laravelの環境編集にデータベース設定を追加

$ # 追加したデータベースの設定を確認
$ heroku config:get DATABASE_URL
postgres://[ユーザ名]:[パスワード]@[ホスト]:5432/[DB名]

$ # 環境変数に追加
$ heroku config:set \
DB_CONNECTION=pgsql \
DB_HOST=<ホスト> \
DB_DATABASE=<DB名> \
DB_USERNAME=<ユーザ名> \
DB_PASSWORD=<パスワード>

データベースの初期設定(マイグレーション&シーディング)

$ heroku run php artisan migrate --seed
**************************************
*     Application In Production!     *
**************************************

 Do you really wish to run this command? (yes/no) [no]:
 >yes

エラーなくマイグレーションが完了したらDBの設定も完了です。

JavaScript, css(sass)をHeroku上でビルドする

Herokuを本番環境として利用している場合、Heroku上でJavaScript, css(sass)をproductionビルドしたいケースがあります。その際の手順をまとめます。

Herokuアプリbuildpacks

現状、buildpacksにはphpしかありません。
ここにnodejsを追加します。

buildpacksにnodejsを追加

JavaScript, css(sass)のビルドに必要となるnodejsをbuildpacksに追加します。

$ heroku buildpacks:add heroku/nodejs

package.jsonにpostinstallを追加

"scripts": {
    "dev": "npm run development",
    "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "npm run development -- --watch",
    "watch-poll": "npm run watch -- --watch-poll",
    "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
    "prod": "npm run production",
    "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",

   "postinstall": "npm run prod"
},

Herokuのデプロイ時にpostinstallを実行してくれるようです。
Herokuにpushしてエラーがないことを確認しましょう。

最後に

今回はHerokuでLaravelを利用する方法をまとめました。
今後は他の言語やフレームワークのHerokuデプロイも試してみたいと思います。

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts