【Laravel】herokuにデプロイする方法

この記事では、ローカル開発環境で作成したlaravelアプリをherokuというプラットフォームを使い、webアプリをデプロイする方法を紹介します。

この記事を作成する上以下の記事を参考にさせていただきました。
[Laravelをherokuにデプロイする(データベースはPostgreSQL)]
(https://qiita.com/tamappe/items/14a4e6890ecef4d49d1f)

#前提条件
- 開発環境：vagrant&virtualbox
- 開発OS:centos7
- laravelをherokuでデプロイ

開発環境の構築がまだの方はコチラ
[【開発環境】仮想サーバーの構築〜laravel導入まで（vagrant/centos7/apache/PHP/composer/laravel）](https://qiita.com/JUM22676603/items/6d3c8b7ec88cdc7c3793)

#基本的な流れ

- herokuの設定
- laravelの設定
- デプロイ


#herokuの設定

## 1.herokuのアカウント作成 
herokuのアカウントの作成は[コチラ](https://signup.heroku.com/)


##2.heroku CLIのインストール
heroku CLIはコマンドラインでherokuの操作をするために必要なソフトです。


```
vagrantに以下のディレクトリを作成します。
$ sudo mkdir -p /usr/local/lib /usr/local/bin

heroku-linux-amd64をダウンロードします。
$ cd /vagrant
$ sudo wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz

解凍して展開します。
$ sudo tar -xvzf heroku-linux-amd64.tar.gz -C /usr/local/lib

シンボリックリンクを貼ります。
$ sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku

バージョンを確認します。表示されていればインストール完了です。
$ heroku --version
heroku-cli/6.99.0-ec9edad (linux-x64) node-v9.11.1
```

##3.herokuにログイン

```
$ heroku login

heroku: Press any key to open up the browser to login or q to exit: 
(q以外のボタンを押す)

Opening browser to https://cli-auth.heroku.com/auth/browser/efa5711d-4987-4f4f-9c23-a269fec44724
 ›   Warning: Cannot open browser.
heroku: Waiting for login... ⢿

（ブラウザで指定のアドレスを開き、ログインする）

Logging in... done
Logged in as （herokuに登録しているメールアドレス）
```

##4.herokuアプリの作成とPHPを使用可能にする

```
$ heroku create laravel-fileup-jum --buildpack heroku/php
Creating ⬢ laravel-fileup-jum... done
Setting buildpack to heroku/php... done
https://laravel-fileup-jum.herokuapp.com/ | https://git.heroku.com/laravel-fileup-jum.git
```

laravel-fileup-jumはheroku上で作成するアプリ名、heroku上で誰かと重複していると作れません

#Laravel側での作業

##1.Procfileを作る

ProcfileはHerokuアプリの起動時に実行するプロセスを定義するためのファイルです。
今回は、サーバーにApacheを使うこと、public/をドキュメントルートとすることを宣言するために使います。
laravelアプリのフォルダ直下にProcfileを作ります。

```
$ vi Procfile
```

```php:Procfile
web: vendor/bin/heroku-php-apache2 public/
```

##2.PHPの国際化用拡張モジュール(intl)を使う

```
$ composer require ext-intl:*

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Package phpunit/phpunit-mock-objects is abandoned, you should avoid using it. No replacement was suggested.
Writing lock file
Generating optimized autoload files
Carbon 1 is deprecated, see how to migrate to Carbon 2.
https://carbon.nesbot.com/docs/#api-carbon-2
    You can run './vendor/bin/upgrade-carbon' to get help in updating carbon and other frameworks and libraries that depend on it.
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Package manifest generated successfully.
```


## 3.herokuのアドオンにPostgreSQLを作成する

```
[vagrant@localhost fileup_heroku]$ heroku addons:create heroku-postgresql:hobby-dev
Creating heroku-postgresql:hobby-dev on ⬢ laravel-fileup-jum... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-cubed-52314 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation
```

## 4.データベースの情報を取得する。

```
$ heroku config:get DATABASE_URL

# メモしよう
postgres://<ユーザ名>:<パスワード>@<ホスト>:5432/<DB名>
```

## 5.herokuのconfigファイルに設定

```
$ heroku config:set DB_CONNECTION=pgsql
$ heroku config:set DB_HOST=<ホスト>
$ heroku config:set DB_DATABASE=<DB名>
$ heroku config:set DB_USERNAME=<ユーザ名>
$ heroku config:set DB_PASSWORD=<パスワード>
$ heroku config:set APP_KEY=$(php artisan key:generate --show)
$ heroku config:set APP_ENV=heroku
$ heroku config:set LANG=ja_JP.UTF-8
$ heroku config:set TZ=Asia/Tokyo
```

###以下のようなエラーが出たらerror

```
$ heroku config:set APP_KEY=$(php artisan key:generate --show)
PHP Warning:  require(/Users/あなたのユーザー名/laravel_docker/laravel_todo/vendor/autoload.php): failed to open stream: No such file or directory in /Users/ユーザー名/laravel_docker/laravel_todo/artisan on line 18
PHP Fatal error:  require(): Failed opening required 
 Warning: is invalid. Must be in the format FOO=bar.
```

###composer installをする

```
$ composer install
```

#デプロイ

##1.gitでherokuにデータをプッシュ

```git
$ git init
Initialized empty Git repository in /home/vagrant/laravel/fileup_heroku/.git/
$ git add .
$ git commit -m "heroku first commit"
$ git remote add origin https://git.heroku.com/laravel-fileup-jum.git
$ git push origin master
```

##2.データベースをマイグレーション

```
$ heroku run php artisan migrate

 Do you really wish to run this command? (yes/no) [no]:
 > y 

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
マイグレーションをやり直したい場合
```

マイグレーションをやり直したい場合

```
$ heroku run php artisan migrate:refresh --seed
```

3.webアプリの起動

```
$ heroku open
```

以上です。