[RAILS] Comment créer un serveur d'applications sur une instance EC2 d'AWS

introduction

AWS signifie Amazon Web Servises et est un service de serveur cloud fourni par Amazon. Nous publierons ce que nous avons appris afin d'améliorer notre compréhension d'AWS.

Ce flux

On suppose que l'instance a été créée.

Installez Unicorn dans votre application

① Installez Unicorn dans votre propre application

Ajoutez la description suivante au Gemfile dans l'application.

Gemfile


group :production do
    gem 'unicorn', '5.4.1'
end

Terminal


% bundle install

② Paramètres de la licorne

Créez unicorn.rb dans la configuration de votre application. Ensuite, définissez les paramètres suivants.

config/unicorn.rb


#Placez le répertoire où le code de l'application sur le serveur est installé dans une variable
app_path = File.expand_path('../../', __FILE__)

#Déterminer les performances du serveur d'applications
worker_processes 1

#Spécifiez le répertoire dans lequel l'application est installée
working_directory app_path

#Spécifiez l'emplacement des fichiers requis pour démarrer Unicorn
pid "#{app_path}/tmp/pids/unicorn.pid"

#Spécifiez le numéro de port
listen 3000

#Spécifiez un fichier pour consigner les erreurs
stderr_path "#{app_path}/log/unicorn.stderr.log"

#Spécifiez un fichier pour enregistrer les journaux normaux
stdout_path "#{app_path}/log/unicorn.stdout.log"

#Définir le temps maximum d'attente pour la réponse de l'application Rails
timeout 60

#Ce qui suit est un paramètre appliqué, donc l'explication est omise.

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 # prevent from firing again
  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

Poussez-le vers le référentiel distant et réfléchissez-le.

Créer un serveur d'applications sur une instance créée avec EC2 sur AWS

③ Installez l'application sur l'instance

Terminal


Connectez-vous à l'instance
% ssh -i nom de la paire de clés.pem ec2-user@<IP publique>

Dans l'instance/var/www/Créer un annuaire
[exemple]$ sudo mkdir /var/www/

Permissions Ec2 sur le répertoire www créé-Accordé à l'utilisateur
[exemple]$ sudo chown ec2-user /var/www/

Aller au répertoire www
[exemple]$ cd /var/www/

#Cloner une application depuis GitHub
[Instance www]$ git clone <URL HTTPS obtenue à partir du bouton Code de l'application que vous souhaitez déployer sur GitHub>

④ Installez Gem

Terminal


Déplacer vers le répertoire de base par exemple
[Instance www]$ cd ~

Paramètres de fichier d'échange
[exemple]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
[exemple]$ sudo chmod 600 /swapfile1
[exemple]$ sudo mkswap /swapfile1
[exemple]$ sudo swapon /swapfile1
[exemple]$ sudo sh - -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

Terminal


Déplacer vers le répertoire de l'application dans l'instance
[exemple]$ cd /var/www/<Nom de l'application>

Installer le bundler(La version du bundler est "commande" dans le terminal+Créez un autre onglet avec "T" et "bundler" dans l'onglet nouvellement créé-Vous pouvez vérifier en exécutant "v")
[exemple<Nom de l'application>]$ gem install bundler -v <version du bundler>

Installer Gem
[exemple<Nom de l'application>]$ bundle install

Paramètres de l'environnement de production

⑤ Définition des variables d'environnement

Pour des raisons de sécurité, les mots de passe de base de données, etc. ne sont pas téléchargés sur GitHub. Ces informations sont définies à l'aide de "variables d'environnement".

Qu'est-ce que secret_key_base

Une chaîne utilisée pour crypter un cookie. Requis pour exécuter des applications Rails en production.

Terminal


[exemple<Nom de l'application>]$ rake secret
=> secret_key_La chaîne de caractères de base s'affiche

Accédez à votre répertoire personnel dans l'instance
[exemple<Nom de l'application>]$ cd ~

/etc/Modifier l'environnement
[exemple]$ sudo vim /etc/environment

Tapez "i" pour accéder au mode de saisie

Entrez le mot de passe de l'utilisateur root de la base de données configurée
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'

* Si vous utilisez AWS S3, saisissez ce qui suit (saisissez la valeur faisant référence au fichier CSV téléchargé lors de la configuration de S3)
AWS_ACCESS_KEY_ID='Copiez ici la valeur d'ID de clé d'accès du fichier CSV'
AWS_SECRET_ACCESS_KEY='Copiez ici la valeur de la clé d'accès secrète du fichier CSV'

* Si l'authentification de base est installée, entrez ce qui suit (entrez le nom d'utilisateur et le mot de passe définis)
BASIC_AUTH_USER='Définir le nom d'utilisateur'
BASIC_AUTH_PASSWORD='Définir le mot de passe'

「:Enregistrer sous "wq"

Déconnectez-vous de l'instance et reconnectez-vous pour que les variables d'environnement prennent effet
[exemple]$ exit
% ssh -i nom de la paire de clés.pem ec2-user@<IP publique>

Vérification des variables d'environnement
[Instance re]$ env
=>OK lorsque les paramètres définis ci-dessus sont affichés.

⑥ Libérez le port vers le groupe de sécurité

Dans AWS Management Console, ajoutez «Port 3000» et «Source 0.0.0.0/0» de «TCP personnalisé» à la règle entrante du groupe de sécurité de l'instance.

⑦ Modifier les paramètres de l'application Rails

Les variables d'environnement définies dans l'instance ci-dessus doivent également être définies dans l'application.

:config/database.yml


production:
  <<: *default
  database:(* Ne modifiez pas ici)
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

Après avoir modifié les paramètres, appuyez sur GitHub.

Appliquez ensuite les modifications de l'application à l'instance.

Terminal


Déplacer vers le répertoire de l'application dans l'instance
[exemple]$ cd /var/www/<Nom de l'application>

Refléter les modifications des paramètres d'application
[exemple<Nom de l'application>]$ git pull origin master

Lancer l'application

⑧ Créer une base de données (si un serveur de base de données existe dans l'instance)

Veuillez vous référer ici pour savoir comment créer un serveur de base de données https://qiita.com/daisuke30x/items/7501d724a0727ad9f2e4

Terminal


Créer une base de données
[exemple<Nom de l'application>]$ rails db:create RAILS_ENV=production
[exemple<Nom de l'application>]$ rails db:migrate RAILS_ENV=production

Démarrer la base de données
[exemple<Nom de l'application>] $ sudo systemctl start maradb

RAILS_ENV = production est une option pour spécifier l'environnement de production

⑨ Lancer l'application

Terminal


[exemple<Nom de l'application>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

Compilez les fichiers d'actifs de l'application (CSS, JavaScript, images, etc.). Il s'agit d'une tâche nécessaire dans un environnement de production.

Terminal


[exemple<Nom de l'application>]$ rails assets:precompile RAILS_ENV=production

Terminal


Vérifiez le processus
[exemple<Nom de l'application>]$ ps aux | grep unicorn
=>Le deuxième chiffre à partir de la gauche est l'ID de processus

Arrêtez le processus
[exemple<Nom de l'application>]$ kill <unicorn_ID de processus du maître de rails>

Lancez à nouveau l'application
[exemple<Nom de l'application>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

"RAILS_SERVE_STATIC_FILES = 1" est le rôle qui spécifie que le fichier d'actif compilé peut être trouvé.

** Entrez "http: // : 3000 /" ou "http: // <IP élastique>: 3000 /" dans le navigateur, et si l'application est affichée, elle réussit. ** **

finalement

Nous espérons que cet article aidera les débutants à évaluer.

Recommended Posts

Comment créer un serveur d'applications sur une instance EC2 d'AWS
Comment créer un serveur Web sur une instance EC2 d'AWS
Comment installer Ruby sur une instance EC2 d'AWS
Comment publier une application à l'aide de la construction d'environnement d'instance AWS (3) EC2
Étapes pour publier une application sur Heroku
Comment gérer les instances
Déployer laravel à l'aide de docker sur EC2 sur AWS ① (Créer une instance EC2)
Déployer l'application SpringBoot sur AWS EC2
Comment déployer l'application Rails sur AWS (résumé de l'article)
Comment installer et utiliser Composer sur une instance ECS sur Ubuntu 16.04
Volume d'essais pour créer une application Web Java sur Windows Server 2016
Comment enregistrer des images sur Heroku dans S3 sur AWS
Créer un environnement Laravel sur une instance AWS
Rails6.0 ~ Comment créer un environnement de développement respectueux de l'environnement
J'ai essayé d'installer docker sur une instance EC2
Remarques sur la création d'extensions Burp Suite
Comment créer un certificat OLEORE (certificat SSL, auto-certificat)
Comment créer docker-compose
[Rails] Créer une application
Mémo pour créer un environnement Servlet sur EC2 d'AWS
Indiquez comment apprendre de Docker à AKS sur AWS
(Ruby on Rails6) Comment créer un modèle et une table
[AWS] Lier l'utilisation de la mémoire de l'instance Ubuntu EC2 à CloudWatch
Comment déployer avec heroku
Comment accéder à un conteneur s'exécutant sur AWS Fargate
Exemple pour créer un mot de passe à usage unique côté serveur et côté client
Comment déployer une application kotlin (java) sur AWS Fargate
Installer docker sur AWS EC2
Comment terminer le serveur de rails
Comment développer une application avec l'API Jersey Java RESTful sur une instance Alibaba Cloud ECS
Comment exécuter React et Rails sur le même serveur
Comment créer une méthode
Comment créer une application avec ruby on rails (en supposant que l'environnement a été construit)
[Rails / Heroku / MySQL] Comment réinitialiser la base de données de l'application Rails sur Heroku
Comment créer une application Apache Flink à partir de zéro en 5 minutes
Préparation à la création de l'application Rails
Comment "évider" une vue sur Android
Comment utiliser Ruby on Rails
Créer un serveur Minecraft sur AWS
Comment déployer Bootstrap sur Rails
Pour exécuter JavaFX sur Docker
Comment utiliser les bio-formats sur Ubuntu 20.04
Comment insérer une bibliothèque externe
Comment installer MariaDB 10.4 sur CentOS 8
Comment installer WildFly sur Ubuntu 18.04
[Rails] Construction de l'environnement d'instance AWS EC2
Un moyen facile de créer votre propre logo d'application (facile avec votre smartphone)