Cloud9->GitHub経由でHerokuにLaravel or Railsアプリをデプロイする方法

#前提
1. AWSアカウント取得・Cloud9環境の利用
[AWS](https://aws.amazon.com/jp/console/)より「まずは無料で始める」をクリックして名前やメールアドレス、電話番号、クレジット決済情報などを入力します。
自動音声通話による電話認証があります。

2. GitHubアカウント取得
3. Cloud9からGitHubへgitコマンドでcommit&pushできるようにしておきます。
4. Herokuアカウント取得
[Heroku](https://jp.heroku.com/)より「新規登録」をクリックして名前やメールアドレスを入力します。Herokuからメールが来るので、そこからアカウント登録完了します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/6363/b18532cd-d5ed-5584-83fd-d3f43fb38328.png)

HerokuでMySQLを使いたい場合、ClearDB（＝MySQL）をアドオン（追加）する必要があり、クレジット登録が必要です。ただClearDBはFree（無料）のプランで利用できます。クレジット情報は「Account setting」の「Billing」に入って登録します。

#Herokuの初回設定
続けてHerokuへのデプロイに必要なツールをローカル環境にダウンロード＆インストールします。

Herokuにログイン後、ダッシュボードから「Choose a language guide」よりRubyを選んで、「Set up」より、ツールをダウンロードしてインストールしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/6363/251b133f-4de5-1ce3-e2fa-3f0d23ec1c1c.png)

#Herokuへのデプロイ
*共通事項*

- GitHubにログインしリポジトリを（例えばdemoとし）作成します。
- Cloud9で作ったアプリを適宜、上記GitHubのリポジトリ（例えばdemo）にcommit&pushします。
 
（アプリケーションのホームで次のようにgitのリモート設定：初回のみ）

```console
$ git init
$ git remote add origin https://github.com/[UserName]/demo.git 
```
（ソースの改版都度、commit&push）

```console
$  git add . 
$ git commit -m "first commit" 
$ git push -u origin master 
```

1. Herokuでアプリを新規作成します。AppNameはHerokuで公開されるサービスのホスト名になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/6363/c2672d28-3e16-2efa-23e2-56c4e336a78b.png)

2. デプロイの設定でGithubを選択し、先ほどコミット＆プッシュしたリポジトリと接続します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/6363/1e154912-ca53-e504-d595-880502ffac58.png)

3. デプロイします。
<img width="598" alt="スクリーンショット 2018-10-14 21.53.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/6363/65f29a2d-8e7a-4c2f-ddf6-77072676a032.png">
 
#Railsアプリの場合

以下Herokuツールを入れた自分の環境のターミナルで行います。

ログインします。

```
heroku login
```
アドオンでMySQLを使えるようにします。

```
heroku addons:add cleardb -a <AppName>
```
DB設定内容を確認します。

```
heroku config -a <AppName>
```
本番DB接続内容を設定し直しコミットます。
編集するファイル：config/database.yml
production内容は次の通りに変更します。

```config/database.yml
production: <%= ENV['CLEARDB_DATABASE_URL'] %>
```
続けて下のようにSettingよりDBコンフィグレーションを変更します。
mysql->mysql2に変更します。
<img width="461" alt="スクリーンショット 2018-10-14 21.53.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/6363/2cfaac74-0222-ca5d-0dfa-c55d5eeb22c9.png">



本番環境のDBをコマンドで作ります。

```
heroku run "rails db:create RAILS_ENV=production" -a <AppName>
heroku run "rails db:migrate RAILS_ENV=production" -a <AppName>
```


デプロイが完了してから「Open app」で開きます。

#Laravelアプリの場合

Laravelの場合は、プロジェクトホーム直下にProcfileを作成しコミットする必要があります。

```Procfile
web: $(composer config bin-dir)/heroku-php-apache2 public/
```



プロジェクトのソースをGithubにコミット＆プッシュ後、以下Herokuツールを入れた自分の環境のターミナルで行います。

ログインします。

```
heroku login
```
アドオンでMySQLを使えるようにします。

```
heroku addons:add cleardb -a <AppName>
```
DB設定内容を確認します。

```
heroku config -a <AppName>
```
ここで得られた次のような接続情報をconfig:set で設定します。
`mysql://****(USERNAME)****:****(PASSWORD)****@*****.cleardb.net/****(DBNAME)****?reconnect=true`

（注意）DB接続情報を定義した.envはデフォルトではgit addで無視されますので、ここで環境変数として設定する必要があります。

```
heroku config:set DB_CONNECTION=mysql DB_HOST=*****.cleardb.net DB_PORT=3306 DB_DATABASE=****(DBNAME)**** DB_USERNAME=****(USERNAME)****  DB_PASSWORD=****(PASSWORD)**** -a <AppName>
```


デプロイします。
<img width="598" alt="スクリーンショット 2018-10-14 21.53.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/6363/a4680d9d-818a-f247-f29d-e6d7e978fe9c.png">



本番環境のDBをコマンドで作ります。

```
heroku run php artisan migrate -a <AppName>
```
APP_KEYを取得しコンフィグとして設定します。

```
heroku run "php artisan --no-ansi key:generate --show" -a <AppName>
heroku config:set APP_KEY=**************************** -a <AppName>
```
すべて完了してから「Open app」で開きます。