[RUBY] [Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker

[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker

Inhaltsverzeichnis


Konstruktionsbild

Dieses Mal werden wir drei Container erstellen.

image.png

Betriebsumgebung / Voraussetzungen

【Betriebsumgebung】 OS : macOS 10.14.6 Docker : 19.03.8 ruby : 2.6.5 rails : 5.2.4

[Voraussetzungen] Docker für Mac installiert

SCHRITT 1. Erstellen Sie eine Docker-Datei

Erstellen Sie zunächst einen Docker-Ordner und eine leere Datei. Der Inhalt der Datei wird später beschrieben.

image.png

SCHRITT 1-1. Nginx Dockerfile

Unten finden Sie die Nginx-Docker-Datei. findpro-bangkok ist der App-Name. Ändern Sie ihn in Ihren eigenen App-Namen.

ruby:Dockerfile:nginx



FROM nginx:1.15.8

#Löschen Sie im Include-Verzeichnis
RUN rm -f /etc/nginx/conf.d/*

#Kopieren Sie die Nginx-Konfigurationsdatei in den Container
COPY /docker/nginx/nginx.conf /etc/nginx/conf.d/findpro-bangkok.conf

#Platzieren Sie öffentliche Dateien wie Bilder in Nginx
RUN mkdir -p /findpro-bangkok/public
COPY ./public /findpro-bangkok/public

#Starten Sie Nginx, nachdem der Build abgeschlossen ist
CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

SCHRITT1-2. Nginx-Einstellungsdatei

Erstellen Sie die Datei nginx.conf, die die Nginx-Einstellungen beschreibt.

nginx.conf


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

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

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

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

  #Proxy-bezogene Einstellungen umkehren
  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;
  }
}

SCHRITT 1-3. Rails Dockerfile

Erstellen Sie als Nächstes eine Docker-Datei für Schienen.

Dockerfile


FROM ruby:2.6.5

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

#Ändern Sie Ihren eigenen App-Namen
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

#Kopieren Sie alle Dateien im Projektordner in den Rails-Container
COPY . .

#Erstellen Sie ein Verzeichnis für die Socket-Kommunikation
RUN mkdir -p tmp/sockets

SCHRITT 2. Puma-Einstellungen

Bearbeiten Sie die Puma-Konfigurationsdatei im folgenden Konfigurationsordner.

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

SCHRITT 3. Docker-Compose erstellen

Docker-Compose ist ein Mechanismus zum gleichzeitigen Ausführen von Builds mehrerer Container.

Erstellen Sie eine Docker-Compose-Datei direkt unter dem Projektordner.

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 synchronisiert den aktuellen Projektordner mit dem Containerordner.Dadurch können die Änderungen im Container übernommen werden, ohne dass sie neu erstellt werden müssen..
      - .:/findpro-bangkok:cached
      #tmp auf dem Host-Computer für die Socket-Kommunikation mit nginx_Erstellen Sie eine Datei mit dem Namen data und geben Sie sie für den Nginx-Container frei.
      - 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'

SCHRITT 4. Datenbankeinstellungen

Legen Sie abschließend die Datenbank in database.yml fest. Da es sich bei dieser Zeit um eine Entwicklungsumgebung handelt, werden die Einstellungen bis zur Entwicklung beschrieben.

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

###Unten weggelassen

SCHRITT 5. Bauen Sie den Container

Jetzt ist es Zeit, den erstellten Container zu starten.

Wechseln Sie zunächst zum Projektordner im Terminal und führen Sie den folgenden Befehl aus.

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

Führen Sie den folgenden Befehl aus, nachdem der Build erfolgreich war.

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

SCHRITT 6. Erstellen einer Datenbank

Schließlich müssen wir eine Datenbank erstellen Starten Sie ein anderes neues Terminal und betreten Sie den Rails-Container.

[@JS-MAC findpro-bangkok]$ docker ps #Schienencontainer(findpro-bangkok_app)Überprüfen Sie die ID von
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 #Melden Sie sich beim Rails-Container an.22e ist eine Abkürzung für App Container ID.
# rails db:create #Erstellen Sie eine Datenbank.
Database 'findpro-bangkok_development' already exists
Database 'findpro-bangkok_test' already exists
# rails db:migrate #Führen Sie die Migration durch.

SCHRITT 7. Bestätigung

Geben Sie abschließend localhost in Chrome ein, um dies zu bestätigen.

Recommended Posts

[Rails] [Docker] Kopieren und Einfügen ist in Ordnung! So erstellen Sie eine Rails-Entwicklungsumgebung mit Docker
[Kopieren und Einfügen] Erstellen Sie mit Docker Compose Part 2 eine Laravel-Entwicklungsumgebung
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
So erstellen Sie eine Rails 6-Umgebung mit Docker
So beenden Sie Docker für Mac und erstellen eine Docker-Entwicklungsumgebung mit Ubuntu + Vagrant
[Rails] So erstellen Sie eine Umgebung mit Docker
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
Erstellen Sie mit Docker eine Wordpress-Entwicklungsumgebung
So installieren Sie Pry nach dem Erstellen einer Rails-Entwicklungsumgebung mit Docker
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]
Schritte zum Erstellen einer Ruby on Rails-Entwicklungsumgebung mit Vagrant
Erstellen Sie eine Entwicklungsumgebung für Docker + Rails6 + Postgresql
Erstellen Sie mit Docker schnell eine WordPress-Entwicklungsumgebung
So erstellen Sie eine API mit GraphQL und Rails
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
Erstellen Sie mit Docker eine lokale Entwicklungsumgebung für Rails-Tutorials (Rails 6 + PostgreSQL + Webpack)
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Ubuntu-Version).
Vorlage: Erstellen Sie eine Ruby / Rails-Entwicklungsumgebung mit einem Docker-Container (Mac-Version).
So erstellen Sie eine Java-Entwicklungsumgebung mit VS Code
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Erstellen Sie eine Entwicklungsumgebung, um Ruby on Jets + React-Apps mit Docker zu erstellen
Erstellen Sie mit Docker eine Node.js-Umgebung
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
So erstellen Sie mit Docker ~ Express ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
[Grobe Erklärung] So trennen Sie den Betrieb der Produktionsumgebung und der Entwicklungsumgebung mit Rails
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Erstellen Sie mit Docker-Introduce Bootstrap und Font Awesome with Webpack- eine lokale Entwicklungsumgebung für Rails-Tutorials.
Verfahren zum Erstellen einer Rails-Anwendungsentwicklungsumgebung mit Docker [Rails, MySQL, Docker]
So erstellen Sie mit Docker ~ MySQL ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
So erstellen Sie mit Docker ~ Sequelize ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Erstellen einer Rails 6- und PostgreSQL-Umgebung mit Docker
Einfache Konstruktion der Docker + Django-Entwicklungsumgebung
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
Ausführen mit normalen Befehlen für die Entwicklungssprache in der Docker-Entwicklungsumgebung
Erstellen Sie eine Bulletin-Board-API mit Zertifizierung und Autorisierung mit Rails 6 # 1 Environment Construction
Erstellen Sie eine Laravel / Docker-Umgebung mit VSCode devcontainer
Einfache Erstellung der Docker Compose + Django-Entwicklungsumgebung
Rails6.0 ~ So erstellen Sie eine umweltfreundliche Entwicklungsumgebung
[Win10] Erstellen Sie eine JSF-Entwicklungsumgebung mit NetBeans
Bereiten Sie eine Scraping-Umgebung mit Docker und Java vor
Erstellen Sie eine Entwicklungsumgebung für Docker, Java und Code
So erstellen Sie eine Pytorch-Umgebung unter Ubuntu
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code