[2020년 12월판] heroku 배포 시 DB 설정 정리

10314 단어 경 6PostgreSQL
heroku에 응용 프로그램을 배포 할 때 DB 배포 설정에 대해 설명합니다.

앱 자체를 배포하는 방법은 Heroku에 laravel 애플리케이션을 배포하는 방법에서 설명합니다.

↑ 기사의 순서 6(heroku의 config를의 설정)를 마친 근처에서 이 기사의 DB 설정을 하면 부드럽게 진행될 수 있을까 생각합니다.

거친 절차



① 애드온 설정
②heroku의 config 설정
③Laravel의 DB 접속 정보 설정
④ 로컬(자신의 PC)에 postgreql 설치

절차 1 애드온 설정



heroku의 추가 기능을 사용합니다.

1.Resources에서 add on 버튼을 클릭


2.Heroku Postgres 선택


3. 열린 화면에서 설치 버튼을 누릅니다.


postgresql 애드온 " ← heroku에 로그인 한 경우 여기에서 직접 액세스 할 수 있습니다.

4. 플랜 및 애드온(DB)을 사용하는 애플리케이션 선택


선택이 끝나면 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 자격 증명을 표시한 상태에서 애플리케이션 측의 설정 탭 표시
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입니다!

좋은 웹페이지 즐겨찾기