Laravel + Vueのプロジェクトをgithubからherokuにデプロイしたので備忘録(S3も)

目次

はじめに

403 Forbiddenなどのエラー(権限付与問題)で苦しんだので、備忘録。

また画像アップロード先はAWSのS3に設定しました。

DBはMySQL(ClearDB MySQL )を使用しました。

GUIでもCUIでも可能だが、今回はCUIで残します。

条件

  • herokuに登録していること(クレジットカードも)
  • githubでプロジェクトを管理していること

流れ

  • herokuでプロジェクト作成
  • githubとの連携
  • PHPの国際化用拡張モジュール(intl)の使用とHTTPSの強制
  • herokuの環境設定
  • サイト運営開始

herokuでプロジェクトの作成

heroku create [プロジェクト名] --buildpack heroku/php

githubとの連携

githubとの連携を行ない、masterにプッシュされたタイミングで自動デプロイしてくれる機能をオンにします。

f:id:makoo5:20191130025205j:plain

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

参考資料

heroku へクレジットカード登録 – Linux & Android Dialy

Herokuにデプロイする | チームラボオンラインスキルアップ