laravel, S3 및 stripe 도입시의 heroku 배포에 대해(비망록)

게시 경위



S3과 clearDB를 사용한 heroku 배포를 실시했습니다만, 집어넣는 것도 매우 많았으므로 비망록으로서 투고합니다.

개발 환경




laravel5.8
stripe:laravelcashier10

대근의 흐름



①heroku 도입
②clearDB의 도입(stripe를 구현의 경우)
③S3의 도입(화상 투고 기능을 실장의 경우)
이번에는 ②③을 메인에 설명해 갑니다.

①heroku 도입



h tps://유노코로. 코 m / wp / 엔트리 / ぁらゔぇl 쿠에 st-6 / # 헤로 쿠
이쪽의 기사를 정말로 알기 쉽기 때문에 추천입니다.
이번 설명의 주목적이 아니므로 생략합니다.

②clearDB의 도입(stripe를 구현의 경우)



stripe를 도입하고 있는 경우, DB 작성시
heroku run php artisan migrate --seed

할 때 다음 오류.
SQLSTATE[42704]: Undefined object: 7 ERROR: collation "utf8mb4_bin" for encoding "UTF8" does not exist at character 57 (SQL: alter table "users" add column "stripe_id" varchar(191) collate "utf8mb4_bin" null, add column "card_brand" varchar(191) null, add column "card_last_four" varchar(4) null, add column "trial_ends_at" timestamp(0) without time zone null)

한마디로 stripe 도입시에, users 테이블에 추가된 컬럼 「stripe_id,card_brand,card_last_four,trial_ends_at」가 불편을 일으키고 있습니다.

htps : // 기주 b. 코 m/ぁらゔぇl/카시에 rst 리페/이스에 s/747
위의 기사 (영어)를 보면,
이번 개발에서
local환경→DB:mysql
heroku 환경 → DB : pqsql (기본 mysql은 사용할 수 없기 때문에)
로 이행한 것이 원인인 것 같았습니다.

그래서 heroku 환경에서도 DB : mysql을 사용할 수있는 clearDB를 도입했습니다.

ClearDB란?

Heroku에서는 ClearDB라는 클라우드 서비스 MySQL을 활용할 수 있습니다. "ignite"라고 불리는 데이터 용량 5MB의 최소 구성이면 무료로 사용할 수 있으므로, 이쪽을 이용해 갑니다.

ClearDB 배포 흐름



1. heroku에서 신용 카드 설정.



※ 초과하지 않는 한 청구는 되지 않습니다.

2. ①에서 작성한 heroku의 DATABASEURL을 경합하지 않도록 삭제.


heroku addons:destroy heroku-postgresql -a <アプリ名>

3.ClearDB 애드온을 추가, 무료 프레임 ignite의 사용을 지시.


heroku addons:create cleardb:ignite표시 결과mysql://[ユーザ名]:[パスワード]@[ホスト]/[DB名]?reconnect=true

4. 표시 결과의 환경 변수에 데이터베이스 설정 추가


heroku config:set \
DB_CONNECTION=mysql \
DB_HOST=[ホスト] \
DB_DATABASE=[DB名] \
DB_USERNAME=[ユーザ名] \
DB_PASSWORD=[パスワード]

5. 데이터베이스 설정(마이그레이션 및 시딩)


heroku run php artisan migrate --seed

6. heroku에 push


git push heroku [送りたいbranch名]:master
이제 웹 앱을 확인하고 표시되면 OK.

③S3 도입



웹 앱을 보면 아래와 같이 사진이 표시되지 않는다.



local 환경에서는 storage>app>public 아래에 이미지를 저장했지만,
넷 환경에서는, aws의 S3를 이용하여 화상의 보존, 표시를 하기로 했다.

도입 흐름



1. AWS IAM 사용자로부터 다음 코드를 받으세요.



액세스 키 ID
비밀 액세스 키 메모
※나중에 사용.

2.S3 버킷을 만듭니다.



S3으로 이동하여 아래 이미지의 버킷 만들기를 클릭하여 만듭니다.


3. 다음을 설치.



Laravel의 파일 스토리지와 S3를 연계composer require aws/aws-sdk-phpcomposer require league/flysystem-aws-s3-v3

4.Heroku의 환경 변수를 각각 설정.


heroku config:set AWS_ACCESS_KEY_ID='AWSで作成したAccess key ID'
heroku config:set AWS_SECRET_ACCESS_KEY='AWSで作成したシークレットアクセスキー'
heroku config:set AWS_DEFAULT_REGION='作成したバケットのリージョン名'
heroku config:set AWS_BUCKET_BUCKET='作成したバケット名'

※도쿄라면 ap-northeast-1

5.controller 및 VIEW 설정 변경.



내 경우에는
controller의 다음 문장으로 s3의 public>temp에 이미지를 투고할 수 있는 설정을 기술.$temp_path = Storage::disk('s3')->put('public/temp',$path, 'public');그리고 VIEW 파일의 다음 문장에서 s3의 $ temp_path 위치의 이미지를 표시라고 기술했다.<img src = "{{ Storage::disk('s3')->url($temp_path) }}" width="450px">

6.S3의 액세스 권한을 이하에 설정.




이제 다음과 같이 공개 액세스 객체를 읽는 것만이 예가되어 모든 사람 (everyone)에게 읽기 권한을 부여 할 수있었습니다.


완성



투고 이미지도 표시되게 되었다.

끝에



이번은 모처럼 정리한다면 처음 qiita 투고를 해 보았습니다.
이 쓰는 방법은 좋지 않아 등 있으면 댓글 주시면 다행입니다.

끝까지 봐 주신 분, 감사합니다.

참고 기사



Heroku 명령 모음
htps : // 코 m / 유 _ 에구치 / ms / 8cd53942b88b7 f2 fu cb

Heroku에서 MySQL을 사용하는 방법
htps : // bg. 나카무.ぃふぇ/포 sts/헤로쿠-mysql

Heroku에서 MySQL을 사용할 때 DATABASE_URL을 다시 씁니다.
htps : // 코 m / 소메야 나오키 / ms / 1167 816 9647 4464

「Heroku에 배포한 페이지의 이미지가 표시되지 않는다!?」를 해결하는 AWS S3 초간단 이용법
https://qiita.com/Hiroyuki-Hiroyuki/items/72aed73ff7c0f8508700#%E7%94%BB%E5%83%8F%E3%82%A2%E3%83%83%E3%83%97%E3%83 %AD%E3%83%BC%E3%83%89%E6%A9%9F%E8%83%BD%E3%82%92%E5%AE%9F%E8%A3%85

좋은 웹페이지 즐겨찾기