이번 포스팅에서는 이전에 예고했던 DB를 포함한 Laravel 프로젝트를 Heroku에 배포하는 방법에 대해 알아보겠습니다.
본론에 앞서, 본 포스팅에서는 Laravel 프레임워크에 대한 지식이 있음을 전제합니다.
Heroku에서 MySQL을 추가하고 프로젝트의 테이블과 데이터를 삽입하는데 migrate, seed 명령을 사용하는데, 이에 대한 자세한 설명은 포함하지 않으므로 참고해주세요.
또한, 이 포스팅을 참고하기 전에 Heroku 계정 발급 및 애플리케이션 생성 및 프로젝트 배포까지 완료가 되어 있어야 하며, Linux에 Heroku CLI도 설치되어 있어야 합니다.
이에 대한 것은 아래의 링크를 사전에 참고하시면 도움이 됩니다.
2020/10/09 - [Dev/PHP] - [PHP] Ubuntu - Laravel 프로젝트 Heroku에 배포하기(DB 없음)
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
위 링크에서 Billing Information 항목에서 Add Credit Card 버튼을 눌러 신용 카드 정보를 작성합니다.
그리고 다시 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 접속이 안되는 문제 해결
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 마이그레이션
그리고 아래의 명령어로 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
이제, Heroku URL에서 정의한 route로 접속해서 데이터를 제대로 뿌려주고 있는지 확인합니다.
정상적으로 마이그레이션 한 데이터가 출력되고 있음을 확인했습니다.
이것으로 Ubuntu - Heroku에서 Laravel 프로젝트 - MySQL 사용하기에 대한 포스팅을 마치겠습니다.
'Dev > PHP' 카테고리의 다른 글
[PHP] Laravel - PayPal 결제 모듈 연동하기 (1) - 프런트엔드 처리 (4) | 2020.12.30 |
---|---|
[PHP] Laravel - 사용자 정의 클래스 (0) | 2020.12.29 |
[PHP] Ubuntu - Laravel 프로젝트 Heroku에 배포하기(DB 없음) (0) | 2020.10.09 |
[PHP] Laravel - Target class [] does not exist. 문제 해결 (0) | 2020.09.20 |
[PHP] Laravel - smtp를 이용한 메일 전송 구현 (0) | 2020.09.19 |