Intégrez Docker à votre portefeuille Ruby on Rails!

État actuel

Bonjour à tous, c'est le premier post de Qiita! Je pense qu'il y a quelque chose qui ne va pas, mais merci de bien vouloir me le dire à ce moment-là (rires) Cette fois, nous déployons un portefeuille Rails qui a déjà été créé avec Aws et Docker. Dans l'état actuel, j'ai créé un portefeuille à l'aide de rails et d'Aws, mais je pense qu'il est difficile de créer un environnement, et j'aimerais déployer le portefeuille à l'aide de Docker, ce qui facilite la gestion de l'environnement avec du code.

Diagramme

Le diagramme de configuration au moment du déploiement est le suivant. スクリーンショット 2020-07-14 21.27.20.png Pour l'expliquer très simplement, lorsqu'une demande de communication provient du client, elle va à Nginx et communique avec puma lorsqu'un traitement dynamique est nécessaire, et à ce moment-là, puma et mysql communiquent également. Cette fois, j'aimerais créer cette configuration à l'aide de Docker.

De quoi as-tu besoin

Lors du déploiement cette fois, nous utiliserons EC2 et RDS d'Aws. Nous allons créer l'environnement avec Docker, mais du point de vue de la persistance des données, nous utiliserons RDS Mysql au lieu de Docker cette fois. Voici les préparatifs et les travaux requis pour le travail.

-Effectuer les préparatifs nécessaires lors du déploiement en utilisant EC2 et RDS avec Aws (configuration réseau, etc.) -Installer Dokcer dans l'environnement local et Ec2 -Installer Docker-compose dans l'environnement local et Ec2

Articles référencés

travail

Tout d'abord, créez un fichier Docker. Ici, nous allons écrire le code pour créer l'environnement autour de Ruby à l'aide de Dockerfile.

FROM ruby:2.5.7

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

RUN mkdir /Nom de l'application

WORKDIR /Nom de l'application

ADD Gemfile /Nom de l'application/Gemfile
ADD Gemfile.lock /Nom de l'application/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /Nom de l'application

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

Ensuite, créez un Docker-compose. Ici, nous allons gérer le conteneur Docker et spécifier la pièce à masquer!

Docker-compose.yml


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

  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/Nom de l'application/public
      - tmp-data:/Nom de l'application/tmp
    ports:
      - 80:80
      
volumes:
  public-data:
  tmp-data:
  log-data:

Ensuite, créez le fichier suivant. Ici, nous allons configurer le conteneur Nginx.

FROM nginx:1.15.8

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

ADD nginx.conf /etc/nginx/conf.d/Nom de l'application.conf

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

containers/nginx/nginx.conf


upstream FashionInformation_app {
  server unix:///Nom de l'application/tmp/sockets/puma.sock;
}

server {
  listen 8000;
  server_nom nom de domaine;

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

  root /Nom de l'application/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 @Nom de l'application;
  keepalive_timeout 5;

  location @Nom de l'application{
    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://Nom de l'application;
  }
}

Déployer une application Rails

Clonez git vers EC2 lorsque vous arrivez ici!

ec2-user@ip-xxx-xx-xx-xxx ~]$URL du référentiel GitHub git clone

Construire l'image

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

Préparation avant de démarrer le serveur

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

Préparation avant de démarrer le serveur

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

Création d'une base de données, lecture d'un fichier de migration

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

Si vous accédez à l'adresse IP publique et qu'elle s'affiche correctement, vous avez réussi!

Recommended Posts

Intégrez Docker à votre portefeuille Ruby on Rails!
Création de portfolio Ruby on Rails
Intégrez Elasticsearch dans votre application Rails
[Portfolio] Application de gestion des favoris [Ruby on Rails]
Débutant a créé un portfolio avec Ruby on Rails
Présentation de Rspec avec Ruby on Rails x Docker
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
J'ai fait un portfolio avec Ruby On Rails
Record d'apprentissage Ruby on rails -2020.10.04
[Ruby on Rails] Debuck (binding.pry)
Record d'apprentissage de Ruby on rails -2020.10.05
Record d'apprentissage Ruby on rails-2020.10.07 ②
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
Record d'apprentissage de Ruby on rails -2020.10.06
Incorporer circleCI dans l'application CircleCI Rails
Résumé de la validation Ruby on Rails
Mémorandum de base Ruby on Rails
[Ruby on Rails] Read try (: [] ,: key)
Installation de Ruby + Rails sur Ubuntu 18.04 (rbenv)
[Ruby on Rails] Introduction de la fonction de pagination
Connaissance de base de Ruby on Rails
Progatez Ruby on Rails
Comment utiliser Ruby on Rails
Ruby on Rails compatible japonais-anglais i18n
[Ruby on Rails] Fonction de sortie CSV
Mémo de construction de l'environnement Ruby on Rails 6.0
Rails sur la procédure de construction de l'environnement Docker
[Ruby on Rails] Création de la page de confirmation
Ruby On Rails conçoit un conflit de routage
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
Déployer des rails sur Docker vers heroku
[Ruby on Rails] Méthode d'aide pratique
[Ruby on Rails] Arrêtez de "boucler jusqu'à ce que ..."
Création d'un environnement de développement pour Ruby on Rails à l'aide de Docker + VSCode (Remote Container)
[Ruby on Rails] Introduction des données initiales
[Ruby on Rails] Fonction de recherche (non sélectionnée)
[Rails] Ajout de la fonction de commentaire Ruby On Rails
[Ruby on Rails] Création d'un formulaire de demande
Ruby on Rails6 Guide pratique cp13 ~ cp15 [Mémo]
[Ruby on Rails] Afficher le test avec RSpec
[Ruby on Rails] Vérification du code à l'aide de Rubocop-airbnb
[Ruby on Rails] 1 modèle CRUD (routage principal)
Méthode d'installation de Ruby on Rails [édition Mac]
Modèle [Ruby on Rails], commande de terminal de contrôleur
Ruby on Rails6 Guide pratique cp7 ~ cp9 [Mémo]