[RUBY] Procédure de publication d'une application à l'aide d'AWS (6) Présentation de Nginx

introduction

Nous décrirons la procédure de publication d'une application à l'aide d'AWS. Cet article présente Nginx, un serveur Web.

Installez Nginx

Qu'est-ce que Nginx

Nginx est un type de serveur Web. Effectue un traitement de récupération de contenu statique en réponse aux demandes des utilisateurs et demande au serveur d'applications de générer du contenu dynamique.

Accédez au répertoire ".ssh"

Exécutez la commande suivante et accédez au répertoire ".ssh".

cd ~/.ssh/

connexion ssh

Exécutez la commande suivante pour accéder à l'instance EC2 avec ssh. (Lorsque le nom du fichier pem téléchargé est "xxx.pem" et que l'adresse IP Elastic est 12.345.67.890)

ssh -i xxx.pem [email protected]

Installation de Nginx

Exécutez la commande suivante pour installer Nginx.

sudo yum -y install nginx

Modifier le fichier de configuration Nginx

Exécutez la commande suivante pour modifier le fichier de configuration Nginx à l'aide de vim. Les fichiers sous le répertoire / etc ne peuvent pas être lus, écrits ou enregistrés sans autorisation, alors exécutez avec sudo.

sudo vim /etc/nginx/conf.d/rails.conf

Modifiez rails.conf comme suit. Cette fois, le cas où le nom de l'application est "testapp" et l'adresse IP Elastic est "12.345.67.890" est pris comme exemple.

rails.conf


upstream app_server {
  #Paramètres de liaison avec Unicorn.
  server unix:/var/www/testapp/tmp/sockets/unicorn.sock;
}

# {}La partie entourée s'appelle un bloc. Peut définir le serveur
server {
  #Numéro de port où ce programme accepte les connexions
  listen 80;
  #Demande d'URL pour accepter la connexion Impossible d'accéder avec l'URL non écrite ici
  server_name 12.345.67.890;

  #Définissez la taille maximale des fichiers téléchargés depuis le client sur 2 giga. La valeur par défaut est de 1 méga, alors gardez-la grande
  client_max_body_size 2g;

#Répertoire racine lors de la connexion
  root /var/www/testapp/public;

#fichier des actifs(Fichiers CSS et JavaScript, etc.)Paramètres appliqués lors de l'accès à
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server;
  }

  error_page 500 502 503 504 /500.html;
}

Modifier les autorisations Nginx

Exécutez la commande suivante pour modifier les autorisations Nginx. En modifiant les autorisations ici, la méthode POST ne donnera pas d'erreur.

cd /var/lib
sudo chmod -R 775 nginx

Option "-R"

L'option "-R" est une option pour les modifications récursives. Autrement dit, modifiez les autorisations pour ce répertoire et tous les fichiers de ce répertoire.

Quelle est la méthode POST?

L'une des requêtes envoyées du client au serveur Web par communication HTTP, pour l'envoi de données du client au programme spécifié par l'URL. Utilisé pour envoyer des données et des fichiers volumineux au serveur.

Redémarrez Nginx

Exécutez la commande suivante pour redémarrer Nginx et recharger le fichier de configuration.

cd ~
sudo service nginx restart

Modifier les paramètres de la licorne

Modifiez à nouveau les paramètres de la licorne pour traiter via Nginx.

Modifier unicorn.rb

Modifiez config / unicorn.rb dans l'environnement de développement comme suit. Après l'édition, n'oubliez pas de vous engager et de pousser.

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 "#{app_path}/tmp/sockets/unicorn.sock"

#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

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

Refléter dans l'environnement de production

Exécutez la commande suivante pour refléter le contenu modifié dans l'environnement de production.

cd /var/www/testapp(Si le nom du référentiel d'applications est "testapp")
git pull origin master

Redémarrer la licorne

Exécutez la commande suivante pour vérifier l'ID de processus du maître licorne.

ps aux | grep unicorn

Exécutez la commande suivante pour supprimer l'ID de processus confirmé. (Ici, on suppose que l'ID de processus du maître licorne est 17877)

kill 17877

Exécutez la commande suivante pour démarrer unicorn.

RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

Accédez à votre application avec Elastic IP depuis votre navigateur

Accédez à l'application avec Elastic IP depuis un navigateur. (Cette fois: vous n'avez pas besoin d'ajouter 3000) À ce moment, la licorne doit être en cours d'exécution.

Vérifiez si vous obtenez une erreur

Supplément

Qu'est-ce qu'un serveur Web?

Reçoit une demande envoyée de l'extérieur et ajoute le traitement. Nginx est un type de serveur Web. Il a les rôles suivants.

--Renvoyer le contenu statique au client en tant que réponse

Le contenu statique est un fichier dont le contenu ne change pas à chaque requête. Fichiers CSS et image qui ont un affichage fixe. Le contenu dynamique est un fichier dont le contenu change à chaque demande. Un fichier qui récupère et affiche les données qui remplissent les conditions de recherche de la base de données.

Qu'est-ce qu'un serveur d'applications

Génère du contenu dynamique et renvoie le résultat du traitement au serveur Web. Unicorn est un type de serveur d'application. Il a les rôles suivants.

--Générer un contenu dynamique basé sur les informations demandées par le serveur Web --Renvoyer le résultat du traitement au serveur Web

Article associé

Procédure pour publier une application à l'aide d'AWS (1) Créer un compte AWS Procédure pour publier une application à l'aide d'AWS (2) Create EC2 instance [Comment publier une application à l'aide de la construction d'environnement d'instance AWS (3) EC2] (https://qiita.com/osawa4017/items/8dc09203f84e04bf0e66) [Procédure pour publier une application à l'aide de AWS (4) Create database] (https://qiita.com/osawa4017/items/7dba25f4fa30ab0b1246) [Procédure de publication d'une application à l'aide d'AWS (5) Publish application] (https://qiita.com/osawa4017/items/6f3125fcc21f73024311)

Recommended Posts

Procédure de publication d'une application à l'aide d'AWS (6) Présentation de Nginx
Procédure de publication d'une application à l'aide d'AWS (5) Publier une application
Procédure de publication d'une application à l'aide d'AWS (4) Création d'une base de données
Procédure de publication d'une application à l'aide d'AWS (7) Déploiement automatique par Capistrano
Comment publier une application à l'aide de la construction d'environnement d'instance AWS (3) EC2
Procédure de création d'un serveur d'autorisation avec Authlete (version compatible CIBA)
Procédure de configuration d'AdMob pour les applications Android (décembre 2016)
Envoyer des e-mails à l'aide de JavaMail sur AWS
Procédure de publication d'une application à l'aide d'AWS (7) Déploiement automatique par Capistrano
[EC2 / Vue / Rails] Procédure de déploiement EC2 pour Vue + Rails
Projet CI pour Maven chez Github Actions
[Pour les débutants] Procédure de création d'un contrôleur à l'aide de rails