[RUBY] Essayez de déployer l'application Rails sur EC2-Part 2 (déploiement) -

À propos de cet article

Nous procéderons sur la base du contenu de la première partie. Veuillez créer un référentiel GitHub à l'avance. Cette fois, nous déploierons une application Rails utilisant EC2.

(Partie 1) https://qiita.com/kotobuki562/items/92827bcf99d89b350445 (Partie 2-Construction de la base de données-) https://qiita.com/kotobuki562/items/92827bcf99d89b350445

Enregistrer la clé SSH pour GitHub

Commençons par enregistrer la clé SSH pour cloner le référentiel GitHub dans EC2. Si vous n'enregistrez pas la clé SSH, EC2 ne pourra pas se connecter à GitHub.

Exécutez la commande suivante dans EC2. Lorsque vous l'exécutez, diverses entrées peuvent vous être demandées. Dans ce cas, appuyez sur "Entrée". En cas de succès, quelque chose comme "RSA 4096" sera affiché.

[ec2-user@ip-111-11-11-111 ~]$ ssh-keygen -t rsa -b 4096

Jetons un coup d'œil au contenu de la clé SSH avec la commande cat. Exécutez la commande suivante.

[ec2-user@ip-111-11-11-111 ~]$ cat ~/.ssh/id_rsa.pub

Ensuite, allez sur GirHub et enregistrez votre clé SSH Accédez à partir de l'URL ci-dessous et copiez la clé SSH confirmée avec la commande cat plus tôt. Donnez au titre de la clé SSH sur le côté GitHub le nom de votre choix. https://github.com/settings/keys

Après avoir enregistré la clé, exécutez la commande suivante. Après l'exécution, il vous sera demandé oui / non, veuillez donc laver oui. Après cela, l'accès est terminé.

[ec2-user@ip-111-11-11-111 ~]$ ssh -T [email protected]

Serveur d'application

Cette fois, nous allons créer un serveur d'application utilisant "unicorn". Si vous n'avez pas encore installé la gemme licorne, installez-la d'abord.

Cette fois, nous allons construire dans un environnement de production.

.Gemfile


group :production do
  gem unicorn
end

Ensuite, créez unicorn.rb dans config et écrivez-le comme suit. Je vais le décrire comme un échantillon, mais vous pouvez le définir vous-même.

config/unicorn.rb



app_path = File.expand_path('../../', __FILE__)

worker_processes 1

working_directory app_path

pid "#{app_path}/tmp/pids/unicorn.pid"

listen 3000

stderr_path "#{app_path}/log/unicorn.stderr.log"

stdout_path "#{app_path}/log/unicorn.stdout.log"

timeout 60

preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true

check_client_connection false

run_once = true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) &&
    ActiveRecord::Base.connection.disconnect!

  if run_once
    run_once = false
  end

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exist?(old_pid) && server.pid != old_pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH => e
      logger.error e
    end
  end
end

after_fork do |_server, _worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end

Cloner le référentiel GitHub

Ensuite, créons un répertoire pour le clonage à partir de GitHub. Après la création du répertoire, l'autorité est transmise à l'utilisateur EC2, donc

[ec2-user@ip-111-11-11-111 ~]$ sudo mkdir /var/www/
[ec2-user@ip-111-11-11-111 ~]$ sudo chown ec2-user /var/www/

Clonez GitHub dans le répertoire que vous avez créé. Accédez au répertoire et exécutez la commande git clone. Enfin, appliquons le gem avec l'installation groupée.

[ec2-user@ip-111-11-11-111 ~]$ cd /var/www/
[ec2-user@ip-111-11-11-111 www ~]$git clone collez l'URL copiée
[ec2-user@ip-111-11-11-111 app ~]$ bundle install

Ensuite, définissez les variables d'environnement. Exécutez la commande suivante. Faites-en une copie à sa sortie.

[ec2-user@ip-111-11-11-111 <Nom du référentiel> ~]$ rake secret

Ensuite, nous décrirons en fait les variables d'environnement. Exécutons la commande suivante et décrivons-la.

[ec2-user@ip-111-11-11-111 ~]$ sudo vim /etc/environment

Définissez les variables d'environnement de base de données définies dans le chapitre précédent. Décrivons les deux points suivants

DATABASE_PASSWORD='Mot de passe de l'utilisateur racine de la base de données'
SECRET_KEY_BASE='Le secret créé plus tôt_key_base'

Vous êtes maintenant prêt.

Port EC2 ouvert

Revenons à EC2 sur le Web et ouvrons le port. Libérez le numéro de port 3000 de unicorn.rb décrit précédemment. La méthode de réglage est décrite dans la première partie, veuillez donc vérifier ici. Veuillez définir comme indiqué dans l'image ci-dessous.

スクリーンショット 2020-11-11 12.01.11.png

Déployer

Tout d'abord, modifiez le fichier database.yml local. Veuillez modifier comme suit. Ne modifiez pas la base de données.

config/database.yml


production:
  <<: *default
  database: app_production
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

Revenons à EC2 dans le terminal et faisons un git pull.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>] git pull origin master

Créons et migrons une base de données dans EC2. Vous êtes maintenant prêt.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ rails db:create RAILS_ENV=production
[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ rails db:migrate RAILS_ENV=production

Réfléchissons maintenant au répertoire des actifs avec les actifs: orecompile. Enfin, démarrez le serveur avec le bundle exec unicorn_rails.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ rails assets:precompile RAILS_ENV=production
[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

Exécutez la commande suivante pour confirmer que le démarrage a été confirmé.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ ps aux | grep unicorn

#Le processus suivant est sorti.

ec2-user  5879  0.0 13.0 515244 131640 ?Sl 09 novembre 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user  5887  0.0 12.6 525216 127600 ?Sl 09 novembre 0:02 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 15917  0.0  0.0 119436   976 pts/0    S+   03:26   0:00 grep --color=auto unicorn

Pour l'arrêter, écrivez la commande suivante.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ kill 5879 #ID de processus d'arrêt

Après avoir tué le processus, exécutez la commande suivante et vérifiez si elle est réellement reflétée dans le navigateur. Vous pouvez y accéder à l'adresse http: // : 3000 /.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

Journal des erreurs

Enfin, si une erreur se produit après le déploiement, exécutez la commande suivante et consultez le journal des erreurs. Accédons à l'emplacement de stockage du journal des erreurs décrit précédemment dans unicorn.rb.

[ec2-user@ip-111-11-11-111 <Nom du référentiel>]$ less log/unicorn.stderr.log

Recommended Posts

Essayez de déployer l'application Rails sur EC2-Part 2 (déploiement) -
Essayez de déployer l'application Rails sur EC2-Part 1-
Comment déployer jQuery dans les applications Rails à l'aide de Webpacker
Comment déployer Bootstrap sur Rails
Essayez de créer une application client serveur
Déployer des rails sur Docker vers heroku
Comment changer le nom de l'application dans les rails
Déployer sur heroku avec Docker (Rails 6, MySQL)
Télécharger le fichier image de l'application Rails sur S3
Déployer sur Heroku [Ruby on Rails] Débutant
Introduction de Vuetify aux applications Rails existantes
Rétrograder une application existante créée avec les rails 5.2.4 vers 5.1.6
Application Android: essayez de résumer les événements et les auditeurs
Tutoriel Rails Chapitre 1 De zéro au déploiement [Essayer]
Déployer des rails sur ECS Fargate avec AWS Copilot
Erreur lors du déploiement de rails5 + Mysql sur heroku avec Docker-compose
Unifier le fuseau horaire de l'application Rails à l'heure japonaise
Essayez de résumer la disposition commune avec des rails
[Introduction] Créer une application Ruby on Rails
Comment pousser une application développée avec Rails vers Github
Déployer sur Ruby on Rails Elastic beanstalk (Construction de l'environnement)
[Rails] Créez un plan de site à l'aide de sitemap_generator et déployez-le dans GAE
Essayez de libérer la gemme
Étapes de déploiement sur Heroku
Comment écrire des rails
Présentation de Bootstrap à Rails 5
Présentation de Bootstrap aux rails !!
Présentation de Vue.js à Rails
Étapes de déploiement de Struts 2.5.8
Déployer RAILS sur EC2
Comment désinstaller Rails
Déployer sur Ruby on Rails Elastic beanstalk (changement d'autorisation IAM)
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Je veux pousser une application créée avec Rails 6 vers GitHub
Comment déployer une application Java Servlet simple sur Heroku
[Java] Déployer l'application Spring Boot sur Azure App Service
Comment spécifier la base de données lors de la création d'une application avec des rails
Comment déployer une application kotlin (java) sur AWS Fargate
Comment déployer l'application Rails sur AWS (résumé de l'article)