1
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-composeを用いたPosgreSQL+Railsのwebアプリローカル環境構築

Last updated at Posted at 2020-04-18

はじめに

今回Railsでマッチングアプリを開発しようと思いまして、ローカル環境構築にdocer-composeを用いました。

DBはPostgreSQLを採用しています。

引くほど詰まりまくったので記録を残しておこうと思います。

環境

  • macOS Catalina 10.15.4
  • ruby 2.6.3
  • rails 2.5.3
  • docker for mac 2.2.0.4
  • PostgreSQL 12.2

[1]作業ディレクトリを作成して移動

terminal
% mkdir app(好きな名前)

% cd app

% pwd 
~/app

ここに作業コンテナを作成します。

[2]dockerを立ち上げるのに必要なファイルを作成

ここでは、docker-composeでスケルトンアプリを立ち上げるのに必要なファイルを作成していきます。

簡易パスワードで作ったので面倒くさがりな方は基本コピペで大丈夫です笑

Dockerfileの作成

Dockerfileにはdocker-composeでコンテナを立ち上げる際に必要な処理を記述します。

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

ENV APP_ROOT /app
WORKDIR $APP_ROOT

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

RUN bundle install


ADD . $APP_ROOT

docker-compose.ymlの作成

ここではwebとpostgresという2つのコンテナを立ち上げます。

postgresコンテナでDBを、webコンテナでrailsを立ち上げます。

docker-compose.yml
version: '3'
services:
  postgres:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - ./tmp/db:/var/lib/postgresql/data #MacOSの場合
    environment:
      POSTGRES_USER: 'admin'
      POSTGRES_PASSWORD: 'admin-pass'
      POSTGRES_HOST: 'postgres'
      POSTGRES_PORT: 5432
    restart: always
  web:
    build: .
    image: rails
    container_name: 'web'
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    ports:
      - "3000:3000"
    environment:
      VIRTUAL_PORT: 3000
    volumes:
      - .:/app
    depends_on:
      - postgres
    restart: always

Gemfileの作成

ここでbundle installするためのRubyやRailsのバージョンを指定します。

terminal
% vi Gemfile
Gemfile
source 'https://rubygems.org'

ruby '2.6.3'
gem 'rails', '5.2.3'

ちなみにdocker開発では、でgemの変更を反映させるにはその都度docker-comopose buildを行う必要があります。

Gemfile.lockの作成

ここで空のGemfile.lockを作成しておきます。

terminal
% touch Gemfile.lock

[3]rails newする

webコンテナでrailsを起動してスケルトンアプリを作成します。

terminal
docker-compose run web rails new . --force --database=postgresql --skip-bundle 

database.ymlを修正する

railsに必要なファイルが自動で作成されているはずなので、ここでconfigディレクトリにあるdatabase.ymlを修正します。

./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 & upする

terminal
% docker-compose build
% docker-compose up -d # -d はバックグラウンド処理

db:createする

今後railsに関わる作業は基本的にdocker-compose run webでコンテナ内のrailsを操作します。

terminal
% docker-compose run web db:create

docker-compose psでコンテナの状態を確認しましょう。

terminal
% docker-compose ps                                                                                                                                     
         Name                        Command               State                Ports              
---------------------------------------------------------------------------------------------------
matching_app_postgres_1   docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp
web                       bundle exec rails s -p 300 ...   Up      0.0.0.0:3000->3000/tcp                  

コンテナも無事立ち上がっていますね。

DBも作成したので、localhost:3000にアクセスしてみましょう。

ここで"yay"の画面が返ってきたらローカル環境の立ち上げは成功です!!

PosticoでDBにアクセスする

Posticoという超絶便利なツールがありまして、GUIで直感的にDBを操作することができます。
Dockerで立ち上げたDBにアクセスするのが難しかったので、そちれについても記事を書きたいと思います!

Postico記事 -> https://qiita.com/Rick516/items/5dfb754005e8c3f3fd6d

参考記事

1
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
1
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?