Railsデプロイ with Docker

##参考サイト
[Docker超入門](https://www.youtube.com/watch?v=DNnW4I43wyU&list=PLs3eD4QT7ow6O5wyRRnRCvB7JMuq_D3-D&index=1) :[きよとのプログラミング大学](https://www.youtube.com/c/KiyotoUniv)

#####参照
[Rails環境構築 with Docker](https://qiita.com/koumo_ri/items/1acb0a176074dba0b780)
こちらでDockerを使用したRailsの環境構築までを行っております。

[Docker 用語とコマンド](https://qiita.com/koumo_ri/items/3dfcdc224af4649f7673)
Dockerについての用語やコマンドについてはこちらをご覧ください

##環境
Mac OS
docker-compose 1.27.4
heroku/7.47.7
Mysql 8.0
ruby 2.7
rails 6.1.0
 
##heroku実装
###herokuログイン
```terminal.
rails_on_docker % heroku login
heroku: Press any key to open up the browser to login or q to exit:  //Enterキーでログイン
rails_on_docker % heroku container:login
```
###herokuアプリ作成
```terminal.
rails_on_docker % heroku create <rails-koumori>  // < >内は任意の名前を指定
```
##データベース追加・設定
###データベースの追加
```terminal.
rails_on_docker % heroku addons:create cleardb:ignite -a rails-koumori 
```
本番環境の接続先情報を環境変数に修正

```yml:database.yml
production:
  <<: *default
  database: <%= ENV['APP_DATABASE_DATABASE'] %>
  username: <%= ENV['APP_DATABASE_USERNAME'] %>
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>
  host: <%= ENV['APP_DATABASE_HOST'] %>
```
接続先情報を環境変数に設定

```terminal.
rails_on_docker % heroku config -a rails-koumori
CLEARDB_DATABASE_URL: mysql://ユーザー名:パスワード@ホスト名/データベース名?reconnect=true

rails_on_docker % heroku config:add APP_DATABASE='データベス名'-a rails-koumori
rails_on_docker % heroku config:add APP_USERNAME='ユーザー名' -a rails-koumori
rails_on_docker % heroku config:add APP_PASSWORD='パスワード' -a rails-koumori
rails_on_docker % heroku config:add APP_HOST='ホスト名' -a rails-koumori

rails_on_docker % heroku config -a rails-koumori  //登録の確認
```
##本番環境用の記述
空のファイル作成

```terminal.
rails_on_docker % touch start.sh  
```
```sh:start.sh
#!/bin/sh

# 本番環境
if [ "${RAILS_ENV}" ="production" ]
then
    bundle exec rails assets:precompile
fi

bundle exec rails s -p ${PORT:-3000} -b 0.0.0.0
```
Dockerfileの追記

```dockerfile:Dockerfile
# ベースイメージの指定
FROM ruby:2.7

#追記
ENV RAILS_ENV=production  
.
.
.
.

#dockerにコピー
COPY start.sh /start.sh　　
#実行権限を付与
RUN shmod 744 /start.sh　　
#起動時に実行
CMD ["sh","/start.sh"]   
```
本番環境に適用

```terminal.
rails_on_docker % heroku config:add RAILS_SERVE_STATIC_FILES="true" -a r
ails-koumori  //本番環境にassets:precompileを適用
```

##rails view画面実装
コントローラー作成

```terminal.
rails_on_docker % docker-compose exec web bundle exec rails g controller users 
```
トップページにusers/indexを指定

```rb:routes.rb
Rails.application.routes.draw do
  get '/',to: "users#index"
end
```
コントローラーの記述

```rb:users.controller.rb
class UsersController < ApplicationController
  def index
  end
end
```
index.html.erbファイルを作成し記述

```html:src>app>views>users>index.html.erb
<h1>Hello world!</h1>
```
##Dockerコンテナのプッシュとherokuへのリリース
Dockerイメージをビルドしコンテナにプッシュ

```terminal.
rails_on_docker % heroku container:push web -a rails-koumori
```
herokuにコンテナをリリース

```terminal.
rails_on_docker % heroku container:release web -a rials-koumori
```
herokuを起動しブラウザで確認

```terminal.
rails_on_docker % heroku open -a rails-koumori
```

![スクリーンショット 2021-01-10 18.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646600/3a7504dc-0324-80c8-763f-7245797f110a.png)
##まとめ
前回のRails構築から、今回でデプロイまで完了できました。