[RAILS] So erstellen Sie einen Anwendungsserver auf einer EC2-Instanz von AWS

Einführung

AWS steht für Amazon Web Servises und ist ein Cloud-Server-Service von Amazon. Wir werden das Gelernte ausgeben, um unser Verständnis von AWS zu verbessern.

Dieser Fluss

Es wird davon ausgegangen, dass die Instanz erstellt wurde.

Installieren Sie Unicorn in Ihrer Anwendung

① Installieren Sie Unicorn in Ihrer eigenen Anwendung

Fügen Sie der Gemfile in der Anwendung die folgende Beschreibung hinzu.

Gemfile


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

Terminal


% bundle install

② Einhorneinstellungen

Erstellen Sie unicorn.rb in der Konfiguration Ihrer Anwendung. Nehmen Sie dann die folgenden Einstellungen vor.

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 3000

#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

#Das Folgende ist eine angewendete Einstellung, daher wird die Erklärung weggelassen.

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

Schieben Sie es in das Remote-Repository und spiegeln Sie es wider.

Erstellen Sie einen Anwendungsserver auf einer Instanz, die mit EC2 unter AWS erstellt wurde

③ Installieren Sie die Anwendung auf der Instanz

Terminal


Melden Sie sich bei der Instanz an
% ssh -Ich Schlüsselpaar Name.pem ec2-user@<Öffentliche IP>

In der Instanz/var/www/Ein Verzeichnis erstellen
[Beispiel]$ sudo mkdir /var/www/

Ec2-Berechtigungen für das erstellte WWW-Verzeichnis-Dem Benutzer gewährt
[Beispiel]$ sudo chown ec2-user /var/www/

Gehen Sie zum Verzeichnis www
[Beispiel]$ cd /var/www/

#Klonen Sie die Anwendung von GitHub
[Instanz www]$ git clone <HTTPS-URL, die über die Schaltfläche Code der Anwendung abgerufen wird, die Sie auf GitHub bereitstellen möchten>

④ Installieren Sie Gem

Terminal


In der Instanz in das Ausgangsverzeichnis wechseln
[Instanz www]$ cd ~

Tauschen Sie die Dateieinstellungen aus
[Beispiel]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
[Beispiel]$ sudo chmod 600 /swapfile1
[Beispiel]$ sudo mkswap /swapfile1
[Beispiel]$ sudo swapon /swapfile1
[Beispiel]$ sudo sh - -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

Terminal


Wechseln Sie in das Anwendungsverzeichnis der Instanz
[Beispiel]$ cd /var/www/<Anwendungsname>

Installieren Sie den Bundler(Die Version von Bundler ist "Befehl" im Terminal+Erstellen Sie eine weitere Registerkarte mit "T" und "Bundler" in der neu erstellten Registerkarte-Sie können dies überprüfen, indem Sie "v" ausführen.)
[Beispiel<Anwendungsname>]$ gem install bundler -v <Bundler-Version>

Installieren Sie Gem
[Beispiel<Anwendungsname>]$ bundle install

Einstellungen für die Produktionsumgebung

⑤ Umgebungsvariablen einstellen

Aus Sicherheitsgründen werden Datenbankkennwörter usw. nicht auf GitHub hochgeladen. Solche Informationen werden unter Verwendung von "Umgebungsvariablen" festgelegt.

Was ist secret_key_base?

Eine Zeichenfolge zum Verschlüsseln eines Cookies. Erforderlich zum Ausführen von Rails-Anwendungen in der Produktion.

Terminal


[Beispiel<Anwendungsname>]$ rake secret
=> secret_key_Die Basiszeichenfolge wird angezeigt

Wechseln Sie in Ihr Home-Verzeichnis innerhalb der Instanz
[Beispiel<Anwendungsname>]$ cd ~

/etc/Umgebung bearbeiten
[Beispiel]$ sudo vim /etc/environment

Geben Sie "i" ein, um den Eingabemodus aufzurufen

Geben Sie das Passwort des Root-Benutzers der konfigurierten Datenbank ein
DATABASE_PASSWORD='Datenbank-Root-Benutzerpasswort'
SECRET_KEY_BASE='Das früher geschaffene Geheimnis_key_base'

* Wenn Sie AWS S3 verwenden, geben Sie Folgendes ein (geben Sie den Wert ein, der sich auf die CSV-Datei bezieht, die beim Einstellen von S3 heruntergeladen wurde).
AWS_ACCESS_KEY_ID='Kopieren Sie hier den Zugriffsschlüssel-ID-Wert der CSV-Datei'
AWS_SECRET_ACCESS_KEY='Kopieren Sie hier den Wert des geheimen Zugriffsschlüssels aus der CSV-Datei'

* Wenn die Standardauthentifizierung installiert ist, geben Sie Folgendes ein (geben Sie den festgelegten Benutzernamen und das Kennwort ein).
BASIC_AUTH_USER='Benutzernamen festlegen'
BASIC_AUTH_PASSWORD='Passwort festlegen'

「:Speichern als "wq"

Melden Sie sich von der Instanz ab und erneut an, damit die Umgebungsvariablen wirksam werden
[Beispiel]$ exit
% ssh -Ich Schlüsselpaar Name.pem ec2-user@<Öffentliche IP>

Umgebungsvariablen überprüfen
[Instanz re]$ env
=>OK, wenn die oben festgelegten Einstellungen angezeigt werden.

⑥ Geben Sie den Port für die Sicherheitsgruppe frei

Fügen Sie in der AWS Management Console "Port 3000" und "Source 0.0.0.0/0" von "Custom TCP" zur Eingangsregel der Sicherheitsgruppe der Instanz hinzu.

⑦ Ändern Sie die Rails-Anwendungseinstellungen

Die in der obigen Instanz festgelegten Umgebungsvariablen müssen auch in der Anwendung festgelegt werden.

:config/database.yml


production:
  <<: *default
  database:(* Hier nicht bearbeiten)
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

Drücken Sie nach dem Ändern der Einstellungen auf GitHub.

Wenden Sie dann die Anwendungsänderungen auf die Instanz an.

Terminal


Wechseln Sie innerhalb der Instanz in das Anwendungsverzeichnis
[Beispiel]$ cd /var/www/<Anwendungsname>

Änderungen der Anwendungseinstellungen widerspiegeln
[Beispiel<Anwendungsname>]$ git pull origin master

Programm starten

⑧ Erstellen Sie eine Datenbank (wenn in der Instanz ein Datenbankserver vorhanden ist)

Informationen zum Erstellen eines Datenbankservers finden Sie hier unter https://qiita.com/daisuke30x/items/7501d724a0727ad9f2e4

Terminal


Datenbank erstellen
[Beispiel<Anwendungsname>]$ rails db:create RAILS_ENV=production
[Beispiel<Anwendungsname>]$ rails db:migrate RAILS_ENV=production

Datenbank starten
[Beispiel<Anwendungsname>] $ sudo systemctl start maradb

RAILS_ENV = Produktion ist eine Option zur Angabe der Produktionsumgebung

⑨ Anwendung starten

Terminal


[Beispiel<Anwendungsname>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

Kompilieren Sie Anwendungs-Asset-Dateien (CSS, JavaScript, Bilder usw.). Dies ist eine notwendige Aufgabe in einer Produktionsumgebung.

Terminal


[Beispiel<Anwendungsname>]$ rails assets:precompile RAILS_ENV=production

Terminal


Überprüfen Sie den Prozess
[Beispiel<Anwendungsname>]$ ps aux | grep unicorn
=>Die zweite Nummer von links ist die Prozess-ID

Stoppen Sie den Prozess
[Beispiel<Anwendungsname>]$ kill <unicorn_Prozess-ID des Schienenmasters>

Starten Sie die Anwendung erneut
[Beispiel<Anwendungsname>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D

"RAILS_SERVE_STATIC_FILES = 1" ist die Rolle, die die zu findende kompilierte Asset-Datei angibt.

** Geben Sie im Browser "http: // <Öffentliche IP>: 3000 /" oder "http: // : 3000 /" ein. Wenn die Anwendung angezeigt wird, ist sie erfolgreich. ** **.

Schließlich

Wir hoffen, dass dieser Beitrag Anfängern bei der Überprüfung hilft.

Recommended Posts

So erstellen Sie einen Anwendungsserver auf einer EC2-Instanz von AWS
So erstellen Sie einen Webserver auf einer EC2-Instanz von AWS
So installieren Sie Ruby auf einer EC2-Instanz von AWS
So veröffentlichen Sie eine Anwendung mithilfe der AWS (3) EC2-Instanzumgebungskonstruktion
Schritte zum Veröffentlichen einer Anwendung auf Heroku
Umgang mit Instanzen
Bereitstellen von Laravel mit Docker auf EC2 unter AWS ① (EC2-Instanz erstellen)
Stellen Sie die SpringBoot-Anwendung in AWS EC2 bereit
So stellen Sie die Rails-Anwendung in AWS bereit (Artikelzusammenfassung)
So installieren und verwenden Sie Composer auf einer ECS-Instanz unter Ubuntu 16.04
Umfang des Versuchs, eine Java-Webanwendung unter Windows Server 2016 zu erstellen
So speichern Sie Bilder auf Heroku in S3 unter AWS
Erstellen Sie eine Laravel-Umgebung auf einer AWS-Instanz
Rails6.0 ~ So erstellen Sie eine umweltfreundliche Entwicklungsumgebung
Ich habe versucht, Docker auf einer EC2-Instanz zu installieren
Hinweise zum Erstellen von Burp Suite-Erweiterungen
So erstellen Sie ein Oleore-Zertifikat (SSL-Zertifikat, Selbstzertifikat)
So erstellen Sie Docker-Compose
[Rails] Erstellen Sie eine Anwendung
Memo zum Erstellen einer Servlet-Umgebung auf EC2 von AWS
Führen Sie auf, wie Sie in AWS von Docker zu AKS lernen können
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
[AWS] Verknüpfen Sie die Speichernutzung der Ubuntu EC2-Instanz mit CloudWatch
Wie man mit Heroku einsetzt
So gelangen Sie in einen Container, der auf AWS Fargate ausgeführt wird
Beispiel zum Erstellen eines Einmalkennworts auf Server- und Clientseite
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
Installieren Sie Docker auf AWS EC2
So beenden Sie den Rails-Server
So entwickeln Sie eine App mit der Jersey Java RESTful API auf einer Alibaba Cloud ECS-Instanz
So führen Sie React und Rails auf demselben Server aus
So erstellen Sie eine Methode
So erstellen Sie eine App mit Ruby on Rails (vorausgesetzt, die Umgebung wurde erstellt)
[Rails / Heroku / MySQL] So setzen Sie die Datenbank der Rails-App auf Heroku zurück
So erstellen Sie eine Apache Flink-Anwendung in 5 Minuten von Grund auf neu
Vorbereiten der Erstellung einer Rails-Anwendung
Wie man eine Ansicht auf Android "aushöhlt"
Verwendung von Ruby on Rails
Erstellen Sie einen Minecraft-Server auf AWS
So stellen Sie Bootstrap auf Rails bereit
So führen Sie JavaFX unter Docker aus
Verwendung von Bio-Formaten unter Ubuntu 20.04
So fügen Sie eine externe Bibliothek ein
So installieren Sie MariaDB 10.4 unter CentOS 8
So installieren Sie WildFly unter Ubuntu 18.04
[Rails] Aufbau einer AWS EC2-Instanzumgebung
Einfache Möglichkeit, ein eigenes Anwendungslogo zu erstellen (einfach mit Ihrem Smartphone)