Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]

Bonjour. Cette fois également, j'ai résumé la procédure de création d'un environnement de développement d'applications Rails avec Docker. La dernière fois, j'ai démarré deux conteneurs, un pour Rails et un pour la base de données, mais cette fois j'ai également démarré le conteneur Nginx en tant que serveur Web.

Préparation préalable

environnement

Ruby: 2.5.8 Rails: 5.2.4.4 MySQL: 5.7.31 Nginx: 1.19.2 Docker: 19.03.12 Docker Compose: 1.26.2

procédure

1. Création de répertoires et de fichiers

La configuration générale est la suivante. Maintenant, créons des répertoires et des fichiers comme indiqué dans ce diagramme de configuration.

Composition globale


/test-app
├── Dockerfile
├── Dockerfile.nginx
├── docker-compose.yml
├── nginx.conf
├── Gemfile
└── Gemfile.lock

Commencez par créer le répertoire racine de votre projet.

terminal



$ mkdir test-app

Et directement sous le répertoire racine

Créez-les.

terminal



$ cd test-app
$ touch Dockerfile Dockerfile.nginx docker-compose.yml nginx.conf Gemfile Gemfile.lock 

2. Modifier le fichier

Le contenu de chaque fichier créé ci-dessus est le suivant. (Laissez Gemfile.lock vide.)

Dockerfile



FROM ruby:2.5
RUN apt-get update && apt-get install -y \
    build-essential \
    node.js
WORKDIR /test-app
COPY . /test-app
RUN bundle install

Dockerfile.nginx



FROM nginx
RUN rm -f /etc/nginx/conf.d/*
COPY nginx.conf /etc/nginx/conf.d/test-app.conf
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

containers/nginx/nginx.conf



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

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

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

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

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

  location /favicon {
    empty_gif;
    access_log    off;
    log_not_found off;
  }
}

Gemfile



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

docker-compose.yml



version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/test-app
    tty: true
    stdin_open: true
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      - 'MYSQL_ROOT_PASSWORD=password'
    volumes:
      - 'db-data:/var/lib/mysql'

  web:
    build:
      context: .
      dockerfile: Dockerfile.nginx
    volumes:
      - ./public:/test-app/public
      - ./tmp:/test-app/tmp
    ports:
      - 80:80
    depends_on:
      - app

volumes:
  db-data:

3. Configurer des rails dans le conteneur d'applications

terminal



$ docker-compose run --rm app rails new . --force --database=mysql --skip-bundle

4. Créez le dossier tmp / sockets et modifiez le fichier créé

Tout d'abord, créez un dossier sockets dans le dossier tmp.

Modifiez ensuite les trois fichiers suivants créés par Rails Setup.

config/database.yml



default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password   #docker-compose.yml MYSQL_ROOT_Définissez la valeur de PASSWORD
  host: db   #docker-compose.Correspondance avec le nom du service yml

development:
  <<: *default
  database: test-app_development

config/puma.rb



threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
threads threads_count, threads_count

port        ENV.fetch("PORT") { 3000 }

environment ENV.fetch("RAILS_ENV") { "development" }

pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

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", true

config/environments/production.rb


# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = true   #La valeur par défaut est false, alors changez-la en true

Il n'y a pas de problème pour créer l'environnement de développement sans changer ce config / environnements / production.rb, mais j'ai eu une erreur de précompilation d'actif lors du déploiement dans l'environnement de production, donc je l'ai changé ici Il est.

5. Démarrez le conteneur, créez la base de données

terminal



$ docker-compose up -d --build
$ docker-compose exec app rails db:create

Maintenant, lorsque vous visitez http: // localhost, vous devriez voir l'écran d'accueil de Rails.

référence

Recommended Posts

Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
[Docker] Construction de l'environnement de développement Rails6 / Ruby2.7 / MySQL8
Procédure de création d'un environnement de développement d'applications Rails avec Docker [Rails, MySQL, Docker]
[Docker] Construction de l'environnement Rails 5.2 avec docker
Construction de l'environnement de développement Laravel avec Docker (Mac)
Construire un environnement Rails 6 + MySQL avec Docker compose
Construction de l'environnement Rails Docker
Création d'un environnement de développement pour Ruby on Rails à l'aide de Docker + VSCode (Remote Container)
[Rails] Développement avec MySQL
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Procédure de construction de l'environnement Docker "Rails 6 x MySQL 8" à partager avec les équipes
[Développement d'applications Jakarta EE 8 avec Gradle] 1. Construction de l'environnement
Procédure de construction et de développement de l'environnement local Wordpress avec Docker
Mémo de construction de l'environnement MySQL 5.7 (Docker)
[Rails / MySQL] Construction de l'environnement Mac
Manuel de construction de l'environnement de développement stable pour "Rails6" avec "Docker-compose"
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Créer un environnement Node.js avec Docker Compose
Construction d'environnement pour le développement d'applications Servlet
Construction d'environnement avec Docker pour les débutants
Construction d'environnement de développement d'applications Web Java avec VS Code (struts2)
Rails sur la procédure de construction de l'environnement Docker
Ruby on Rails - De la construction d'environnement au développement d'application simple sur WSL2
Comment installer Pry après avoir créé un environnement de développement Rails avec Docker
Construire un environnement PostgreSQL avec Docker (de la configuration à juste avant le développement)
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]
Apprentissage des instructions SQL ~ Construction de l'environnement ~ Docker + MySQL
Construction de l'environnement GPU avec Docker [version d'octobre 2020]
Construction de Rails 6 et environnement PostgreSQL avec Docker
Sapper × Go (écho) × Construction de l'environnement de développement Docker
Créer un environnement de développement PureScript avec Docker
Déployer sur heroku avec Docker (Rails 6, MySQL)
Modifier Mysql avec des commandes dans l'environnement Docker
Créer un environnement de développement Spring Boot-gradle-mysql avec Docker
Construction de l'environnement de développement Java Spring Boot + Docker
[AWS] Publier l'application Rails avec nginx + puma
Rails & React & Webpacker & Manuel de construction de l'environnement MySQL
Comment créer un environnement Rails 6 avec Docker
Procédure de migration de l'environnement de développement d'applications Rails vers Docker même si vous êtes inexpérimenté (Rails5 + MySQL8.0 + docker-compose)
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
[Construction de l'environnement] Rails + MySQL + Docker (les débutants peuvent également l'utiliser en 30 minutes!)
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
[Construction de l'environnement Rails & Docker & MySQL] J'ai démarré le conteneur, mais je ne trouve pas MySQL ...?
[Rails API x Docker] Construction facile de l'environnement avec contrôle de la coque et du fonctionnement avec Flutter