Herokuを利用して、Laravelのアプリのデプロイを行います。その一連の手順をメモします。
DBにはMySQLを利用したいので、その設定も行います。
###前提
・laravelアプリが作成済み
・Herokuアカウント取得済み
・Heroku CLI導入済み
・DBにはMySQLを利用します。
###Procfileの作成
まずはLaravel側の設定を行います。
ProcfileというHerokuの設定ファイルを作成。サーバーにApacheを使うこと、public/をドキュメントルートとすることを宣言するために使います。アプリフォルダの直下に作成してください。
web: vendor/bin/heroku-php-apache2 public/
###DBの文字数の設定
Herokuではvarchar型の文字数はデフォルトの255では大きすぎるため191に設定します。
app\Providers\AppServiceProvider.phpのboot()に設定します。
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
###アプリをhttpsに対応させる
本番環境の場合にhttpsを強制します。こちらもapp\Providers\AppServiceProvider.phpのboot()に設定します。
public function boot()
{
if (\App::environment('production')) {
\URL::forceScheme('https');
}
}
Laravel側の設定は以上です。ほかにもあるとは思いますが、これらをしておけば少なくともデプロイには成功すると思います。
###Herokuへのログイン
$ Heroku login
###Herokuアプリの作成、デプロイ
Herokuアプリを作成します。
$ heroku create myapp –buildpack heroku/php
デプロイはGitを利用したHerokuアプリへのプッシュによって行います。
なのでまずHerokuアプリをリモートとして登録します。myappのところは先ほど作成したHerokuアプリを指定します。
$ heroku git:remote -a myapp
このHerokuリモートにプッシュしてデプロイします。変更点のコミットを忘れずにしましょう。
$ git add .
$ git commit -m 'Add Procfile, varcher length, force https'
$ git push heroku master
###DBとしてMySQLを利用
HerokuはデフォルトのDBがPostgreSQLであるため、MySQLを使うためにはアドオン「ClearDB」を利用して設定を変更します。
ClearDBは利用自体は無料ですが、クレジットカードの登録が必要となります。Herokuのサイトから行うことができます。
クレカの登録をしたら、下記コマンドでClearDBのインストールをします。
$ heroku addons:add cleardb
###環境変数の設定
アプリの環境変数は.envなどに定義しますが、それらはデプロイされません。したがって環境変数はHerokuアプリに定義する必要があります。
下記コマンドで設定ができます。
$ heroku config:set キー=値
###DBの環境設定
まずは自分のClearDBのURLを確認します。
$ heroku config:get CLEARDB_DATABASE_URL
mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
各キー、値を登録します
$ heroku config:set DB_DATABASE=[データベース名]
$ heroku config:set DB_HOST=[ホスト名]
$ heroku config:set DB_USERNAME=[ユーザー名]
$ heroku config:set DB_PASSWORD=[パスワード]
###その他の環境設定
$ heroku config:set APP_KEY=$(php artisan key:generate --show)
$ heroku config:set APP NAME=myapp
$ heroku config:set APP_ENV=heroku
このほかにもメールやapi等の各種環境変数もここで設定します。
###マイグレーションの実行
$ heroku run php artisan migrate
$ heroku open
マイグレーションを実行し、成功したらサイトにアクセスしてみましょう。
下のようなエラーが出た場合、MySQLのvarchar型の文字数を変更がうまくいっていません。
Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes