본문 바로가기

Dev/PHP

[PHP] Ubuntu - Laravel 프로젝트 Heroku에서 MySQL 사용하기

 

 

 

이번 포스팅에서는 이전에 예고했던 DB를 포함한 Laravel 프로젝트를 Heroku에 배포하는 방법에 대해 알아보겠습니다.

 

본론에 앞서, 본 포스팅에서는 Laravel 프레임워크에 대한 지식이 있음을 전제합니다.

Heroku에서 MySQL을 추가하고 프로젝트의 테이블과 데이터를 삽입하는데 migrate, seed 명령을 사용하는데, 이에 대한 자세한 설명은 포함하지 않으므로 참고해주세요.

 

또한, 이 포스팅을 참고하기 전에 Heroku 계정 발급 및 애플리케이션 생성 및 프로젝트 배포까지 완료가 되어 있어야 하며, Linux에 Heroku CLI도 설치되어 있어야 합니다.

이에 대한 것은 아래의 링크를 사전에 참고하시면 도움이 됩니다.

 

2020/10/09 - [Dev/PHP] - [PHP] Ubuntu - Laravel 프로젝트 Heroku에 배포하기(DB 없음)

 

[PHP] Ubuntu - Laravel 프로젝트 Heroku에 배포하기(DB 없음)

본 포스팅에서는 Laravel 프로젝트를 Heroku에 배포하는 방법에 대해 알아보겠습니다. 본 포스팅은 Ubuntu Linux 사용자를 기준으로 하며, DB를 사용하지 않는 Laravel 프로젝트가 이미 준비되어있다는 것

dev-overload.tistory.com

 

 

0. 서론

heroku에서는 데이터베이스도 지원하는데, 기본적으로는 PostgreSQL을 권장하고 있습니다만 ClearDB라는 애드온을 통해 MySQL을 사용할 수 있습니다.

이번 포스팅에서는 생성한 애플리케이션에 프로젝트를 배포한 상태에서, ClearDB(MySQL) 애드온을 추가하는 방법, 그리고 추가한 ClearDB에 데이터를 삽입 해 Laravel 프로젝트에서 조회하는 내용까지를 포함합니다.

 

1. Heroku 로그인, clearDB 애드온 추가

$ heroku login
$ heroku addons:create cleardb:ignite -a {app 이름}

app 이름은 Heroku에서 추가한 애플리케이션의 이름을 의미합니다.

cleardb:ignite 옵션은, 무료 버전 애드온을 추가하겠다는 의미입니다.

위 명령어를 추가하면 신용카드 등록이 필요하다는 안내가 나올 것입니다.

신용카드를 등록한다고 해서 무언가 과금이 되는 것은 아닙니다.

 

아래의 링크로 이동해서 신용카드를 등록해야 합니다.

https://dashboard.heroku.com/account/billing 

 

Heroku

 

dashboard.heroku.com

 

위 링크에서 Billing Information 항목에서 Add Credit Card 버튼을 눌러 신용 카드 정보를 작성합니다.

 

Heroku 카드 등록

 

그리고 다시 addon 추가 명령어를 실행합니다.

 

위 사진과 같이 Created ~ 로 시작하는 문구가 보이면 정상적으로 addon이 추가된 것입니다.

 

heroku config 명령어를 입력하면 아래와 같이 추가된 ClearDB의 접속 정보를 확인할 수 있습니다.

 

이 정보를 토대로 ClearDB에 접속할 수 있습니다.

 

 

2. ClearDB 접속 및 DB 확인

터미널에서 접속하는 명령어는 아래와 같습니다.

$ mysql -u {user name} -h {host} -p {password2}
Enter Password: {password1}

 

그런데 아래와 같이 지원되지 않는 프로토콜이라며 접속이 되지 않는 현상이 발생할 수 있습니다.

 

 

이 경우에는 openssl.cnf 설정 정보를 수정해 주어야 합니다.

 

해당하시는 분은 아래의 링크를 참고해 openssl.cnf 내용을 수정해 주세요.

2020/10/11 - [Dev/etc] - SSL connection error로 인해 외부 MySQL 접속이 안되는 문제 해결

 

SSL connection error로 인해 외부 MySQL 접속이 안되는 문제 해결

본 기록은 우분투 리눅스를 기준으로 작성되었습니다. 터미널에서 mysql 명령어로 외부 MySQL 데이터 베이스에 접속하려 할 때, 다음과 같은 에러로 인해 접속이 안 되는 경우가 있습니다. 주로 AWS�

dev-overload.tistory.com

 

show databases; 명령어로 어떤 데이터 베이스가 있는지 확인해봅니다.

 

 

 

여기서 heroku_dd4fcbbc2413c0f라는 DB가 있는데 이름은 모두 다를 수 있으므로 예제에서의 DB 이름을 참고해서는 안됩니다.

본 예제에서는 이 DB에 테이블을 마이그레이션하고 프로젝트와 연동할 것입니다. (발급받은 계정으로는 권한이 없어 새 DB를 생성할 수가 없습니다.)

 

3. .env 파일 설정

Laravel 프로젝트로 돌아와 .env 파일을 열고 DB 항목 부분을 방금 전에 발급받은 ClearDB 접속 정보로 세팅해 줍니다.

# .env

DB_CONNECTION=mysql
DB_HOST={host}
DB_PORT=3306
DB_DATABASE={clear db에 접속해서 확인한 데이터베이스 이름}
DB_USERNAME={user name}
DB_PASSWORD={password1}

 

 

4. DB 마이그레이션

저는 예시에서 사용할 데이터 베이스 정보를 아래와 같이 정의했습니다.

 

 

본 예제에서는 마이그레이션 파일로 테이블 정보를 관리하도록 이미 세팅 해 두었습니다.

만약 마이그레이션에 대한 정보가 필요하신 분은 아래의 링크를 참고해 주세요.

2020/02/28 - [Dev/PHP] - [PHP] Laravel에서의 Mysql 연동 DB 마이그레이션

 

[PHP] Laravel에서의 Mysql 연동 DB 마이그레이션

*LAMP or LEMP 스택을 이미 구축한 상태임을 전제합니다. 본 포스팅의 주제는 Mysql 연동과 Database 마이그레이션 입니다. 1. Mysql 접속, Database 생성 DB생성은 workbench 혹은 phpMyAdmin등의 별도 도구를..

dev-overload.tistory.com

 

그리고 아래의 명령어로 seeder 파일을 생성해 주었습니다.

 

$ php artisan make:seeder CountryTableSeeder

 

위 명령어를 수행하면 database/seeders 폴더에 CountryTableSeeder.php 파일이 생성됩니다.

저는 아래와 같이 데이터를 세팅해 주었습니다.

 

<?php
    namespace Database\Seeders;

    use Illuminate\Database\Seeder;
    use Illuminate\Support\Facades\DB;

    class CountryTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */

        public function run()
        {
            DB::table('country')->insert([
                'continent' =>'Asia',
                'country' => 'Korea',
                'updated_at' => date('Y-m-d H:i:s'),
                'created_at' => date('Y-m-d H:i:s')
            ]);

            DB::table('country')->insert([
                'continent' =>'Asia',
                'country' => 'Japan',
                'updated_at' => date('Y-m-d H:i:s'),
                'created_at' => date('Y-m-d H:i:s')
            ]);

        }
    }

 

아래의 명령어로 데이터베이스를 마이그레이션 해 줍니다.

 

$ php artisan migrate
$ php artisan db:seed --class=CountryTableSeeder

 

 

5. Heroku 갱신 배포

아래의 명령어로 저장소를 업데이트하고 프로젝트를 빌드합니다.

$ git add
$ git commit -m 'database added'
$ git push heroku master

 

Project Build

 

이제, Heroku URL에서 정의한 route로 접속해서 데이터를 제대로 뿌려주고 있는지 확인합니다.

 

 

정상적으로 마이그레이션 한 데이터가 출력되고 있음을 확인했습니다.

이것으로 Ubuntu - Heroku에서 Laravel 프로젝트 - MySQL 사용하기에 대한 포스팅을 마치겠습니다.