Integrieren Sie Docker in Ihr Ruby on Rails-Portfolio!

Aktuellen Zustand

Hallo allerseits, dies ist Qiitas erster Beitrag! Ich denke, es stimmt etwas nicht, aber bitte sag es mir zu diesem Zeitpunkt (lacht) Dieses Mal stellen wir ein Rails-Portfolio bereit, das bereits mit Aws und Docker erstellt wurde. Im aktuellen Status habe ich ein Portfolio mit Rails und Aws erstellt, aber ich denke, es ist schwierig, eine Umgebung zu erstellen, und ich möchte das Portfolio mit Docker bereitstellen, wodurch die Verwaltung der Umgebung mit Code vereinfacht wird.

Diagramm

Das Konfigurationsdiagramm zum Zeitpunkt der Bereitstellung lautet wie folgt. スクリーンショット 2020-07-14 21.27.20.png Um es auf sehr einfache Weise zu erklären: Wenn eine Kommunikationsanforderung vom Client kommt, geht sie an Nginx und kommuniziert mit Puma, wenn eine dynamische Verarbeitung erforderlich ist. Zu diesem Zeitpunkt kommunizieren auch Puma und MySQL. Dieses Mal möchte ich diese Konfiguration mit Docker erstellen.

Was du brauchst

Bei der Bereitstellung dieses Mal verwenden wir EC2 und RDS of Aws. Wir werden die Umgebung mit Docker erstellen, aber unter dem Gesichtspunkt der Datenpersistenz werden wir diesmal RDS Mysql anstelle von Docker verwenden. Das Folgende sind die Vorbereitungen und Arbeiten, die für die Arbeit erforderlich sind.

Artikel, auf die verwiesen wird

Arbeit

Erstellen Sie zunächst eine Docker-Datei. Hier schreiben wir den Code zum Erstellen der Umgebung um Ruby mithilfe von Dockerfile.

FROM ruby:2.5.7

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

RUN mkdir /App Name

WORKDIR /App Name

ADD Gemfile /App Name/Gemfile
ADD Gemfile.lock /App Name/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /App Name

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

Erstellen Sie als Nächstes eine Docker-Komposition. Hier verwalten wir den Docker-Container und geben das zu tarnende Teil an!

Docker-compose.yml


version: '3'
services:
  app:
    build: .
    command: bundle exec puma -C config/puma.rb -e production
    volumes:
      - .:/App Name:cached
      - public-data:/App Name/public
      - tmp-data:/App Name/tmp
      - log-data:/App Name/log

  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/App Name/public
      - tmp-data:/App Name/tmp
    ports:
      - 80:80
      
volumes:
  public-data:
  tmp-data:
  log-data:

Erstellen Sie als Nächstes die folgende Datei. Hier richten wir den Nginx-Container ein.

FROM nginx:1.15.8

RUN rm -f /etc/nginx/conf.d/*

ADD nginx.conf /etc/nginx/conf.d/App Name.conf

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

containers/nginx/nginx.conf


upstream FashionInformation_app {
  server unix:///App Name/tmp/sockets/puma.sock;
}

server {
  listen 8000;
  server_Name Domain Name;

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

  root /App Name/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 @App Name;
  keepalive_timeout 5;

  location @App Name{
    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://App Name;
  }
}

Stellen Sie eine Rails-Anwendung bereit

Klone Git auf EC2, wenn du hier bist!

ec2-user@ip-xxx-xx-xx-xxx ~]$Git-Klon-GitHub-Repository-URL

Image erstellen

ec2-user@ip-xxx-xx-xx-xxx]$ cd myapp
[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose build

Vorbereitung vor dem Starten des Servers

[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose run app rails assets:precompile RAILS_ENV=production

Vorbereitung vor dem Starten des Servers

[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose up -d

Erstellen einer Datenbank, Lesen einer Migrationsdatei

[ec2-user@ip-xxx-xx-xx-xxx myapp]$ docker-compose exec app rails db:create db:migrate RAILS_ENV=production

Wenn Sie auf die öffentliche IP zugreifen und diese korrekt angezeigt wird, sind Sie erfolgreich!

Recommended Posts

Integrieren Sie Docker in Ihr Ruby on Rails-Portfolio!
Portfolioerstellung Ruby on Rails
Integrieren Sie Elasticsearch in Ihre Rails-App
[Portfolio] Lesezeichen-Verwaltungs-App [Ruby on Rails]
Anfänger haben mit Ruby on Rails ein Portfolio erstellt
Einführung in Rspec mit Ruby on Rails x Docker
Ruby on Rails Elementary
Ruby on Rails Grundlagen
Ruby On Rails Association
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ruby on Rails Lernrekord -2020.10.04
[Ruby on Rails] Debuck (bindend.pry)
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Brechen Sie die Ruby on Rails-Migration ab
Ruby on Rails Lernrekord -2020.10.06
Integrieren Sie circleCI in die CircleCI Rails-App
Zusammenfassung der Ruby on Rails-Validierung
Ruby on Rails Grundlegendes Memorandum
[Ruby on Rails] Leseversuch (: [],: Schlüssel)
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
[Ruby on Rails] Paging-Funktion eingeführt
Grundkenntnisse in Ruby on Rails
Progate Ruby on Rails5 Rückblick
Verwendung von Ruby on Rails
Ruby on Rails Japanisch-Englisch kompatibler i18n
[Ruby on Rails] CSV-Ausgabefunktion
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
Konstruktionsverfahren für Rails on Docker-Umgebungen
[Ruby on Rails] Erstellung der Bestätigungsseite
Ruby On Rails entwickelt Routing-Konflikte
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
Stellen Sie Rails on Docker für Heroku bereit
[Ruby on Rails] Praktische Hilfsmethode
[Ruby on Rails] Stoppen Sie "Looping bis ..."
Erstellen einer Entwicklungsumgebung für Ruby on Rails mit Docker + VSCode (Remote Container)
[Ruby on Rails] Einführung der Anfangsdaten
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
[Ruby on Rails] Erstellen eines Anfrageformulars
Ruby on Rails6 Praktischer Leitfaden cp13 ~ cp15 [Memo]
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Codeprüfung mit Rubocop-Airbnb
[Ruby on Rails] 1 Modell CRUD (Routing Main)
Ruby on Rails-Installationsmethode [Mac Edition]
Modell [Ruby on Rails], Befehl für Controller-Terminal
Ruby on Rails6 Praktischer Leitfaden cp7 ~ cp9 [Memo]