[RUBY] Le super débutant construit Rails 6 + environnement Postgresql avec Docker jusqu'à la fin

Jusqu'au début de la construction

Je voulais parler de Docker, j'ai donc décidé de créer l'environnement ci-dessus. J'ai répété des essais et des erreurs parce que je n'avais aucune connaissance préalable ... Cependant, j'ai réussi à le construire, je vais donc laisser une note. J'ai ajouté «?» Aux notes et aux explications des parties que je ne comprenais pas bien.

Dossiers et fichiers requis

Préparez un dossier avec un nom arbitraire, et ici c'est my_app.

$ mkdir my_app

Préparez les fichiers suivants dans my_app

$ touch xxx(Nom de fichier requis)

- my_app
    - .dockerignore
    - Dockerfile
    - docker-compose.yml
    - Gemfile
    - Gemfile.lock
    - entrypoint.sh

Modifiez chaque fichier comme suit.

.dockerignore Empêche les modules locaux et les journaux de débogage d'être copiés dans l'image Docker. Les modules requis sont différents entre l'environnement Mac et l'environnement Linux sur Docker ... Vraiment? Quoi qu'il en soit, sans cela, j'obtiens une erreur liée à Node.js 12.x.

.dockerignore:.dockerignore


node_modules
npm-debug.log

.Dockerfile Installez postgresql et yarn et Node.js requis pour rails6 Webpacker. Je ne peux comprendre approximativement chacune des commandes répertoriées (Fu) Je pense que j'ai besoin d'étudier ...

Dockerfile


FROM ruby:2.7.1

#Installation de la bibliothèque requise
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

#Installer l'outil de gestion des packages de fils
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
  curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
  echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
  apt-get update && apt-get install -y yarn

# Node.installer js
RUN curl -SL https://deb.nodesource.com/setup_12.x | bash
RUN apt-get install -y nodejs

#Créer un dossier de travail dans un conteneur
RUN mkdir /my_app
WORKDIR /my_app
COPY Gemfile /my_app/Gemfile
COPY Gemfile.lock /my_app/Gemfile.lock
RUN bundle install
COPY . /my_app

#entrypoint.sh et paramètres de connexion
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

docker-compose.yml Ici, le nom d'utilisateur et le mot de passe utilisés dans Postgresql sont postgres. Il y a «web» et «db» dans le service.

docker-compose.yml


version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/my_app
    ports:
      - "3000:3000"
    depends_on:
      - db

Gemfile

Gemfile


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

Gemfile.lock Vous n'avez pas besoin de modifier le contenu, générez simplement le fichier.

entrypoint.sh

entrypoint.sh


#!/bin/bash
set -e

#Le serveur qui est resté depuis le dernier démarrage du serveur de rails.Traitement pour effacer pid?
rm -f /my_app/tmp/pids/server.pid

#Exécutez le processus principal du conteneur(Commande spécifiée par CMD dans Dockerfile)
exec "$@"

Créer une application Rails

run construit le Web seul? Et exécute rails new dans le conteneur Web

$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle

--no-deps: ne démarre pas le service lié (ne démarre pas la base de données liée au web maintenant?) --skip-bundle: ne pas exécuter le bundle

bundle install Le Gemfile a été réécrit avec les précédents rails new. En construisant 'l'image, bundle install` est également effectuée, alors exécutez la commande suivante.

$ docker-compose build

Paramètres de la base de données

Je pense que vous avez déjà un ensemble de fichiers de rails familiers dans votre dossier de travail, Modifiez config / database.yml comme suit.

config/database.yml


default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  #docker-compose.Faites correspondre le nom d'utilisateur et le mot de passe Postgresql écrits en yml
  username: postgres
  password: postgres
  pool: 5

development:
  <<: *default
  database: my_app_development

test:
  <<: *default
  database: my_app_test

Installation et configuration de Webpacker

Installation de Webpacker

Exécutez bundle exec rails webpacker: install dans le conteneur Web.

$ docker-compose run web bundle exec rails webpacker:install

paramètres Webpacker

Dans mon cas, si je n'effectue pas ce réglage, une erreur se produira au démarrage du serveur. Modifiez le config / webpacker.yml généré par rails webpacker: install comme suit:

config/webpacker.yml


development:
  dev_server:
    host: webpacker
    hmr: true

Ajoutez également le code suivant à config / environnements / development.rb. Mais peut-être que ce processus seul n'est pas nécessaire.

config/environments/development.rb


config.webpacker.check_yarn_integrity = false

Démarrage du conteneur

$ docker-compose up

À ce stade, vous pouvez accéder à http: // localhost: 3000 /, Un écran d'erreur s'affiche car le DB n'a pas encore été créé. C'est vraiment rudimentaire, mais ça a été un long chemin, donc j'étais assez impatient (rires)

Création de DB

$ docker-compose run web rails db:create

Construction terminée

Si vous voyez "Yay! You're on Rails!" À http: // localhost: 3000 /, vous avez réussi! Si vous avez créé des images ou des conteneurs de docker inutiles, veuillez les supprimer vous-même.

Je pense qu'il y a de nombreux points qui ne peuvent être atteints pour le premier article publié. Merci de rester avec nous jusqu'à la fin. Si vous trouvez des erreurs dans l'article, veuillez nous en informer.

référence

Construction de l'environnement Docker + Rails6 + PostgreSQL Problème et solution selon lequel le conteneur se bloque en raison d'une erreur Yarn immédiatement après docker-compose up Make Node.js Web Application Docker Je souhaite utiliser une application rails6 existante avec une combinaison de Docker et de Webpacker docker-compose Je n'ai pas compris la différence entre "up", "build" et "start", alors je l'ai résumé.

Recommended Posts

Le super débutant construit Rails 6 + environnement Postgresql avec Docker jusqu'à la fin
Construction de Rails 6 et environnement PostgreSQL avec Docker
Comment créer un environnement Rails 6 avec Docker
[Rails] Comment créer un environnement avec Docker
[Docker] Construction de l'environnement Rails 5.2 avec docker
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
Créez un environnement pour Rails5 et postgresql avec Docker afin que pgadmin puisse également être utilisé
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
[Débutant] Procédure de connexion à l'environnement virtuel construit avec Vagrant
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
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]
Construction d'environnement de rails avec Docker (apocalypse personnelle)
Construire un environnement Rails 6 + MySQL avec Docker compose
Déployer sur heroku avec Docker (Rails 6, MySQL)
Préparer l'environnement de format pour "Rails" (VScode)
Attendez que PostgreSQL démarre avec Docker, puis démarrez le service WEB
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Créez un environnement de développement local pour les didacticiels Rails avec Docker (Rails 6 + PostgreSQL + Webpack)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
Code utilisé pour connecter Rails 3 à PostgreSQL 10
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Essayez de résumer la disposition commune avec des rails
Facile à afficher Hello World avec Rails + Docker
Présentez Docker à l'environnement de développement et à l'environnement de test des applications Rails et MySQL existantes
Comment installer Docker dans l'environnement local d'une application Rails existante [Rails 6 / MySQL 8]
Comment créer un environnement Docker avec Gradle pour IntelliJ
[Rails] [Docker] Le copier-coller est OK! Comment créer un environnement de développement Rails avec Docker
Construction de l'environnement Rails Docker
Que faire lorsque «Impossible de trouver» dans l’une des sources apparaît dans l’environnement de développement avec Docker × Rails × RSpec
[Environnement Docker] Comment gérer ActiveSupport :: MessageEncryptor :: InvalidMessage
[Explication approximative] Comment séparer le fonctionnement de l'environnement de production et de l'environnement de développement avec Rails
Accro au Webpacker fourni en standard avec Rails 6
SSL dans l'environnement local de Docker / Rails / puma
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby
Comment gérer l'erreur yaml.scanner.ScannerError: lors de la recherche du jeton suivant apparu lors de la création d'un environnement Rails avec Docker
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
Comment définir des variables d'environnement lors de l'utilisation de Payjp avec Rails