技術メモなど

業務や日々のプログラミングのなかで気になったことをメモしています。PHP 成分多め。

HerokuにLaravel+MySQL環境をデプロイする

heroku上にlaravel環境を構築したのでメモ。

前提条件

作業は下記をインストール済の環境で行なっている。また、事前にHerokuへの登録を済ましておく必要がある。

  • php7.1
  • composer1.8.4
  • heroku-cli/6.14.4 (darwin-x64) node-v12.1.0
  • git2.9.2

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

参考文献