[RUBY] [AWS] Publier l'application Rails avec nginx + puma

introduction

J'ai fait un bot LINE avec des rails, donc Essayez de configurer pour publier l'application rails avec nginx + puma.

Créer une instance EC2

Configurez une instance EC2 en vous référant ici.

Référence: essayez de créer un serveur Web avec AWS EC2 https://qiita.com/Arashi/items/629aaed33401b8f2265c

Définissez d'abord les éléments nécessaires au développement, tels que git et rails

Vérifiez l'emplacement de l'application Rails

Si vous avez une application Rails dans votre répertoire personnel Déplacez ou copiez sous "/ opt". Notez que le répertoire personnel n'est pas un bon endroit pour placer les applications que vous souhaitez publier.

Copier l'application Rails


#Lors de la copie
$ sudo cp -arf ~/rails/rails_app/opt/
#Vérifiez le dossier
$ ls -al /opt/
drwxr-xr-x 5 racine racine 4096 15 juillet 13:59 .
dr-xr-xr-x 25 racine racine 4096 16 juillet 06:02 ..
drwxrwxr-x 13 ec2-user ec2-user 4096 15 juillet 13:57 rails_app

Définir Nginx

Première installation

Installez Nginx


$ sudo yum install -y nginx

Confirmation de version


$ nginx -v
nginx version: nginx/1.16.1

Ecrire les paramètres dans le fichier de configuration

ruby:/etc/nginx/conf.d/rails.conf


server {
    listen       80;
    server_name  localhost;

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

    root /opt/rails_app/public;

    #Suivez la racine du document dans l'ordre du début ci-dessous
    try_files $uri @rails_app;

    #au dessus de@rails_Chargez les paramètres suivants uniquement lorsque l'application est appelée
    location @rails_app {
        proxy_pass http://rails_app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_redirect off;
    }
}

Essayez de le déplacer une fois

Commencez


$ sudo nginx

Arrêtez


$ sudo nginx -s stop

Oh! !! déplacé! !!

スクリーンショット 2020-07-16 21.39.03.png

Paramètres de communication de la prise Puma

Modifier le fichier de configuration de Puma pour intégrer Rails (Puma) et Nginx

/opt/rails_app/config/puma.rb


#Commentez ici
#port        ENV.fetch("PORT") { 3000 }

#Ajouter cette ligne
bind "unix:///opt/rails_app/tmp/sockets/puma.sock"

Ajout de la partie coopération à rails.conf

ruby:/etc/nginx/conf.d/rails.conf


#Ajoutez le code suivant
upstream rails_app {
    #Paramètres de communication de socket de domaine UNIX
    server unix:///opt/rails_app/tmp/sockets/puma.sock fail_timeout=0;
}

Il sera lié lors de l'exécution des rails.

Erreur


Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8.

Hou la la! !! D'une manière ou d'une autre, je me suis mis en colère ...

Il semble que SQLite 3.8 ou supérieur soit requis pour utiliser SQLite avec Ruby on Rails 6. Le package SQLite contient 3.7 ... Installez la dernière version de SQLite pour résoudre le problème.

# 3.Télécharger 29
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz

$ tar xzvf sqlite-autoconf-3290000.tar.gz

$ cd sqlite-autoconf-3290000

#Ne pas entrer en conflit avec le sqlite d'origine/opt/sqlite/Installer sur sqlite3
$ ./configure --prefix=/opt/sqlite/sqlite3

$ make

$ sudo make install

#Confirmation de version
$ /opt/sqlite/sqlite3/bin/sqlite3 --version
3.29.0 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6

#Réinsérez la gemme sqlite3
$ gem uninstall sqlite3

#Installez en spécifiant la lib et incluez les chemins entrés ci-dessus
$ gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include \
   --with-sqlite3-lib=/opt/sqlite/sqlite3/lib

Essayez à nouveau de déplacer les rails ...

Oh! !! déplacé! !!

スクリーンショット 2020-07-16 21.54.39.png

Paramètres SSL! Créer mon certificat

Au fait, configurons également SSL

Installez OpenSSL

Vérifiez et installez OpenSSL


#Vérifiez la version d'openssl
$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

#Si la version n'est pas affichée, installez
$ sudo yum install -y openssl

Créer un répertoire


$ sudo mkdir /etc/nginx/ssl

Créer une clé privée

$ sudo openssl genrsa -out /etc/nginx/ssl/server.key 2048

Création d'un CSR (Certificate Signing Request)

Créez une "CSR (Certificate Signing Request)" à partir de la clé privée

Il vous sera demandé de saisir le code du pays, l'adresse, le nom de l'entreprise, etc., mais s'il s'agit d'un certificat auto-signé, ce n'est pas nécessaire, alors ne saisissez rien et sautez-le avec "Entrée".

Créer un CSR


$ sudo openssl req -new -key /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.csr

Création de CRT (certificat de serveur SSL)

À l'origine, j'ai enregistré le CSR que j'ai mentionné plus tôt auprès de l'autorité de certification et leur ai demandé d'émettre un «CRT (certificat de serveur SSL)», mais cette fois j'ai fait un «certificat Oreore (auto-signé)» et cette machine Terminé dans

Créer CRT


#Créer CRT (date d'expiration 10 ans)
$ sudo openssl x509 -days 3650 -req -signkey /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr -out /etc/nginx/ssl/server.crt

#Confirmez que CRT a été généré
$ ls -l /etc/nginx/ssl/
12 au total
-rw-r--r--1 racine racine 1103 14 juillet 11:52 server.crt
-rw-r--r--1 racine racine 952 14 juillet 11:52 server.csr
-rw-r--r--1 racine racine 1675 14 juillet 11:51 server.key

Définir le certificat dans Nginx

ruby:/etc/nginx/conf.d/rails.conf


server {
    #Autoriser le port 443 et activer la fonction SSL
    # listen 80;
    listen 443 ssl;
    server_name  {#server_name};

    #Définir le certificat
    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
         :
         :
}

Redémarrer


$ sudo restart nginx

J'ai pu me connecter avec SSL! !!

スクリーンショット 2020-07-16 22.10.27.png

Recommended Posts

[AWS] Publier l'application Rails avec nginx + puma
Publiez l'application avec ruby on rails
[Rails] Nginx, déploiement de l'environnement Puma et étude du serveur [AWS EC2]
Créez un environnement de développement d'applications Rails avec Docker [Docker, Rails, Puma, Nginx, MySQL]
Suivre les erreurs de l'application Rails avec Sentry
[Rails6] Créer une nouvelle application avec Rails [Débutant]
Déploiement facile avec Capistrano + AWS (EC2) + Rails
Erreur lors de la création de l'infrastructure avec l'application AWS
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
Rétrograder une application existante créée avec les rails 5.2.4 vers 5.1.6
rail nouveau nom d'application non créé
Déployer des rails sur ECS Fargate avec AWS Copilot
Comment pousser une application développée avec Rails vers Github
[Rails 6] Erreur d'exécution avec $ rails s
Manipuler le dispositif avec des rails
[Rails] Test avec RSpec
[Rails] Développement avec MySQL
Prend en charge la multilinguisme avec Rails!
Sortie verbalisée de procédure approximative lors de la création d'une application avec Rails
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Résumé du travail initial lors de la création d'une application avec Rails
Comment spécifier la base de données lors de la création d'une application avec des rails
J'ai essayé le déploiement automatique avec CircleCI + Capistrano + AWS (EC2) + Rails
Obtenez des informations sur la chaîne Youtube avec l'application Rails (en utilisant Yt gem)