Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]

Hallo. Auch dieses Mal habe ich das Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker zusammengefasst. Das letzte Mal habe ich zwei Container gestartet, einen für Rails und einen für die Datenbank, aber dieses Mal habe ich auch den Nginx-Container als Webserver gestartet.

Vorbereitungen

Umgebung

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

Verfahren

1. Verzeichnisse und Dateien erstellen

Die Gesamtkonfiguration ist wie folgt. Jetzt erstellen wir Verzeichnisse und Dateien wie in diesem Konfigurationsdiagramm gezeigt.

Gesamtzusammensetzung


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

Erstellen Sie zunächst das Stammverzeichnis Ihres Projekts.

terminal



$ mkdir test-app

Und direkt unter dem Stammverzeichnis

Erstellen Sie diese.

terminal



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

2. Datei bearbeiten

Der Inhalt jeder oben erstellten Datei ist wie folgt. (Lassen Sie Gemfile.lock leer.)

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



#Angeben des Proxy-Ziels
#Senden Sie die von Nginx erhaltene Anfrage an das Backend-Puma
upstream test-app {
  #Ich möchte mit Steckdosen kommunizieren, also Puma.Geben Sie die Socke an
  server unix:///test-app/tmp/sockets/puma.sock;
}

server {
  listen 80;
  #Geben Sie die Domäne oder IP an
  server_name _;

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

  #Angeben des Dokumentstamms
  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;

  #Proxy-bezogene Einstellungen umkehren
  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. Richten Sie Rails im App-Container ein

terminal



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

4. Erstellen Sie den Ordner tmp / sockets und bearbeiten Sie die erstellte Datei

Erstellen Sie zunächst einen Sockets-Ordner im tmp-Ordner.

Bearbeiten Sie anschließend die folgenden drei von Rails Setup erstellten Dateien.

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_Stellen Sie den Wert von PASSWORD ein
  host: db   #docker-compose.Übereinstimmung mit dem Namen des yml-Dienstes

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   #Der Standardwert ist false. Ändern Sie ihn daher in true

Es gibt kein Problem beim Erstellen der Entwicklungsumgebung, ohne diese config / environment / Production.rb zu ändern, aber ich habe beim Bereitstellen in der Produktionsumgebung einen Fehler beim Vorkompilieren von Assets erhalten, daher habe ich ihn hier geändert Es ist.

5. Container starten, DB erstellen

terminal



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

Wenn Sie jetzt http: // localhost besuchen, sollte der Rails-Startbildschirm angezeigt werden.

Referenz

Recommended Posts

Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
[Docker] Rails 5.2-Umgebungskonstruktion mit Docker
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Aufbau der Rails Docker-Umgebung
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
[Rails] Entwicklung mit MySQL
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Konstruktionsverfahren für die Docker-Umgebung "Rails 6 x MySQL 8" für die gemeinsame Nutzung mit Teams
[Jakarta EE 8 Anwendungsentwicklung mit Gradle] 1. Umgebungskonstruktion
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Konstruktionsnotiz für die MySQL 5.7 (Docker) -Umgebung
[Rails / MySQL] Aufbau einer Mac-Umgebung
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Erstellen Sie die Node.js-Umgebung mit Docker Compose
Umgebungskonstruktion für die Entwicklung von Servlet-Anwendungen
Umgebungsbau mit Docker für Anfänger
Erstellung einer Java-Webanwendungsentwicklungsumgebung mit VS-Code (struts2)
Konstruktionsverfahren für Rails on Docker-Umgebungen
Ruby on Rails - Von der Umgebungskonstruktion bis zur einfachen Anwendungsentwicklung auf WSL2
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
Erstellen einer PostgreSQL-Umgebung mit Docker (vom Setup bis kurz vor der Entwicklung)
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]
SQL-Anweisungslernen ~ Umgebungskonstruktion ~ Docker + MySQL
Aufbau einer GPU-Umgebung mit Docker [Version Oktober 2020]
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Sapper × Go (Echo) × Aufbau einer Docker-Entwicklungsumgebung
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Bearbeiten Sie MySQL mit Befehlen in der Docker-Umgebung
Erstellen Sie mit Docker eine Spring Boot-gradle-mysql-Entwicklungsumgebung
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
[AWS] Veröffentlichen Sie die Rails-App mit Nginx + Puma
Rails & React & Webpacker & MySQL Environment Konstruktionshandbuch
So erstellen Sie eine Rails 6-Umgebung mit Docker
Vorgehensweise zum Migrieren der Rails-Anwendungsentwicklungsumgebung zu Docker, auch wenn Sie unerfahren sind (Rails5 + MySQL8.0 + Docker-Compose)
Erstellen Sie eine Debug-Umgebung auf einem Container. Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials.
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
[Umgebungskonstruktion] Rails + MySQL + Docker (Anfänger können es auch in 30 Minuten verwenden!)
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
[Aufbau der Rails & Docker & MySQL-Umgebung] Ich habe den Container gestartet, kann aber MySQL nicht finden ...?
[Rails API x Docker] Einfache Umgebungskonstruktion mit Shell- und Funktionsprüfung mit Flutter