HerokuにLaravel+MySQL環境をデプロイする
heroku上にlaravel環境を構築したのでメモ。
前提条件
作業は下記をインストール済の環境で行なっている。また、事前にHerokuへの登録を済ましておく必要がある。
laravelプロジェクトの作成
以下コマンドでlaravelプロジェクトを作成する。myApp
には任意のディレクトリ名を指定する。
$ composer create-project laravel/laravel myApp
herokuアプリの作成
作成したディレクトリに移動し、herokuアプリを作成する。myApp
には任意のアプリ名を指定する。
$ cd myApp $ heroku login $ heroku create myApp --buildpack heroku/php
これでheroku上にアプリとgitリポジトリが作成される。
ex) https://myApp.herokuapp.com/ | https://git.heroku.com/myApp.git
gitの登録
herokuのgitリモートリポジトリが利用できるようになったので、ローカルにもgitを作成する。
$ git init $ heroku git:remote -a myApp // リモートリポジトリを登録
これでHeroku上のgitリポジトリにソースコードをpushできるようになる。 laravelプロジェクトをpushしておく。
$ git add -A . $ git commit -m "first commit" $ git push heroku master
clearDBの作成
続いてデータベースを利用できるようにする。
herokuに用意されているMySQL互換のclearDB
アドオンを使用する。
heroku addons:add cleardb
登録が成功すると、heroku config
コマンドから作成したデータベースのURLを確認できる。
heroku config CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true```
herokuに作成したデータベースの設定を行う。先ほど確認したURLを元に、以下を設定する。
$ heroku config:set DB_DATABASE=[データベース名] $ heroku config:set DB_HOST=[ホスト名] $ heroku config:set DB_USERNAME=[ユーザー名] $ heroku config:set DB_PASSWORD=[パスワード]
なお、作成したデータベースにはmysql
コマンドから接続できる。
$ mysql -u [ユーザー名] -h [ホスト名]
マイグレーションの実行
clearDBはデフォルトはMySQL5.6互換であるため、AppServiceProvider
にデフォルトのインデックス用文字列長の設定を行う必要がある。
(参照:インデックス長とMySQL/MariaDB)
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; // 追加 class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); // 追加 } }
上記変更をpushした後、migrateを実行できるようになる。
$ git add -A . $ git commit -m "デフォルトのインデックス用文字列長を191に変更" $ git push heroku master
$ heroku run php artisan migrate
Procfile 作成
herokuに、アプリを起動するために実行すべきコマンド及びアプリケーションのドキュメントルートを設定する。
設定はProcfile
を作成し、そのなかに記述する。
$ touch Procfile
Procfile
に下記を追加する(webサーバにnginxを、ドキュメントルートにpublic/
を指定している)。
web: vendor/bin/heroku-php-nginx public/
作成が完了したらpushしておく。
$ git add -A . $ git commit -m "Procfile" $ git push heroku master
APP_KEYの設定
APP_KEYが必要なのでherokuに設定しておく。
heroku config:set APP_KEY=$(php artisan key:generate --show)
ここまで設定したら、laravelの初期画面が表示されるようになる。
heroku open
参考文献
- Laravel5.7: Herokuにデプロイする
- [Heroku データベースの管理(ClearDB アドオンによる MySQL の利用)])http://www.ownway.info/Ruby/heroku/how/management/database/cleardb)
- ClearDB MySQL#Local setup
- Deploying PHP Apps on Heroku