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?

Windows11 + Docker環境でRuby on Rails+PostgreSQLの環境構築

Last updated at Posted at 2023-12-15

自己紹介

来年から新卒入社でエンジニアとして働き始める蛇姫と申します。
Ruby on Railsで開発を行った際にDockerを使用したので備忘録として残したいと思います。
初めての記事投稿なので至らないところも多々あるかとは思いますが、何か間違い等ありましたらご指摘のほどよろしくお願いいたします。

背景

システムの開発にあたって最初はWindows上で開発を行っていたのですが、AWSにデプロイする際に、unicornのインストールがWindowsでは行えなかったため、dockerを用いてunicornを利用できる開発環境を用意することにしました。

前提条件

  • Docker Desktopがインストール済みであること
  • WSLがインストール済みであること

構成情報(2023年12月16日)

  • Windows 11 home
  • ruby 3.2.2
  • Ruby on Rails 7.1.2
  • Docker version 24.0.5
  • Ubumtu 22.04 LTS
  • PostgreSQL 15.4

ファイルの準備

プロジェクトのディレクトリに以下のファイルを用意する。

  • Dockerfile
  • compose.yaml
  • entrypoint.sh
  • Gemfile
  • Gemfile.lock

各ファイルの中身は以下の通り

Dockerfile
#rubyのバージョン
FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y postgresql-client
RUN mkdir /apps
WORKDIR /apps

COPY ./Gemfile /apps/Gemfile
COPY ./Gemfile.lock /apps/Gemfile.lock
RUN bundle install
RUN bundle update

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh && cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ENTRYPOINT [ "entrypoint.sh" ] #entrypoint.shを実行

EXPOSE 3000

CMD [ "rails" ,"server","-b","0.0.0.0" ] #rails serverを起動するコマンド
compose.yaml
version: '3.8'
services:
  db:
    image: postgres
    volumes:
      - pg_data:/var/lib/postgresql/pg_data
    environment:
      POSTGRES_USER: dev     #ユーザー名
      POSTGRES_PASSWORD: dev #パスワード
      POSTGRES_DB: dev
      
  web:
    build: .
    volumes:
      - .:/apps
    ports:
      - "3000:3000"
    tty: true
    stdin_open: true
    depends_on:
      - db
    working_dir: /apps

volumes:
  pg_data:
    driver: local
entrypoint.sh
#!/bin/bash
set -e

rm -f /apps/tmp/pids/server.pid

exec "$@"
Gemfile
source "https://rubygems.org"
gem "rails", "~> 7.1.2"
Gemfile.lock

コンテナの作成

上記のファイルを準備したら、コマンドプロンプトで目的のディレクトリに移動し(ここではrailsフォルダ)コマンドを実行する。

cd rails
docker-compose run --rm web rails new . --database=postgresql --skip-docker

上記のコマンドを実行するとrailsのインストールが始まる。
少しすると
conflict Gemfile
Overwrite /apps/Gemfile? (enter "h" for help) [Ynaqdhm]
と表示される。これは作成したGemfileがあるが上書きしてよいかの確認である。
上書きして問題無いので y を入力する。
しばらくするとインストールが完了する。

新たに作成されたGemfileをインストールする。

docker-compose build

このまま起動しても、docker上のDBに接続できないため設定を変更する。

config/database.yml
~~略~~
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+ host: db #dockerのDBのサービス名
+ username: dev #ユーザー名 (POSTGRES_USER)
+ password: dev #パスワード (POSTGRES_PASSWORD)
~~略~~

production環境のDBを作成する。

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

コンテナを立ち上げる

docker-compose up -d

localhost:3000にアクセスして以下の画面が表示されると成功。
2023-12-16.png
停止する場合は以下のコマンド

docker-compose stop

その他Rails操作関連のコマンドメモ

起動してない状態のコンテナで操作を行う

docker-compose run --rm web 実行したいコマンド
docker-compose run --rm web rails g model user
docker-compose run --rm web rails db:migrate

起動中のコンテナで操作を行う

docker-compose exec web 実行したいコマンド
docker-compose exec web rails g class user

新しいgemをインストールする

docker-compose build

おわりに

以上の手順通りに行えばWSLのlinux上で普段と同じ環境で開発が行えると思います。
なにかの参考になればと思います。
AWSへのデプロイについての記事がAmazon linux 2023を利用するとMySQLが無いことでつまづいたことなどもあったのでまた記事にまとめれたらなんて考えています。

拙い記事だったと思いますが、ここまで読んでいただきありがとうございました。

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?