LoginSignup
1
1

More than 1 year has passed since last update.

【Docker×Rails6】solidusを使ってECサイトを構築する(環境構築編)

Last updated at Posted at 2021-08-19

備忘録として開発の流れを残しておきます。

バージョン情報

Ruby 2.7.1
Rails 6.1.4
MySQL 5.7
Nginx 1.19.10

前提

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

ファイル構成

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

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

フォルダ作成

$ mkdir -p ~/project/solidus
$ cd ~/project/solidus
$ mkdir -p containers/nginx
$ mkdir environments

※mkdir -pで、必要に応じて親ディレクトリも作成してくれる。

Dockerfile作成(app用)

$ vim Dockerfile
# Dockerfile
FROM ruby:2.7.1

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_16.x | bash - && \
    apt-get install -y nodejs

RUN mkdir -p /var/www/solidus

WORKDIR /var/www/solidus

ADD Gemfile /var/www/solidus/Gemfile
ADD Gemfile.lock /var/www/solidus/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /var/www/solidus

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

Gemfile作成

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

Dockerfile作成(web用)

$ cd ~/project/solidus
$ 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/solidus.conf

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

nginxの設定ファイル作成

$ cd ~/project/solidus
$ vim containers/nginx/nginx.conf
upstream puma {
  server unix:///var/www/solidus/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/solidus/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 @solidus;
  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/solidus
$ vim environments/db.env
MYSQL_ROOT_PASSWORD=db_root_password
MYSQL_USER=user_name
MYSQL_PASSWORD=user_password

docker-composeファイル作成

$ cd ~/project/solidus
$ 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/solidus
      - public-data:/var/www/solidus/public
      - tmp-data:/var/www/solidus/tmp
      - log-data:/var/www/solidus/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/solidus/public
      - tmp-data:/var/www/solidus/tmp
    ports:
      - 80:80
    depends_on:
      - app
volumes:
  public-data:
  tmp-data:
  log-data:
  db-data:

Railsアプリの作成

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

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

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

pumaの設定ファイル修正

$ cd ~/project/solidus
$ 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/solidus
$ 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: solidus_development

test:
  <<: *default
  database: solidus_test

Dockerイメージのビルド

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

solidus_appとsolidus_webのイメージが作成できていれば、イメージの作成は完了です。

Webpackerをインストール

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

Dockerコンテナの立ち上げ

$ cd ~/project/solidus
$ docker-compose up -d
$ docker-compose ps

solidus_appとsolidus_dbとsolidus_webのコンテナのStateがUpになっていれば、コンテナの立ち上げは成功です。

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

$ cd ~/project/solidus
$ 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/solidus
$ docker-compose exec app rails db:create

開発環境構築完了

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

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

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