[RUBY] Verfahren zum Veröffentlichen einer Anwendung mit AWS (6) Führen Sie Nginx ein

Einführung

Wir werden das Verfahren zum Veröffentlichen einer Anwendung mit AWS beschreiben. In diesem Artikel wird Nginx, ein Webserver, vorgestellt.

Installieren Sie Nginx

Was ist Nginx?

Nginx ist eine Art Webserver. Führt als Reaktion auf Benutzeranforderungen eine Verarbeitung zum Abrufen statischer Inhalte durch und fordert den Anwendungsserver auf, dynamischen Inhalt zu generieren.

Wechseln Sie in das Verzeichnis ".ssh"

Führen Sie den folgenden Befehl aus und wechseln Sie in das Verzeichnis ".ssh".

cd ~/.ssh/

SSH-Verbindung

Führen Sie den folgenden Befehl aus, um mit ssh auf die EC2-Instanz zuzugreifen. (Wenn der Name der heruntergeladenen PEM-Datei "xxx.pem" und die elastische IP 12.345.67.890 lautet)

ssh -i xxx.pem [email protected]

Nginx-Installation

Führen Sie den folgenden Befehl aus, um Nginx zu installieren.

sudo yum -y install nginx

Bearbeiten Sie die Nginx-Konfigurationsdatei

Führen Sie den folgenden Befehl aus, um die Nginx-Konfigurationsdatei mit vim zu bearbeiten. Dateien im Verzeichnis / etc können nicht ohne Erlaubnis gelesen, geschrieben oder gespeichert werden. Führen Sie sie daher mit sudo aus.

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

Bearbeiten Sie die Datei rails.conf wie folgt. Dieses Mal verwenden wir als Beispiel den Fall, in dem der Anwendungsname "testapp" und die elastische IP "12.345.67.890" lautet.

rails.conf


upstream app_server {
  #Einstellungen für die Verknüpfung mit Unicorn.
  server unix:/var/www/testapp/tmp/sockets/unicorn.sock;
}

# {}Der von umgebene Teil wird als Block bezeichnet. Kann den Server einstellen
server {
  #Portnummer, an der dieses Programm Verbindungen akzeptiert
  listen 80;
  #URL anfordern, um Verbindung zu akzeptieren Kein Zugriff mit URL, die hier nicht geschrieben ist
  server_name 12.345.67.890;

  #Stellen Sie die maximale Größe der vom Client hochgeladenen Dateien auf 2 Giga ein. Der Standardwert ist 1 Mega, halten Sie ihn also groß
  client_max_body_size 2g;

#Stammverzeichnis, als die Verbindung hergestellt wurde
  root /var/www/testapp/public;

#Assets-Datei(CSS- und JavaScript-Dateien usw.)Einstellungen, die beim Zugriff angewendet werden
  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;
}

Ändern Sie die Nginx-Berechtigungen

Führen Sie den folgenden Befehl aus, um die Nginx-Berechtigungen zu ändern. Durch Ändern der Berechtigungen hier gibt die POST-Methode keinen Fehler aus.

cd /var/lib
sudo chmod -R 775 nginx

Option "-R"

Die Option "-R" ist eine Option für rekursive Änderungen. Ändern Sie also die Berechtigungen für dieses Verzeichnis und alle Dateien in diesem Verzeichnis.

Was ist die POST-Methode?

Eine der Anforderungen, die vom Client per HTTP-Kommunikation an den Webserver gesendet wurden, um Daten vom Client an das in der URL angegebene Programm zu senden. Wird verwendet, um große Datenmengen und Dateien an den Server zu senden.

Starten Sie Nginx neu

Führen Sie den folgenden Befehl aus, um Nginx neu zu starten und die Konfigurationsdatei neu zu laden.

cd ~
sudo service nginx restart

Ändern Sie die Einhorneinstellungen

Ändern Sie die Einhorneinstellungen erneut, um sie über Nginx zu verarbeiten.

Bearbeiten Sie unicorn.rb

Bearbeiten Sie config / unicorn.rb in der Entwicklungsumgebung wie folgt. Vergessen Sie nach dem Bearbeiten nicht, festzuschreiben und zu pushen.

config/unicorn.rb


#Legen Sie das Verzeichnis, in dem der Anwendungscode auf dem Server installiert ist, in einer Variablen ab
app_path = File.expand_path('../../', __FILE__)

#Bestimmen Sie die Leistung des Anwendungsservers
worker_processes 1

#Geben Sie das Verzeichnis an, in dem die Anwendung installiert ist
working_directory app_path

#Geben Sie den Speicherort der Dateien an, die zum Starten von Unicorn erforderlich sind
pid "#{app_path}/tmp/pids/unicorn.pid"

#Geben Sie die Portnummer an
listen "#{app_path}/tmp/sockets/unicorn.sock"

#Geben Sie eine Datei an, um Fehler zu protokollieren
stderr_path "#{app_path}/log/unicorn.stderr.log"

#Geben Sie eine Datei an, um normale Protokolle aufzuzeichnen
stdout_path "#{app_path}/log/unicorn.stdout.log"

#Legen Sie die maximale Wartezeit für die Antwort der Rails-Anwendung fest
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

Reflektieren Sie in der Produktionsumgebung

Führen Sie den folgenden Befehl aus, um den bearbeiteten Inhalt in der Produktionsumgebung wiederzugeben.

cd /var/www/testapp(Wenn der Name des Anwendungsrepositorys "testapp" ist)
git pull origin master

Starten Sie das Einhorn neu

Führen Sie den folgenden Befehl aus, um die Prozess-ID des Einhorn-Masters zu überprüfen.

ps aux | grep unicorn

Führen Sie den folgenden Befehl aus, um die bestätigte Prozess-ID zu beenden. (Hier wird angenommen, dass die Prozess-ID des Einhorn-Masters 17877 ist.)

kill 17877

Führen Sie den folgenden Befehl aus, um das Einhorn zu starten.

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

Greifen Sie über Ihren Browser mit Elastic IP auf Ihre Anwendung zu

Greifen Sie über einen Browser auf die Anwendung mit Elastic IP zu. (Diesmal: Sie müssen nicht 3000 hinzufügen) Zu diesem Zeitpunkt muss das Einhorn laufen.

Überprüfen Sie, ob Sie eine Fehlermeldung erhalten

--Wenn Sie eine Fehlermeldung erhalten, dass 502 fehlerhaftes Gateway angezeigt wird, überprüfen Sie /var/log/nginx/error.log -Überprüfen Sie /var/www/testapp/log/unicorn.stderr.log auf Fehler (wenn der Repository-Name testapp lautet).

Ergänzung

Was ist ein Webserver?

Empfängt eine von außen gesendete Anfrage und fügt die Verarbeitung hinzu. Nginx ist eine Art Webserver. Es hat die folgenden Rollen.

Statischer Inhalt ist eine Datei, deren Inhalt sich nicht bei jeder Anforderung ändert. CSS- und Bilddateien mit fester Anzeige. Dynamischer Inhalt ist eine Datei, deren Inhalt sich mit jeder Anforderung ändert. Eine Datei, die Daten aus der Datenbank abruft und anzeigt, die die Suchbedingungen erfüllen.

Was ist ein Anwendungsserver?

Generiert dynamischen Inhalt und gibt das Verarbeitungsergebnis an den Webserver zurück. Unicorn ist eine Art Anwendungsserver. Es hat die folgenden Rollen.

In Verbindung stehender Artikel

Verfahren zum Veröffentlichen einer Anwendung mit AWS (1) AWS-Konto erstellen Verfahren zum Veröffentlichen einer Anwendung mit AWS (2) EC2-Instanz erstellen [So veröffentlichen Sie eine Anwendung mithilfe der AWS (3) EC2-Instanzumgebungskonstruktion] (https://qiita.com/osawa4017/items/8dc09203f84e04bf0e66) [Verfahren zum Veröffentlichen einer Anwendung mit AWS (4) Datenbank erstellen] (https://qiita.com/osawa4017/items/7dba25f4fa30ab0b1246) [Verfahren zum Veröffentlichen eines Antrags mit AWS (5) Antrag veröffentlichen] (https://qiita.com/osawa4017/items/6f3125fcc21f73024311)

Recommended Posts

Verfahren zum Veröffentlichen einer Anwendung mit AWS (6) Führen Sie Nginx ein
Verfahren zum Veröffentlichen einer Anwendung mit AWS (5) Veröffentlichen einer Anwendung
Verfahren zum Veröffentlichen einer Anwendung mit AWS (4) Erstellen einer Datenbank
Verfahren zum Veröffentlichen einer Anwendung mit AWS (7) Automatische Bereitstellung durch Capistrano
So veröffentlichen Sie eine Anwendung mithilfe der AWS (3) EC2-Instanzumgebungskonstruktion
Verfahren zum Erstellen eines Autorisierungsservers mit Authlete (CIBA-kompatible Version)
AdMob-Einstellungsverfahren für Android-Apps (Dezember 2016)
Senden Sie E-Mails mit JavaMail unter AWS
Verfahren zum Veröffentlichen einer Anwendung mit AWS (7) Automatische Bereitstellung durch Capistrano
[EC2 / Vue / Rails] EC2-Bereitstellungsverfahren für Vue + Rails
CI für Maven-Projekt bei Github Actions
[Für Anfänger] Verfahren zum Erstellen eines Controllers mithilfe von Schienen