Laravel + Vueのプロジェクトをgithubからherokuにデプロイしたので備忘録(S3も)
目次
はじめに
403 Forbiddenなどのエラー(権限付与問題)で苦しんだので、備忘録。
また画像アップロード先はAWSのS3に設定しました。
DBはMySQL(ClearDB MySQL )を使用しました。
条件
- herokuに登録していること(クレジットカードも)
- githubでプロジェクトを管理していること
流れ
herokuでプロジェクトの作成
heroku create [プロジェクト名] --buildpack heroku/php
githubとの連携
githubとの連携を行ない、masterにプッシュされたタイミングで自動デプロイしてくれる機能をオンにします。
PHPの国際化用拡張モジュール(intl)の使用とHTTPSの強制
PHPの国際化用拡張モジュール(intl)
composer require ext-intl:*
HTTPSの強制とDBエラーを防ぐ(app/Providers/AppServiceProvider.php)
<?php public function boot() { // ここから追加 if (\App::environment('production')) { \URL::forceScheme('https'); } // varchar型の文字数を191に制限 Schema::defaultStringLength(191);
herokuの環境設定
個人的にここが面倒だった。
ここを省いても、デプロイはされるが、「403 Forbidden」が帰ってくるのでしっかりと設定を行う。
自分のデータベースのURLの情報を確認して、設定
heroku config | grep CLEARDB_DATABASE_URL
以下の設定を行う。(以下参照) Laravelをherokuにデプロイする(データベースはMySQL) - Qiita
CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
$ heroku config:set DB_DATABASE=[データベース名] $ heroku config:set DB_HOST=[ホスト名] $ heroku config:set DB_USERNAME=[ユーザー名] $ heroku config:set DB_PASSWORD=[パスワード]
s3を使用する場合の設定(**は独自で設定)
$ heroku config:set AWS_ACCESS_KEY_ID=** $ heroku config:set AWS_SECRET_ACCESS_KEY=** $ heroku config:set AWS_DEFAULT_REGION=** $ heroku config:set AWS_BUCKET=** $ heroku config:set AWS_URL=**
私の場合、URLはhttps://s3-ap-northeast-1.amazonaws.com/[バケット名]/
にしました。
最初、コンソールのURL+バケット名というやってはいけないことをしてしまっていて、アップロードはされるのですが、返却されるURLから飛んでも「このパスにはオブジェクトがありません」と出て表示されなかったです。
heroku run php artisan migrate
サイト運営開始
git push heroku master heroku open