0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker + Rails6 + Postgresql の開発環境を構築する

Posted at

前提

Rails環境を構築していないチームメンバーも環境構築に手間をかけずにローカルで簡単にプロジェクトを動かせるようにとDockerを導入しました。私自身はローカルにRails環境を構築しているため、プロジェクト作成はローカルで行い、Dockerとローカル直のいずれも動作できるようにしました。
Dockerはすでにインストールされているものとします。

環境

  • macOS Catalina 10.15.4
  • Ruby 2.7.1
  • Rails 6.0.3.2
  • PostgreSQL 12.3
  • Docker version 19.03.12

プロジェクト新規作成

$ mkdir myapp; cd $_
$ rails new . --skip-coffee --skip-turbolinks --database=postgresql

環境変数を管理するdotenv-railsを導入

環境変数によって、Dockerで動かすかローカル直で動かすか選べるようにします。

Gemfile
gem 'dotenv-rails'

gemをインストール

$ bundle install

下記はDockeで動かす場合の環境変数の設定例です。

.env
DATABASE_HOST=db
DATABASE_USER=postgres
DATABASE_PASSWORD=secret

ローカル直で動かす場合はDATABASE_HOST=localhostとします。

Docker用ファイル作成・編集

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    ports:
      - "5433:5432"
    environment:
      POSTGRES_USER: 'postgres'
      POSTGRES_PASSWORD: 'secret'
      POSTGRES_DB: 'db'

  webpacker:
    build: .
    command: bundle exec bin/webpack-dev-server
    volumes:
      - .:/myapp
    ports:
      - "8080:8080"

  web:
    build: .
    command: /bin/sh -c "rm -f /myapp/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
      - webpacker

dockerfile
FROM ruby:2.7.1
 
ENV LANG C.UTF-8

# 必要なライブラリをインストール
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# yarnパッケージ管理ツールインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn

# ワークディレクトリ設定
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
EXPOSE  3000

database.ymlhostusernamepasswrdの設定を追加

/config/database.yml
: 省略

default: &default
  adapter: postgresql
  encoding: unicode
  host: <%= ENV.fetch("DATABASE_HOST") { "127.0.0.1" } %>               # 追記
  username: <%= ENV.fetch("DATABASE_USER") { "postgres" } %>            # 追記
  password: <%= ENV.fetch("DATABASE_PASSWORD") { "" } %>                # 追記
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

: 省略

image構築

$ docker-compose build

パッケージインストール

$ docker-compose run --rm web bin/yarn install

データベース作成

$ docker-compose run --rm web rails db:create

起動

$ docker-compose up

http://localhost:3000/ へアクセスできます。

ローカル直で動かす場合

.envを編集し、yarn installrails db:createrails sで起動します。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?