Laravelをherokuにデプロイする(データベースはPostgreSQL)

プロジェクトファイルのPathに移動する

$ cd (プロジェクトのディレクト)

Laravelプロジェクトファイルを作成

ディレクトリでLaravelをインストールする(今回はLaravel 5.5系で行う)

$ composer create-project --prefer-dist laravel/laravel HerokuLaravel "5.5.*"
$ cd HerokuLaravel

herokuにログイン

$ heroku login
# Email: $ xxx@gmail.com
# Password:  $ *******

Logged in as xxx@gmail.com

herokuにLaravelアプリのためのアプリを作成

herokuアプリを作成する

$ heroku create laravel-mysql --buildpack heroku/php

heroku-laravelがherokuで表示されるアプリ名

$ git init
$ heroku git:remote -a <herokuのアプリ名>
$ git add .
$ git commit -m "make it better"
$ git push heroku master

ターミナルからherokuアプリを開く

$ heroku open

サイト表示。 (ただし、エラーです)

Heroku Procfileの作成

用途がよくわかりませんが、プロジェクト直下にProcfileを作成

$ touch Procfile

HerokuLaravelのプロジェクトファイルにProfileが作成される。

Procfileをそのまま編集します。(ファイルの中身は空でした)

Procfile.txt
web: vendor/bin/heroku-php-apache2 public/

Procfile.txtではないが便宜上。
そのあと、もう一度herokuに変更点をプッシュする

$ git add -A .
$ git commit -m "Add Procfile"

[master 32ec3cc] Add Procfile
 1 file changed, 1 insertion(+)
$ git push heroku master

Counting objects: 3, done.

herokuのアドオンにPostgreSQLを作成する

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

各種設定

編集リクエスト頂いて初めて知りました。2パターンあります。

一括設定の場合

$ heroku config:set DB_CONNECTION=pgsql $(heroku config:get DATABASE_URL | awk '{print gensub(/postgres:\/\/(.+):(.+)@(.+):5432\/(.+)/, "DB_USERNAME=\"\\1\" DB_PASSWORD=\"\\2\" DB_HOST=\"\\3\" DB_DATABASE=\"\\4\"", "g")}')


[結果]
Setting XXX

個別設定の場合

$ heroku config:get DATABASE_URL

# メモしよう
postgres://<ユーザ名>:<パスワード>@<ホスト>:5432/<DB名>
$ heroku config:set DB_CONNECTION=pgsql
$ heroku config:set DB_HOST=<ホスト>
$ heroku config:set DB_DATABASE=<DB名>
$ heroku config:set DB_USERNAME=<ユーザ名>
$ heroku config:set DB_PASSWORD=<パスワード>

[結果]
Setting XXX

DBのマイグレーション

Do you really wish to run this command? (yes/no) [no]で止まったら yoryesを入力してEnter。

$ heroku run php artisan migrate

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

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

マイグレーションをやり直したい場合

# (マイグレーションをやり直したい場合)
> heroku run php artisan migrate:refresh --seed

アプリの情報を設定する

$ heroku config:set DEBUGBAR_ENABLED=true
$ heroku config:set APP_KEY=$(php artisan key:generate --show)

サイトを表示

$ heroku open

これで行けると思います。

herokuへのアップデート

次からリリースのたびにherokuにソースコードやDBをpushしたい場合は

# ソースコードをあげる
$ git add -A .
$ git commit -m "コミットメッセージ"
$ git push heroku master

# DBに変更があった場合
# マイグレーションとシーディングを実行
$ heroku run php artisan migrate --seed

で更新できる。

2、3度失敗したため、本番で失敗したくないのでメモがわりに残します。
次はMySQLでの設定方法をなんとかしたい(願望)。

補足

こちらを参考にされる方はこのやり方の賞味期限はだいたい3ヶ月なのでそれを過ぎるとこれで出来るかは保証できませんのでまたググってください。