DockerでRails・MySQL構築

# 修正履歴

* 誤字修正(20190814)
* 「インストール後の作業」に「configの使い方」を追加(20190824)
* 「インストール後の作業」に「twitter・Facebookログイン実装」を追加(20190825)
* 「バージョン変更」ruby:2.6.3、rais:5.2.3(20190825)
* トップページ作成コマンド追記(20190825)


# 概要

* Dockerを使用したRailsの開発環境を構築
* DBはMySQLを使用
* ローカル開発環境で構築(MySQLのユーザー名、パスワードは簡易なものを使用)

＞＞[PostgreSQLはこちら](https://qiita.com/jung_issei/items/c58bd1158cd909540b26)

# 前提
* Mac、Windows10のローカル開発環境で動作
* 「Docker for Windows」か「Docker for Mac」がインストール済みであること

## ディレクトリ構造

```terminal
├─src
│  ├─Gemfile
│  └─Gemfile.lock
├─Dockerfile
└─docker-compose.yml

```

## 準備するファイル

ディレクトリ構造にある4つのファイルの内容は下記になります。
 
 
 

### Dockerfile

```dockerfile:Dockerfile
FROM ruby:2.6.3
ENV LANG C.UTF-8

RUN apt-get update -qq && \
    apt-get install -y build-essential \
            libpq-dev \
            nodejs

RUN mkdir /app
RUN mkdir /app/src

ENV APP_ROOT /app/src
WORKDIR $APP_ROOT

ADD ./src/Gemfile $APP_ROOT/Gemfile
ADD ./src/Gemfile.lock $APP_ROOT/Gemfile.lock

RUN bundle install

ADD . $APP_ROOT

```

### docker-compose.yml

```yml:docker-compose.yml
version: '2'
services:
  mysql:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    ports:
      - "3306:3306"
    volumes:
      - ./db/mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 'root-pass'
    restart: always
    logging:
      options:
        max-size: 5m
        max-file: "10"
  app:
    build: .
    image: rails
    container_name: 'app'
    command: bundle exec rails s -p 80 -b '0.0.0.0'
    ports:
      - "80:80"
    environment:
      VIRTUAL_PORT: 80
    volumes:
      - ./src:/app/src
    depends_on:
      - mysql
    restart: always
```

### Gemfile

```Gemfile:src/Gemfile
source 'https://rubygems.org'
ruby '2.6.3'
gem 'rails', '5.2.3'
```

### Gemfile.lock
ファイルの中身は空でOK

```Gemfile.lock:src/Gemfile.lock

```


# 手順

## スケルトンアプリ作成

```terminal
$ docker-compose run app rails new . --force --database=mysql --skip-bundle
```

## database.ymlを修正

```yml:src/config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root-pass
  host: mysql
```

## イメージ再ビルド
※処理完了までちょっと時間がかかることがあります。。。

```terminal
$ docker-compose build
```

## コンテナ立ち上げ

```terminal
$ docker-compose up -d
```

## MySQLにRailsのDBを作成

```terminal
$ docker-compose run app rails db:create
```

これで、[http://localhost](http://localhost)にブラウザでアクセスすると、Railsのインストール完了画面がでてきました。

## トップページ作成
とりあえずトップページを表示させたい場合は下記コマンドを実行

```terminal
$ docker-compose run app rails g controller Home top
```

「get 'home/top'」を「root to: 'home#top'」を変更

```ruby:config/routes.rb
#　・・・

root to: 'home#top'

#　・・・
```

# インストール後の作業

私の記事ですが、下記の手順もまとめましたので、参考にしていただければ幸いです。

[【Rails】「config」の使い方 - Qiita](https://qiita.com/jung_issei/items/133a18dc1095d0be557f)
サイトから送信するSMTPサーバー情報や、ソーシャルログインなどで使用するAPIキーをGitにアップロードする際に、外部に情報が流出させないようにする設定です。

[【Rails】Bootstrap4・jQueryを適用](https://qiita.com/jung_issei/private/e8841a44ce880b2f7b2f)
フロントでBootstrap4とjQueryを適用して構築したい時は便利

[Font Awesome適用](https://fontawesome.com/kits/a5ec3dea41/use?welcome=yes)
アイコンを気軽に使用したい時はこちらが便利。メールアドレスの登録・アンケート回答すると、無料でたくさんのアイコンが使用できます。

[【devise】メール認証のサインアップ・イン・アウト機能](https://qiita.com/jung_issei/items/a3bb837cfdedda7b5d85)
メール認証で、サイトに新規会員登録機能や、ログイン・ログアウト機能を搭載する設定です。

[【Rails】【Devise】twitter・Facebookログイン実装](https://qiita.com/jung_issei/items/f569b6e0ed75672c8c29)
上記のメール認証に加えてソーシャルログイン機能を実装する手順です。