herokuにアプリケーションをデプロイする時のDB導入設定について解説します。
アプリ自体のデプロイ方法はHerokuにlaravelアプリケーションをデプロイする方法 にて解説してます。
↑記事の手順6(herokuのconfigをの設定)を終えたあたりでこの記事のDB設定をすればスムーズに進められるかと思います。
ざっくり手順
①アドオン設定
②herokuのconfig設定
③LaravelのDB接続情報設定
④ローカル(自分のPC)にpostgreqlインストール
手順1 アドオン設定
herokuのアドオンを利用します。
postgresql アドオン」←herokuにログイン済なら、ここから直接アクセスできます。
選択が終わったらSubmit Order Formボタンを押します。
手順2 config設定
5.Config Vars追記
4を終えるとDashboardのResourceタブへ遷移します。
ここからはDBに接続するためのconfig設定をしていきます。
まず、PostgresqlのDB情報を確認しましょう。
Add-onsからHeroku Postgresの部分をクリック
別タブでDatastoresという画面が開かれるので、ここからSettingsタブ > Database Credentials をクリック
ここで表示される情報がDBを使うための認証情報になります。
別タブでDBの認証情報を表示した状態で、アプリケーション側のSettingsタブを表示
Config VarsにDB接続情報を設定していきます。
追加で設定する項目は下記の6つ
DB_CONNECTIONにpgsqlを入力する以外は、別タブで開いているDBの認証情報を入力していきます。
コマンドで設定する時は↓のようなやり方になります。
DATABASE_URL=postgres://<USERNAME>:<PASSWORD>@<HOST>:5432/<DB名>
heroku config:set DB_CONNECTION=pgsql
heroku config:set DB_USERNAME=<USERNAME>
heroku config:set DB_PASSWORD=<PASSWORD>
heroku config:set DB_HOST=<HOST>(ec2...からはじまる)
heroku config:set DB_DATABASE=<DB名>
※ DB_PORTはデフォルト設定を使えるので指定してもしなくてもOK
// アドオンの一覧確認
heroku addons
Add-on Plan Price State
───────────────────────────────────────────── ───────── ───── ───────
heroku-postgresql (postgresql-colorful-44259) hobby-dev free created
└─ as DATABASE
手順3 config設定
6.LaravelのDB接続情報の設定
herokuの接続情報は.envと異なるため、config/database.php
を書き換えます。
以下、公式リファレンスより抜粋
// 1.useの下に追加
$DATABASE_URL = parse_url(getenv("DATABASE_URL"));
return [
// 2. デフォルト値をpgsqlに書き換え
'default' => env('DB_CONNECTION', 'pgsql'),
// …
'connections' => [
// …
// 3.追加
'pgsql' => [
'driver' => 'pgsql',
'host' => $DATABASE_URL["host"],
'port' => $DATABASE_URL["port"],
'database' => ltrim($DATABASE_URL["path"], "/"),
'username' => $DATABASE_URL["user"],
'password' => $DATABASE_URL["pass"],
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'require',
],
// 元々の接続設定はコメントアウトで残しておくのを推奨
// 'pgsql' => [
// 'driver' => 'pgsql',
// 'url' => env('DATABASE_URL'),
// 'host' => env('DB_HOST', '127.0.0.1'),
// 'port' => env('DB_PORT', '5432'),
// 'database' => env('DB_DATABASE', 'forge'),
// 'username' => env('DB_USERNAME', 'forge'),
// 'password' => env('DB_PASSWORD', ''),
// 'charset' => 'utf8',
// 'prefix' => '',
// 'prefix_indexes' => true,
// 'schema' => 'public',
// 'sslmode' => 'prefer',
// ],
// …
],
// …
];
ここで2の'default' => env('DB_CONNECTION', 'pgsql')に注目してください。
.env
があるローカル環境では、.env
のDBの接続設定にmysqlを指定していれば、「ローカルではmysqlのDB、herokuではpostgreqlのDB」という使い分けを勝手してくれます。
ローカル・heroku共に一つのRDBMSを使う時は↓のように書き換える必要があります。
'pgsql' => [
'driver' => 'pgsql',
'host' => isset($DATABASE_URL["host"]) ?? null,
'port' => isset($DATABASE_URL["port"]) ?? null,
'database' => isset($DATABASE_URL["path"]) ? ltrim($DATABASE_URL["path"], "/") : null,
'username' => isset($DATABASE_URL["user"]) ?? null,
'password' => isset($DATABASE_URL["pass"]) ?? null,
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'require',
],
ローカルの設定が終わったらpushして反映する。
git add .
git commit -m "modify config for connect heroku DB"
git push origin master
git push heroku master
手順7 ローカル(PC自体)にpostgresqlをインストール
手順6まで終えたら下記のコマンドを実行することでheroku上のDBに接続することができます。
heroku pg:psql DATABASE_URL
コマンドの結果、↓のようなエラーが出るかもしれません。
$ heroku pg:psql DATABASE_URL
--> Connecting to postgresql-colorful-44259
▸ The local psql command could not be located. For help installing psql, see
▸ https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
heroku CLIでpostgreqlを使用するには、ローカル環境にもポスグレを入れる必要があるため、下記のコマンドでインストールしましょう。
※ brewコマンドがうまくいかない場合はこちらを参考にHome brewのインストールをしてください。
brew install postgresql
インストールが終わったら、再度試してみましょう。
$ heroku pg:psql DATABASE_URL
--> Connecting to postgresql-colorful-44259
psql (13.1, server 12.5 (Ubuntu 12.5-1.pgdg16.04+1))
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
protected-waters-42026::DATABASE=>
コマンドラインの表示がDATABASEに変わったらDBの設定はOKです!