HerokuにLaravelをデプロイする方法
今回はPaasとして有名なHerokuにLaravelのアプリをデプロイしてみたいと思います。
[ 目次 ]
はじめに
こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。
今回は、PaaSのHerokuにLaravelアプリをデプロイする方法をまとめていきたいと思います。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の新規登録
公式サイト からアカウントの新規登録を行っていきます。
新規登録画面から新規登録してください。
以下の入力が必要になります。
- First name : 苗字
- Last name : 名前
- Email address : メールアドレス
- Company name : 会社名 -> 任意なので個人利用の場合は空欄にします
- Role : 役職 -> 適したものを選択してください。
- Country : 国
- Primary development language : 主な開発言語 -> 今回はPHPにしました。デフォルトのbuildpacksとしてPHPが追加されます。もちろん他の言語のアプリもデプロイできます。
新規登録後、認証メールが届きますので、そちらのURLをクリックしパスワード設定画面からパスワードを設定します。
パスワード設定が完了したらログイン画面からログインを試してみてください。
ログイン後、ダッシュボード画面に遷移できれば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です。
今回はDBやメールなどの開発環境の設定は省きます
Herokuからアプリを作成
Herokuのダッシュボードからアプリを作成していきます。
ダッシュボードの "Create new app"ボタンを押下します。
アプリ名称を入力し登録します。リージョンは"United State"のままにします。
(Freeプランでは、リージョンはアメリカかヨーロッパしか利用できません)
アプリ作成後はDeploy画面に遷移します。
デプロイはこちらの画面にコマンドがあるので "Heroku CLI"を利用してデプロイしていきます。
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.json
のrequire
にext-intl
が追加されていれば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のデフォルト画面が表示できれば成功です。
データベースとして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ビルドしたいケースがあります。その際の手順をまとめます。
現状、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デプロイも試してみたいと思います。