インフラの勉強で使える!?RailsチュートリアルアプリのDocker化

Docker
スポンサーリンク

インフラの勉強をしている中で、ちょくちょく実際のアプリを動かしてDBの状態などを見たくなりました。なんかいいのないかなーと思っていたら、ありました。

Railsチュートリアル

そこそこの機能をもっていて、RDBも使う。なんといってもソース公開もされていて、無料。理想的すぎる。

ということで、今回はこの「Railsチュートリアル」をDocker化するところまでの手順をまとめていきます。

スポンサーリンク

対象

以下は、「Rails チュートリアル sample_app コード集」。

GitHub - yasslab/sample_apps: 🎓 Railsチュートリアルの各章が終わった状態を集めたリポジトリです。
🎓 Railsチュートリアルの各章が終わった状態を集めたリポジトリです。. Contribute to yasslab/sample_apps development by creating an account on GitHub.

この中から「sample_apps/6_0_0/ch14/」を使います。

手順

Dockerfile・docker-compose.yml を作成する。

docker-compose.yml

version: '3'
services:
  app:
    build: .
    environment:
      RAILS_ENV: production
      SECRET_KEY_BASE: "c2af0ed27a75382e02bce409ee8fce20a73e20348d32e288a86d20e77f7ce745eef5b93ac2b184a6fd6bd89f85082f4fe58870548664c2ede2d36f3754a54797"
      DATABASE_URL: postgresql://postgres:postgres@db:5432/sample_app
    ports:
      - '18080:8080'
    volumes: 
      - .:/app
    depends_on:
      - db

  db:
    image: postgres:12
    environment: 
      POSTGRES_USER: 'postgres'
      POSTGRES_PASSWORD: 'postgres'
      POSTGRES_DB : 'sample_app'
    ports:
      - '15432:5432'
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data:
    driver: local

・「RAILS_ENV=production」本番モードで起動。

・「SECRET_BASE_KEY」は、$ bundle exec rake secretで取得した秘密鍵を記載しています。

Dockerfile

FROM ruby:2.7.1

ENV APP_ROOT /app
WORKDIR ${APP_ROOT}

RUN echo "deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
    wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
    apt-get update && \
    apt-get install -y postgresql-12 \ ←postgresqlをインストールしてクライアントを使用する。
                       --no-install-recommends && \
    rm -rf /var/lib/apt/lists/* && \
    wget https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz && \
    mkdir -p /usr/local/lib/nodejs && \
    tar -xJvf node-v14.16.0-linux-x64.tar.xz -C /usr/local/lib/nodejs ←NodeJSをインストール。

ENV PATH $PATH:/usr/local/lib/nodejs/node-v14.16.0-linux-x64/bin
RUN npm install -g yarn ←yarnをインストール。

COPY ./Gemfile ${APP_ROOT}
COPY ./Gemfile.lock ${APP_ROOT}

# gemインストールの高速化
#   gem: --nodocument, --global jobs 4
RUN echo 'gem: --no-document' >> ~/.gemrc && \
    cp ~/.gemrc /etc/gemrc && \
    bundle config --global jobs 4 && \
    bundle install --without test development

COPY . ${APP_ROOT}/

EXPOSE 8080

CMD ["/bin/sh", "-c", "while :; do sleep 10; done"]

・PostgreSQLをインストールする。クライアントが必要なため。

・NodeJSとyarnをインストールする。rake assets:precompileするときに必要なため。

config/database.ymlを修正する。

productionの箇所をURLで接続できるように変更する。

production:
  url: <%= ENV['DATABASE_URL'] %> ←追加
  # ここから下は全てコメントアウトする。
  # adapter: postgresql
  # encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # https://railsguides.jp/configuring.html#データベース接続をプールする
  # pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  # database: sample_app_production
  # username: postgres
  # password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>

config/environments/production.rbを修正する。

ローカルで実行する場合、SSLを無効にしないとエラーになるのでその対応。

config.force_ssl = false ←falseにする。

docker-compose up -dを実行する。

コンテナを起動する。

$ docker-compose up -d

Railsコンテナに接続する。

$ docker ps
→コンテナIDを確認する。

$ docker exec -it [コンテナID] bash

Railsの各種セットアップを行う。

DBのセットアップを行う。

$ bundle exec rails db:migrate

テスト用のデータを投入する。(これは必要に応じてで大丈夫。)

$ bundle exec rails db:seed

アセットのコンパイルを行う。

$ bundle exec assets:precompile

Webサーバを起動する。

Pumaを起動する。

$ puma -p 8080 -e production -C config/puma.rb

ブラウザから「http://localhost:18080」にアクセスすると以下のようにSAMPLE APPが表示されるはず!

RailsチュートリアルのDocker化
DockerRails
スポンサーリンク
シェアする
katsuyaをフォローする

コメント

タイトルとURLをコピーしました