5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[2021.12] Docker環境で開発後Laravelをherokuにdeploy ( DBはMySQL)

Last updated at Posted at 2021-12-18

前提

すでにローカルでLaravelは構築されていること

まず以下の3つがポイント

  • Procfileを作る
  • AppServiceProvider.phpにSchema::defaultStringLength(191);の追記
  • heroku への DB情報追加の際にタイポミスがない事

###プロジェクトファイルのPathに移動する(ターミナルで実施),Dockerの外で実施

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

###heroku CLI をインストール
参考:https://devcenter.heroku.com/articles/heroku-cli

terminal
brew tap heroku/brew && brew install heroku

エラー

terminal
-Error: The following formula cannot be installed from bottle and must be
built from source.
  heroku
Install the Command Line Tools:
  xcode-select --install

エラー文の通り以下を実施し

terminal
  xcode-select --install

-再度以下を実施し、通過!!

terminal
brew tap heroku/brew && brew install heroku

インストールできたら

terminal
heroku login

ブラウザが立ち上がりログインが求められる

デプロイしたいフォルダに移動して

次に

terminal
heroku create あなたのアプリ名 --buildpack heroku/php

CLI上にもアプリができます。

次にherokuとローカルを紐付けます。

terminal
heroku git:remote -a pt-app1

一旦今までの修正をherokuにpushします

terminal
git add .
git commit -m "make it better"
git push heroku master

次に開発してるアプリのディレクトリーの/直下にProcfileを作成

terminal
-touch Procfile

以下をProcfileに追記します。

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

次にvarcharの文字数を191文字にする

Procfileを追加し、herokuへpush...の前に、データベースのvarchar型の191byteに変更します。
herokuの無料プランでは、通常の文字数である255byteだと規定のデータ量を超えてしまい、マイグレーションする際にエラーが発生してしまいます。

app>Providers直下にあるAppServiceProvider.phpを以下のように編集します。
app\Providers\AppServiceProvider.php

AppServiceProvider.php
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

public function boot(){
  Schema::defaultStringLength(191);
}
terminal
 git add -A .
 git commit -m "Add Procfile + varchar = 191"
 git push heroku master

もしここでエラーが出たら、
Procfileの追加か、
Schema::defaultStringLength(191);
の変更を一つづ git push heroku masterすると分かりやすい。

次に
データベース情報を確認

クレジットカード登録が必須です。

terminal
heroku addons:add cleardb
heroku config | grep CLEARDB_DATABASE_URL

CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true

DB情報をheroku CLI https://dashboard.heroku.com/apps 
に入力。ターミナルからでも可能。(私はターミナルでsetした情報がCLIに反映されていなかったので、どちらも確認するといいかもしれません)

以下実行

terminal
heroku config:set DB_DATABASE=あなたの DB名
heroku config:set DB_HOST=あなたのホスト名
eroku config:set DB_USERNAME=あなたのユーザー名
heroku config:set DB_PASSWORD=あなたのパスワード

heroku config:set APP_KEY=$(php artisan key:generate --show)
私はこれが記入されなかった。※1
$ heroku config:set APP_ENV=heroku
$ heroku config:set LANG=ja_JP.UTF-8
$ heroku config:set TZ=Asia/Tokyo

※1 heroku config:set APP_KEY=$(php artisan key:generate --show)
が通らない時は、 
.env ファイルの
APP_KEY をCLIに記入する

ターミナルでherokuに追加した DB情報を確認するには

terminal
heroku config

CLEARDB_DATABASE_URLの情報とherokuへの入力内容が一致していたら

マイグレーションを実行

terminal
heroku run php artisan migrate

ここでuserがsqlに「すでにありますよのエラーが発生

terminal
heroku run php artisan migrate:fresh

マイグレーションに成功したら以下を実施

terminal
heroku open

herokuへのアップデート

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

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

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

補足

途中 composer updateをしてしにかけました
https://qiita.com/natsukiiiii/items/c9bbe0aeb7cbd1ad159e

参考
https://qiita.com/yukibe/items/5c1910e259ff4e6498db
https://qiita.com/youth_case/items/fb821dcb351c7542030f

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?