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.

CrunchtimerAdvent Calendar 2020

Day 11

Ruby on Rails(v6対応)をDockerで環境構築しHerokuにデプロイする

Posted at

本記事の対象者

Railsは未経験でしたが、とりあえず学習環境つくろうと思い、備忘録のため記事化しました。
アプリケーションの開発に集中するため、Docker環境をコピペで作りたい人向けの記事です。
Rails6を対象としています。

自身のスキルレベル

  • Railsは全くの未経験(なんにも知りません)
  • Dockerはそこそこやったことあります
  • 他フレームワークでWebの基本的な開発はやったことあります

必要なファイル

環境構築に必要なファイルは以下の通りです。
myappディレクトリを作って、以下のファイルを作成してください。

myapp
- Dockerfile
- Gemfile
- Gemfile.lock
- entrypoint.sh
- docker-compose.yml

1. 環境構築

1-1. Dockerfile

Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

# 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

# Node.js
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs

RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

1-2. docker-compose.yml

後にHerokuを使うため、dbはPostgreを指定しました。
(Postgreだと無料でHeroku環境が作れるため)

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    environment:
      POSTGRES_HOST_AUTH_METHOD: 'trust'
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

1-3. Gemfile

Rails用のパッケージファイルだそうです。
バージョン6を指定しています。

Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6'

1-4. Gemfile.lock

空のGemfile.lockを作成しておきます。
後にビルド時に自動的に更新されます。

1-5. entrypoint.sh

entrypoint.sh
#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

2. ビルド

Dockerのビルド。

$ docker-compose build

パッケージのインストール。

$ docker-compose run web yarn

Rails6から必須のwebpackerのインストールを行なっておきます。

$ docker-compose run web bundle exec rails webpacker:install

コンテナ起動とDBの作成を行います。

$ docker-compose up
$ docker-compose run web rake db:create

ここまで成功したらRailsが起動していることを確認します。
同時に、ローカル環境にRailsの環境一式がインストールされていることを確認してください。

3. Herokuデプロイ

作った環境をインターネット経由でもみたい方は、Herokuにデプロイするところまでやってみましょう。

Herokuのアカウントが無い人は事前に作成しておいてください。
作ったローカル環境をHerokuにデプロイします。

# herokuのコンテナレジストリにログイン
heroku container:login

# 新しいappを作成
heroku create

# イメージを作成してコンテナレジストリにpush
heroku container:push web

# postgresqlアドオンの無料プランを追加
heroku addons:create heroku-postgresql:hobby-dev

# DBセットアップ
heroku run rails db:migrate

# イメージをherokuへデプロイ
heroku container:release web

# 実際にアクセスして/usersを確認してみる
heroku open

4. アプリを開発

ここまでできたら、あとはアプリを開発のみです。
お疲れ様でした。

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?