LoginSignup
24
28

More than 3 years have passed since last update.

DockerでRails・PostgreSQL構築

Last updated at Posted at 2019-10-08

概要

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

>>MySQLはこちら

前提

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

ディレクトリ構造

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

準備するファイル

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

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(※WindowsとMacで記述を分ける箇所有)

docker-compose.yml
version: '3'
services:
  postgres:
    image: postgres
    ports:
      - "3306:3306"
    volumes:
      - ./tmp/db:/var/lib/postgresql/data #MacOSの場合
      - app_postgre:/var/lib/postgresql/data #Windowsの場合
    environment:
      POSTGRES_USER: 'admin'
      POSTGRES_PASSWORD: 'admin-pass'
    restart: always
  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:
      - postgres
    restart: always

#下記はWindowsの場合追加
volumes:
  app_postgre:
    external: true

※PostgreSQLはWindowsではマウントできないようなので、参照先を外部に指定します。

Gemfile

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

Gemfile.lock

ファイルの中身は空でOK

src/Gemfile.lock

手順

ボリューム作成(※Windowsの場合のみのコマンド)

$ docker volume create --name app_postgre

※PostgreSQLはWindowsではマウントできないようなので、参照先を外部にするためのコマンドです。

スケルトンアプリ作成

$ docker-compose run app rails new . --force --database=postgresql --skip-bundle

database.ymlを修正

src/config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: admin
  password: admin-pass
  host: postgres

イメージ再ビルド

※処理完了までちょっと時間がかかることがあります。。。

$ docker-compose build

コンテナ立ち上げ

$ docker-compose up -d

PostgreSQLにRailsのDBを作成

$ docker-compose run app rails db:create

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

トップページ作成

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

$ docker-compose run app rails g controller Home top

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

config/routes.rb
# ・・・

root to: 'home#top'

# ・・・

インストール後の作業

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

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

【Rails】Bootstrap4・jQueryを適用
フロントでBootstrap4とjQueryを適用して構築したい時は便利

Font Awesome適用
アイコンを気軽に使用したい時はこちらが便利。メールアドレスの登録・アンケート回答すると、無料でたくさんのアイコンが使用できます。

【devise】メール認証のサインアップ・イン・アウト機能
メール認証で、サイトに新規会員登録機能や、ログイン・ログアウト機能を搭載する設定です。

【Rails】【Devise】twitter・Facebookログイン実装
上記のメール認証に加えてソーシャルログイン機能を実装する手順です。

24
28
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
28