[RUBY] [AWS] Veröffentlichen Sie die Rails-App mit Nginx + Puma

Einführung

Ich habe also einen LINE-Bot mit Schienen gemacht Versuchen Sie, die Rails-App mit nginx + puma zu veröffentlichen.

Erstellen Sie eine EC2-Instanz

Richten Sie eine EC2-Instanz ein, auf die hier Bezug genommen wird.

Referenz: Versuchen Sie, einen Webserver mit AWS EC2 zu erstellen https://qiita.com/Arashi/items/629aaed33401b8f2265c

Stellen Sie zuerst die für die Entwicklung erforderlichen Dinge wie Git und Rails ein

Überprüfen Sie den Standort der Rails-App

Wenn Sie eine Rails-App in Ihrem Home-Verzeichnis haben Verschieben oder kopieren Sie unter "/ opt". Beachten Sie, dass das Home-Verzeichnis kein guter Ort ist, um die Apps zu platzieren, die Sie veröffentlichen möchten.

Rails-App kopieren


#Beim Kopieren
$ sudo cp -arf ~/rails/rails_app/opt/
#Überprüfen Sie die Datei
$ ls -al /opt/
drwxr-xr-x 5 Wurzel Wurzel 4096 15. Juli 13:59 .
dr-xr-xr-x 25 root root 4096 16. Juli 06:02 ..
drwxrwxr-x 13 ec2-user ec2-Benutzer 4096 15. Juli 13:57 rails_app

Stellen Sie Nginx ein

Zuerst installieren

Installieren Sie Nginx


$ sudo yum install -y nginx

Versionsbestätigung


$ nginx -v
nginx version: nginx/1.16.1

Schreiben Sie Einstellungen in die Konfigurationsdatei

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;

    #Folgen Sie dem Dokumentenstamm in der Reihenfolge von unten nach unten
    try_files $uri @rails_app;

    #über@rails_Laden Sie die folgenden Einstellungen nur, wenn die App aufgerufen wird
    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;
    }
}

Versuchen Sie es einmal zu bewegen

Anlaufen


$ sudo nginx

Halt


$ sudo nginx -s stop

Oh! !! gerührt! !!

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

Puma-Socket-Kommunikationseinstellungen

Ändern Sie die Konfigurationsdatei von Puma, um Rails (Puma) und Nginx zu integrieren

/opt/rails_app/config/puma.rb


#Kommentar hier raus
#port        ENV.fetch("PORT") { 3000 }

#Fügen Sie diese Zeile hinzu
bind "unix:///opt/rails_app/tmp/sockets/puma.sock"

Der Kooperationsteil wurde zu rails.conf hinzugefügt

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


#Fügen Sie den folgenden Code hinzu
upstream rails_app {
    #Kommunikationseinstellungen für den UNIX-Domain-Socket
    server unix:///opt/rails_app/tmp/sockets/puma.sock fail_timeout=0;
}

Es wird verknüpft, wenn Schienen ausgeführt werden.

Error


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

Beeindruckend! !! Irgendwie wurde ich wütend ...

Es scheint, dass SQLite 3.8 oder höher erforderlich ist, um SQLite mit Ruby on Rails 6 zu verwenden. Das SQLite-Paket enthält 3.7 ... Installieren Sie die neueste Version von SQLite, um das Problem zu beheben.

# 3.Laden Sie 29 herunter
$ wget https://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz

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

$ cd sqlite-autoconf-3290000

#Widersprechen Sie nicht dem ursprünglichen SQLite/opt/sqlite/Auf sqlite3 installieren
$ ./configure --prefix=/opt/sqlite/sqlite3

$ make

$ sudo make install

#Versionsbestätigung
$ /opt/sqlite/sqlite3/bin/sqlite3 --version
3.29.0 2019-07-10 17:32:03 fc82b73eaac8b36950e527f12c4b5dc1e147e6f4ad2217ae43ad82882a88bfa6

#Setzen Sie den Edelstein sqlite3 wieder ein
$ gem uninstall sqlite3

#Installieren Sie, indem Sie die Bibliothek angeben und die oben eingegebenen Pfade einschließen
$ gem install sqlite3 -- --with-sqlite3-include=/opt/sqlite/sqlite3/include \
   --with-sqlite3-lib=/opt/sqlite/sqlite3/lib

Versuchen Sie erneut, die Schienen zu bewegen ...

Oh! !! gerührt! !!

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

SSL-Einstellungen! Erstellen Sie mein Zertifikat

Lassen Sie uns übrigens auch SSL einrichten

Installieren Sie OpenSSL

Überprüfen und installieren Sie OpenSSL


#Überprüfen Sie die Version von openssl
$ openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

#Wenn die Version nicht angezeigt wird, installieren Sie
$ sudo yum install -y openssl

Verzeichnis erstellen


$ sudo mkdir /etc/nginx/ssl

Erstellen eines privaten Schlüssels

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

Erstellen einer CSR (Certificate Signing Request)

Erstellen Sie aus dem privaten Schlüssel eine "CSR (Certificate Signing Request)"

Sie werden aufgefordert, den Ländercode, die Adresse, den Firmennamen usw. einzugeben. Wenn es sich jedoch um ein selbstsigniertes Zertifikat handelt, ist dies nicht erforderlich. Geben Sie also nichts ein und überspringen Sie es mit "Enter".

Erstellen Sie eine CSR


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

Erstellung einer CRT (SSL-Serverzertifikat)

Ursprünglich habe ich den zuvor erwähnten CSR bei der Zertifizierungsstelle registriert und sie gebeten, ein "CRT (SSL-Serverzertifikat)" auszustellen, aber diesmal habe ich ein "Oreore-Zertifikat (selbstsigniert)" und diesen Computer erstellt Innerhalb abgeschlossen

CRT erstellen


#CRT erstellen (Ablaufdatum 10 Jahre)
$ sudo openssl x509 -days 3650 -req -signkey /etc/nginx/ssl/server.key -in /etc/nginx/ssl/server.csr -out /etc/nginx/ssl/server.crt

#Bestätigen Sie, dass CRT generiert wurde
$ ls -l /etc/nginx/ssl/
Insgesamt 12
-rw-r--r--1 Wurzel Wurzel 1103 14. Juli 11:52 server.crt
-rw-r--r--1 Wurzel Wurzel 952 14. Juli 11:52 server.csr
-rw-r--r--1 Wurzel Wurzel 1675 14. Juli 11:51 server.key

Zertifikat in Nginx festlegen

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


server {
    #Lassen Sie Port 443 zu und aktivieren Sie die SSL-Funktion
    # listen 80;
    listen 443 ssl;
    server_name  {#server_name};

    #Zertifikat festlegen
    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
         :
         :
}

Starten Sie neu


$ sudo restart nginx

Ich konnte mich mit SSL verbinden! !!

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

Recommended Posts

[AWS] Veröffentlichen Sie die Rails-App mit Nginx + Puma
Veröffentlichen Sie die mit Ruby on Rails erstellte App
[Rails] Nginx, Puma-Umgebungsbereitstellung und Serverstudie [AWS EC2]
Erstellen Sie eine Entwicklungsumgebung für Rails-Anwendungen mit Docker [Docker, Rails, Puma, Nginx, MySQL]
Strg-Z funktioniert, es gibt also eine Möglichkeit zu unterbrechen und zu töten: Dies ist mühsam und kann den falschen töten. Sie können dies in ein Python-Skript schreiben. Verfolgen Sie Rails-App-Fehler mit Python, C-Erweiterung Sentry
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Einfache Bereitstellung mit Capistrano + AWS (EC2) + Rails
Fehler beim Erstellen der Infrastruktur mit der aws-App
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
Downgrade einer vorhandenen App, die mit Rails 5.2.4 erstellt wurde, auf 5.1.6
Schienen neuer App-Name nicht erstellt
Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
So pushen Sie mit Rails entwickelte Apps an Github
[Rails 6] Laufzeitfehler mit $ Rails s
Gerät mit Schienen handhaben
[Schienen] Test mit RSpec
[Rails] Entwicklung mit MySQL
Unterstützt Mehrsprachigkeit mit Rails!
Grobe Prozedur verbalisierte Ausgabe beim Erstellen einer App mit Rails
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Zusammenfassung der ersten Arbeiten beim Erstellen einer App mit Rails
So geben Sie db beim Erstellen einer App mit Rails an
Ich habe versucht, die automatische Bereitstellung mit CircleCI + Capistrano + AWS (EC2) + Rails durchzuführen
Holen Sie sich Youtube-Kanalinformationen mit der Rails-App (mit Yt gem)