2
2

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.

【備忘録】【Rails+Docker+AWS】開発環境構築から本番公開まで(1/3 開発環境構築編)

Last updated at Posted at 2021-06-30

下記記事を参考にさせていただき、dockerで環境構築してデプロイまでもっていきました。
多分何度も作り直すことになると思ったので、コピペするだけでスムーズに作れるように
バージョン情報を自分用に合わせて記事に残させていただきました。
(少し補足している箇所もあります)

▼参考にさせていただいた記事▼

大変丁寧でわかりやすい記事でして、とても助けられましたm(__)m

バージョン情報

Ruby 3.0.0
Rails 6.1.4
MySQL 5.7
Nginx 1.19.10

前提

AWSにアカウント作成済
docker hubにアカウント作成済
docker インストール済

ファイル構成

現状のアプリのフォルダ構成に、下記のファイルを追加します。

~/project/remote-work-space
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── containers ── nginx
├                 ├── Dockerfile
├                 └── nginx.conf
├── docker-compose.yml
└── environments ── db.env

フォルダ作成

$ mkdir -p ~/project/remote-work-space
$ cd ~/project/remote-work-space
$ mkdir -p containers/nginx
$ mkdir environments

Dockerfile作成(app用)

$ vim Dockerfile
# Dockerfile
FROM ruby:3.0.0

RUN apt-get update -qq && \
    apt-get install -y build-essential libpq-dev nodejs vim

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 curl -sL https://deb.nodesource.com/setup_10.x | bash - \
        && apt-get install -y nodejs

RUN mkdir -p /var/www/remote-work-space

WORKDIR /var/www/remote-work-space

ADD Gemfile /var/www/remote-work-space/Gemfile
ADD Gemfile.lock /var/www/remote-work-space/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /var/www/remote-work-space

RUN mkdir -p tmp/sockets
RUN mkdir -p tmp/pids

Gemfile作成

$ cd ~/project/remote-work-space
$ touch Gemfile.lock
$ vim Gemfile
# Gemfile
source 'https://rubygems.org'
gem 'rails', '6.1.4'

Dockerfile作成(web用)

$ cd ~/project/remote-work-space
$ vim containers/nginx/Dockerfile
# containers/nginx/Dockerfile
FROM nginx:1.19.10

RUN rm -f /etc/nginx/conf.d/*

ADD nginx.conf /etc/nginx/conf.d/remote-work-space.conf

CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

nginxの設定ファイル作成

$ cd ~/project/remote-work-space
$ vim containers/nginx/nginx.conf
upstream puma {
  server unix:///var/www/remote-work-space/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name puma;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  location ~ ^/assets/ {
    root /var/www/remote-work-space/public;
  }

  client_max_body_size 100m;
  error_page 404 /404.html;
  error_page 505 502 503 504 /500.html;
  try_files $uri/index.html $uri @remote-work-space;
  keepalive_timeout 5;

  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://puma;
  }
}

データベース設定ファイル作成

$ cd ~/project/remote-work-space
$ vim environments/db.env
MYSQL_ROOT_PASSWORD=db_root_password
MYSQL_USER=user_name
MYSQL_PASSWORD=user_password

docker-composeファイル作成

$ cd ~/project/remote-work-space
$ vim docker-compose.yml
version: "3"
services:
  app:
    build:
      context: .
    env_file:
      - ./environments/db.env
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/var/www/remote-work-space
      - public-data:/var/www/remote-work-space/public
      - tmp-data:/var/www/remote-work-space/tmp
      - log-data:/var/www/remote-work-space/log
    depends_on:
      - db
  db:
    image: mysql:5.7
    env_file:
      - ./environments/db.env
    volumes:
      - db-data:/var/lib/mysql
  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/var/www/remote-work-space/public
      - tmp-data:/var/www/remote-work-space/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

Railsアプリの作成

Dockerデスクトップが立ち上がっている状態で、下記コマンドを実行します。

$ cd ~/project/remote-work-space
$ docker-compose run --rm app rails new . --force --no-deps --database=mysql --skip-bundle
# 数分かかります。
$ ls

見慣れたRailsのファイルが並んでいれば、Railsアプリ作成完了です。

pumaの設定ファイル修正

$ cd ~/project/remote-work-space
$ cp /dev/null config/puma.rb
$ vim config/puma.rb
threads_count = ENV.fetch("RAILES_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count
port ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILES_ENV") { "development" }
plugin :tmp_restart

app_root = File.expand_path("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"

stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log"

データベース接続情報ファイル修正

$ cd ~/project/remote-work-space
$ cp /dev/null config/database.yml
$ vim config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILES_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch("MYSQL_USER") { 'root' } %>
  password: <%= ENV.fetch("MYSQL_PASSWORD") { 'password' } %>
  host: db

development:
  <<: *default
  database: remote-work-space_development

test:
  <<: *default
  database: remote-work-space_test

Dockerイメージのビルド

$ cd ~/project/remote-work-space
$ docker-compose build # 数分かかります
$ docker images

remote-work-space_appとremote-work-space_webのイメージが作成できていれば、イメージの作成は完了です。

Webpackerをインストール

$ docker-compose run --rm app rails webpacker:install 
# バージョン6以降なので、webpacker をインストールします。

Dockerコンテナの立ち上げ

$ cd ~/project/remote-work-space
$ docker-compose up -d
$ docker-compose ps

remote-work-space_appとremote-work-space_dbとremote-work-space_webのコンテナのStateがUpになっていれば、コンテナの立ち上げは成功です。

データベースへアクセス権限付与

$ cd ~/project/remote-work-space
$ vim db/grant_user.sql
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%';
FLUSH PRIVILEGES;
$ docker-compose exec db mysql -u root -p -e"$(cat db/grant_user.sql)"
Enter password: db_root_password
$ docker-compose exec db mysql -u user_name -p -e"show grants;"
Enter password: user_password

データベース作成

$ cd ~/project/remote-work-space
$ docker-compose exec app rails db:create

開発環境構築完了

開発環境の構築は終わりです。Welcomeページを見てみましょう。
http://localhost

あとは、好きなエディタ(VSCodeとか)で、~/project/remote-work-spaceを開いて、開発していけばOK!

開発環境構築後の開発の仕方

これまで通り、基本ローカル環境で行います。その際必ずコマンドの先頭に「docker-compose exec app」をつけること!
(gitコマンドには特に何もつけない)

もしコンテナの中に入りたい場合は、下記実行。

$ docker-compose exec app bash

するとプロンプト( ターミナルの左側の部分 )が以下のように変わると思います。( @の後ろはコンテナのID )

root@97b8e3430f3f:/remote-work-space#

コンテナを抜けるには、以下のコマンドを実行。

$ exit

$ docker-compose buildについて

docker-composeを使ったRailsアプリ開発であるため、Gemfileを更新した際はbuildし直すこと。

デバッグについて

開発中にエラーが発生し、controllerを編集し、デバッグしたとします。
この場合、一度サーバーを再起動する必要があります。

Dockerの場合、Railsのコンテナ( remote-work-space_app_1 )ごと以下のコマンドで再起動します。

$ docker-compose restart app

しかし、デバッグするたびにいちいちコンテナを再起動するのは非効率です。
なので、サーバー起動中もコードの更新をチェックしてくれるように設定します。

config/environments/development.rbの一番下に記載されている以下を

config.file_watcher = ActiveSupport::EventedFileUpdateChecker

次のように変更します。

config.file_watcher = ActiveSupport::FileUpdateChecker

たったこれだけで、再起動を行わずにデバッグが可能となります。

AWSコンソール画面編へ続く
https://qiita.com/asami___t/items/58a407baf143b6b74db8

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?