4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

[2020年12月版]herokuデプロイ時のDB設定まとめ

herokuにアプリケーションをデプロイする時のDB導入設定について解説します。

アプリ自体のデプロイ方法はHerokuにlaravelアプリケーションをデプロイする方法 にて解説してます。

↑記事の手順6(herokuのconfigをの設定)を終えたあたりでこの記事のDB設定をすればスムーズに進められるかと思います。

ざっくり手順

①アドオン設定
②herokuのconfig設定
③LaravelのDB接続情報設定
④ローカル(自分のPC)にpostgreqlインストール

手順1 アドオン設定

herokuのアドオンを利用します。

1.Resourcesからadd onボタンをクリック
image.png

2.Heroku Postgresを選択
image.png

3.開いた画面でインストールボタンを押す
image.png

postgresql アドオン」←herokuにログイン済なら、ここから直接アクセスできます。

4.プランとアドオン(DB)を使うアプリケーションを選択
image.png

選択が終わったらSubmit Order Formボタンを押します。

手順2 config設定

5.Config Vars追記
4を終えるとDashboardのResourceタブへ遷移します。
ここからはDBに接続するためのconfig設定をしていきます。

まず、PostgresqlのDB情報を確認しましょう。
Add-onsからHeroku Postgresの部分をクリック
image.png

別タブでDatastoresという画面が開かれるので、ここからSettingsタブ > Database Credentials をクリック
ここで表示される情報がDBを使うための認証情報になります。
image.png

別タブでDBの認証情報を表示した状態で、アプリケーション側のSettingsタブを表示
Config VarsにDB接続情報を設定していきます。

追加で設定する項目は下記の6つ
DB_CONNECTIONにpgsqlを入力する以外は、別タブで開いているDBの認証情報を入力していきます。
image.png

コマンドで設定する時は↓のようなやり方になります。

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です!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?