前提
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.yml
にhost
、username
、passwrd
の設定を追加
/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 install
、rails db:create
、rails s
で起動します。