[RUBY] [Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker

[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker

table des matières


Image de construction

Cette fois, nous allons créer trois conteneurs.

image.png

Environnement d'exploitation / prérequis

【Environnement d'exploitation】 OS : macOS 10.14.6 Docker : 19.03.8 ruby : 2.6.5 rails : 5.2.4

[Conditions préalables] Docker pour Mac installé

ÉTAPE1. Créer un fichier Docker

Tout d'abord, créez un dossier Docker et un fichier vide. Le contenu du fichier sera décrit plus loin.

image.png

ÉTAPE1-1. Nginx Dockerfile

Vous trouverez ci-dessous le fichier docker nginx. findpro-bangkok est le nom de l'application, alors changez-le en votre propre nom d'application.

ruby:Dockerfile:nginx



FROM nginx:1.15.8

#Supprimer dans le répertoire d'inclusion
RUN rm -f /etc/nginx/conf.d/*

#Copier le fichier de configuration Nginx dans le conteneur
COPY /docker/nginx/nginx.conf /etc/nginx/conf.d/findpro-bangkok.conf

#Placer des fichiers publics tels que des images dans nginx
RUN mkdir -p /findpro-bangkok/public
COPY ./public /findpro-bangkok/public

#Démarrez Nginx une fois la construction terminée
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

Fichier de configuration STEP1-2. Nginx

Créez nginx.conf qui décrit les paramètres nginx.

nginx.conf


#Spécification de la destination du proxy
#Envoyez la demande reçue par Nginx au backend puma
upstream puma {
  #Je veux communiquer avec des prises, donc puma.Spécifiez la chaussette
  server unix:///findpro-bangkok/tmp/sockets/puma.sock;
}

server {
  listen 80 default;
  #Spécifiez le domaine ou l'adresse IP
  server_name localhost;

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

  #Spécifier la racine du document
  root /findpro-bangkok/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 @puma;
  keepalive_timeout 5;

  #Paramètres liés au proxy inverse
  location @puma {
    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;
  }
}

ÉTAPE 1-3. Rails Dockerfile

Ensuite, créez un Dockerfile pour les rails.

Dockerfile


FROM ruby:2.6.5

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

#Changer le nom de votre propre application
ENV RAILS_ROOT /findpro-bangkok

RUN mkdir $RAILS_ROOT
WORKDIR $RAILS_ROOT

COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN gem install bundler:2.1.4
RUN bundle install

#Copiez tous les fichiers du dossier du projet dans le conteneur Rails
COPY . .

#Créer un répertoire pour la communication socket
RUN mkdir -p tmp/sockets

ÉTAPE 2. Paramètres Puma

Modifiez le fichier de configuration puma dans le dossier de configuration suivant.

image.png

puma.rb


threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i
threads threads_count, threads_count
port        ENV.fetch('PORT') { 3000 }
environment ENV.fetch('RAILS_ENV') { 'development' }
plugin :tmp_restart

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

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

ÉTAPE 3. Création de docker-compose

docker-compose est un mécanisme pour exécuter des builds de plusieurs conteneurs à la fois.

Créez un fichier docker-compose directement sous le dossier du projet.

image.png

docker-compose.yml


version: '3'
volumes:
  tmp_data:
  public_data:
services:
  nginx:
    build:
      context: ./
      dockerfile: ./docker/nginx/Dockerfile
    ports:
      - '80:80'
    volumes:
      - public_data:/findpro-bangkok/public
      - tmp_data:/findpro-bangkok/tmp/sockets
    depends_on:
      - app
    links:
      - app
  app:
    build:
      context: ./
      dockerfile: ./docker/rails/Dockerfile
    command: bundle exec puma
    volumes:
     #.:/findpro-Bangkok synchronise le dossier actuel du projet avec le dossier du conteneur.Cela permet aux modifications d'être reflétées dans le conteneur sans avoir à le reconstruire..
      - .:/findpro-bangkok:cached
      #tmp sur l'ordinateur hôte pour la communication socket avec nginx_Créez un fichier appelé data et partagez-le avec le conteneur nginx.
      - tmp_data:/findpro-bangkok/tmp/sockets
      - public_data:/findpro-bangkok/public
    tty: true
    stdin_open: true
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: 'postgres'

ÉTAPE 4. Paramètres de la base de données

Enfin, définissez la base de données dans database.yml. Puisque ce temps est un environnement de développement, les paramètres jusqu'au développement sont décrits.

image.png

# PostgreSQL. Versions 9.1 and up are supported.
#
# Install the pg driver:
#   gem install pg
# On OS X with Homebrew:
#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config
# On OS X with MacPorts:
#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
#   gem install pg
#       Choose the win32 build.
#       Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  port: 5432
  username: postgres
  password: postgres
  pool: 5

  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: findpro-bangkok_development

###Omis ci-dessous

ÉTAPE 5. Construisez le conteneur

Il est maintenant temps de démarrer le conteneur créé.

Tout d'abord, allez dans le dossier du projet dans le terminal et exécutez la commande suivante.

[JS-MAC findpro-bangkok]$ docker-compose build

Exécutez la commande suivante une fois la génération réussie.

[JS-MAC findpro-bangkok]$ docker-compose up

ÉTAPE 6. Création d'une base de données

Enfin, nous devons créer une base de données Démarrez un autre nouveau terminal et entrez dans le conteneur Rails.

[@JS-MAC findpro-bangkok]$ docker ps #Conteneur de rails(findpro-bangkok_app)Vérifiez l'ID de
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                NAMES
4549423f21ed        findpro-bangkok_nginx   "/bin/sh -c '/usr/sb…"   44 minutes ago      Up 3 seconds        0.0.0.0:80->80/tcp   findpro-bangkok_nginx_1
22ecc47308ae        findpro-bangkok_app     "bundle exec puma"       44 minutes ago      Up 5 seconds                             findpro-bangkok_app_1
755cb83a9bf4        postgres                "docker-entrypoint.s…"   44 minutes ago      Up 5 seconds        5432/tcp             findpro-bangkok_db_1
[@JS-MAC findpro-bangkok]$ docker exec -it 22e /bin/sh #Connectez-vous au conteneur Rails.22e est un acronyme pour l'ID de conteneur d'application.
# rails db:create #Créer une base de données.
Database 'findpro-bangkok_development' already exists
Database 'findpro-bangkok_test' already exists
# rails db:migrate #Effectuer la migration.

ÉTAPE 7. Confirmation

Enfin, tapez localhost dans chrome pour confirmer.

Recommended Posts

[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
[Copier et coller] Créez un environnement de développement Laravel avec Docker Compose, partie 2
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Comment créer un environnement Rails 6 avec Docker
Comment quitter Docker pour Mac et créer un environnement de développement Docker avec Ubuntu + Vagrant
[Rails] Comment créer un environnement avec Docker
Créer un environnement de développement PureScript avec Docker
Créer un environnement de développement Wordpress avec Docker
Comment installer Pry après avoir créé un environnement de développement Rails avec Docker
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]
Étapes pour créer un environnement de développement Ruby on Rails avec Vagrant
Créer un environnement de développement pour Docker + Rails6 + Postgresql
Créez rapidement un environnement de développement WordPress avec Docker
Comment créer une API avec GraphQL et Rails
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
Créez un environnement de développement local pour les didacticiels Rails avec Docker (Rails 6 + PostgreSQL + Webpack)
Modèle: créer un environnement de développement Ruby / Rails avec un conteneur Docker (version Ubuntu)
Modèle: créer un environnement de développement Ruby / Rails avec un conteneur Docker (version Mac)
Comment créer un environnement de développement Java avec VS Code
Essayez de créer un environnement de développement Java à l'aide de Docker
Créez un environnement de développement pour créer des applications Ruby on Jets + React avec Docker
Créer un environnement Node.js avec Docker
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
[Explication approximative] Comment séparer le fonctionnement de l'environnement de production et de l'environnement de développement avec Rails
J'ai essayé de créer un environnement de développement padrino avec Docker
Créez un environnement de développement local pour les didacticiels Rails avec Docker-Introduisez Bootstrap et Font Awesome avec Webpack-
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ MySQL ~
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Sequelize ~
Construction de Rails 6 et environnement PostgreSQL avec Docker
Construction d'un environnement de développement simple Docker + Django
Créer un environnement de débogage sur un conteneur - Créer un environnement de développement local pour les didacticiels Rails avec Docker -
J'ai construit un environnement de rails avec docker et mysql, mais j'étais malade
Comment exécuter avec des commandes de langage de développement normales dans l'environnement de développement Docker
Créez une API de tableau d'affichage avec certification et autorisation avec Rails 6 # 1 Construction de l'environnement
Créer un environnement Laravel / Docker avec VSCode devcontainer
Construction de l'environnement de développement Simple Docker Compose + Django
Rails6.0 ~ Comment créer un environnement de développement respectueux de l'environnement
[Win10] Créer un environnement de développement JSF avec NetBeans
Préparer un environnement de scraping avec Docker et Java
Créer un environnement de développement pour Docker, Java, vs code
Comment créer un environnement Pytorch sur Ubuntu
Créer un environnement de développement Spring Boot avec docker
Créer un environnement de développement Java avec VS Code