Das Verfahren zur "Verwendung des AWS-Servers" besteht aus 5 Teilen.
Bitte überprüfen Sie die Artikel unten.
① EC2-Grundeinstellungen ② Datenbank in der Produktionsumgebung erstellen ③ Startschienen von EC2 ← Imakoko ④ Einrichten des Webservers ⑤ Bereitstellung automatisieren
In Klemme laufen lassen (in EC2)
[ec2-user@ip-***-**-**-*** ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
3a:8c:1d:d1:a9:22:c7:6e:6b:43:22:31:0f:ca:63:fa ec2-user@ip-172-31-23-189
The key's randomart image is:
+--[ RSA 4096]----+
| + |
| . . = |
| = . o . |
| * o . o |
|= * S |
|.* + . |
| * + |
| .E+ . |
| .o |
+-----------------+
Durch Ausführen des Befehls "cat" können Sie den spezifischen Inhalt der Datei auf dem Terminal überprüfen.
[ec2-user@ip-***-**-**-*** ~]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2E......
Registrieren Sie als Nächstes den öffentlichen Schlüssel, der vom Befehl cat in GitHub angezeigt wird. Greifen Sie auf die folgende URL zu
https://github.com/settings/keys
Füllen Sie "Titel" aus Fügen Sie den öffentlichen Schlüssel in "Schlüssel" ein. Drücken Sie zum Speichern "ADD SSH Key"
Überprüfen Sie nach der Registrierung des Schlüssels in GitHub, ob Sie mit dem folgenden Befehl eine Verbindung mit ssh herstellen können
[ec2-user@ip-***-**-**-*** ~]$ ssh -T [email protected]
Hi <Github Benutzername>! You've successfully authenticated, but GitHub does not provide shell access.
Wenn "Berechtigung verweigert (öffentlicher Schlüssel)" angezeigt wird, Die Einstellung der SSH-Taste ist falsch. Überprüfen Sie daher die Arbeit erneut.
"Anwendungsserver" akzeptiert "Anfragen" von Browsern Software, die tatsächlich Rails-Anwendungen ausführt
Der Anwendungsserver muss auch auf dem EC2-Server ausgeführt werden.
Die dafür benötigten Werkzeuge sind ** Einhorn
**
"Unicorn" ist ein Anwendungsserver, der häufig auf weltoffenen Servern verwendet wird. Es kann mit dem Befehl "unicorn_rails" anstelle des Befehls "rail" gestartet werden.
Fügen Sie den folgenden Inhalt unten in der Gemfile hinzu und bündeln Sie die Installation
group :production do
gem 'unicorn', '5.4.1'
end
Erstellen Sie "config / unicorn.rb" und bearbeiten Sie den Inhalt wie folgt
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
#Mitarbeiter, der Anforderungen akzeptiert und Antworten generiert(Arbeiter)Bestimmen Sie die Anzahl der
worker_processes 1
#Geben Sie das Verzeichnis an, in dem die Anwendung installiert ist
#Wenn Unicorn Rails-Code ausführt, gibt es ein Verzeichnis an, in dem nach Dateien gesucht werden soll, auf die tatsächlich verwiesen wird, z. B. Routing.
working_directory app_path
#Geben Sie den Speicherort der Dateien an, die zum Starten von Unicorn erforderlich sind
#Unicorn generiert beim Start eine Datei mit der Prozess-ID. Geben Sie den Speicherort an.
pid "#{app_path}/tmp/pids/unicorn.pid"
#Geben Sie die Portnummer an
#Entscheiden Sie, welche Portnummer Sie die Anfrage annehmen möchten. Geben Sie diesmal Port 3000 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
"Commit → Push" in das Remote-Repository Nachdem Sie es im Remote-Repository von GitHub wiedergegeben haben, spiegeln Sie alle bisherigen lokalen Inhalte in EC2 wider.
#Erstellen Sie mit dem Befehl mkdir ein neues Verzeichnis
[ec2-user@ip-***-**-**-*** ~]$ sudo mkdir /var/www/
#Ec2-Berechtigungen für das erstellte WWW-Verzeichnis-Zum Benutzer wechseln
[ec2-user@ip-***-**-**-*** ~]$ sudo chown ec2-user /var/www/
Holen Sie sich als Nächstes die "Repository-URL" von GitHub und klonen Sie sie. Sie können die URL kopieren, indem Sie auf den grünen "Code" klicken.
Nachdem Sie die URL kopiert haben, klonen Sie den Code
[ec2-user@ip-***-**-**-*** ~]$ cd /var/www/
[ec2-user@ip-***-**-**-*** www]$Git-Klon Einfügen der kopierten URL
Erfolg, wenn die obige Eingabe keinen Fehler enthält.
Die derzeit ausgeführte EC2-Instanz verfügt nicht über genügend Computerleistung. Bei der Installation von Gem kann ein Fehler auftreten. Insbesondere ist nicht genügend Speicher in Bezug auf die Verarbeitungsleistung des Computers vorhanden. Dies ist die Grenze für Instanzen, die kostenlos ausgeführt werden können, daher kann nicht geholfen werden ...
Bevor wir zukünftige Einstellungen vornehmen, führen wir daher einen Prozess namens "Swap file" durch, um den Speicher zu vergrößern.
Eine "Auslagerungsdatei" ist eine Datei, die vorbereitet wird, um den Speicher vorübergehend zu erhöhen. EC2 bereitet standardmäßig keine Swap-Datei vor. Durch diese Vorbereitung werden Verarbeitungsfehler mit unzureichendem Speicher verhindert.
Stellen Sie eine SSH-Verbindung zu EC2 her und wechseln Sie in Ihr Home-Verzeichnis In Klemme laufen lassen (in EC2)
[ec2-user@ip-***-**-**-*** ~]$ cd
Führen Sie die folgenden Befehle der Reihe nach aus
[ec2-user@ip-***-**-**-*** ~]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
#Warten Sie eine Weile und sind Sie erfolgreich, wenn Folgendes angezeigt wird
512+0 Aufzeichnungseingabe
512+0 Datensatzausgabe
536870912 Bytes(537 MB)Kopiert, 7.35077 Sekunden, 73.0 MB/Sekunden
[ec2-user@ip-***-**-**-*** ~]$ sudo chmod 600 /swapfile1
[ec2-user@ip-***-**-**-*** ~]$ sudo mkswap /swapfile1
#Erfolg, wenn Folgendes angezeigt wird
Stellen Sie die Größe des Swap Space Version 1 ein= 524284 KiB
Kein Etikett, UUID=74a961ba-7a33-4c18-b1cd-9779bcda8ab1
[ec2-user@ip-***-**-**-*** ~]$ sudo swapon /swapfile1
[ec2-user@ip-***-**-**-*** ~]$ sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
Damit ist die Sicherung des Bereichs für die Auslagerungsdatei abgeschlossen.
Installieren Sie den Gem, der zum Starten der auf EC2 geklonten Anwendung mit dem folgenden Befehl erforderlich ist
In Klemme laufen lassen (in EC2)
#Wechseln Sie in das geklonte Verzeichnis
[ec2-user@ip-***-**-**-*** www]$ cd /var/www/Anwendung in Entwicklung
#Überprüfen Sie die Version von Ruby
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
Installieren Sie als Nächstes den Bundler, um Edelsteine in der Produktionsumgebung zu verwalten. Überprüfen Sie zunächst, welche Bundler-Version in der lokal entwickelten Anwendung verwendet wurde.
Im Terminal ausführen (lokal)
#Führen Sie das Verzeichnis der zu entwickelnden Anwendung aus
% bundler -v
Bundler version 2.1.4 ← Beispiel
Einführung der gleichen Bundler-Version wie die lokale Version auf der EC2-Seite. Installieren Sie im obigen Fall die Version von "Bundler 2.1.4" und führen Sie die Bundle-Installation aus.
In Klemme laufen lassen (in EC2)
# 「2.1.Im Teil von "4" wird die lokal bestätigte Version des Bundlers eingeführt.
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ gem install bundler -v 2.1.4
#Die folgenden Befehle können einige Minuten oder länger dauern
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ bundle install
Der Wert der Umgebungsvariablen kann von Rails aus verwendet werden, indem "ENV ['
"secret_key_base" ist eine Zeichenfolge, die zum Verschlüsseln von Cookies verwendet wird. Sie müssen es vorbereiten, wenn Sie eine Rails-Anwendung ausführen. Da es sich um einen Wert handelt, der nicht nach außen gelangen darf, wird dies auch in der Umgebungsvariablen angegeben.
Erstellen Sie zunächst secret_key_base mit dem folgenden Befehl
In Klemme laufen lassen (in EC2)
# 「2.1.Im Teil von "4" wird die lokal bestätigte Version des Bundlers eingeführt.
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ rake secret
69619d9a75b78f2e1c87ec5e07541b42f23efeb6a54e97da3723de06fe74af29d5718adff77d2b04b2805d3a1e143fa61baacfbf4ca2c6fcc608cff8d5a28e8d
Legen Sie als Nächstes die Umgebungsvariable in EC2 fest. Speichern Sie Umgebungsvariablen in einer Datei mit dem Namen "/ etc / environment". Verwenden Sie den Befehl vim, um Umgebungsvariablen zu schreiben. Verwenden Sie zu diesem Zeitpunkt die Option "sudo".
"Sudo" ist eine Option mit der Rolle "Ausführung von Befehlen mit allen Berechtigungen". Da "Dateien unter / etc" nicht ohne starke Autorität geschrieben oder gespeichert werden können, fügen Sie am Anfang des Befehls "sudo" hinzu.
In Klemme laufen lassen (in EC2)
# 「2.1.Im Teil von "4" wird die lokal bestätigte Version des Bundlers eingeführt.
[ec2-user@ip-***-**-**-*** ~]$ sudo vim /etc/environment
Geben Sie "i" ein, um den Eingabemodus aufzurufen. Danach wird es wie folgt beschrieben.
#Geben Sie das Passwort des Root-Benutzers der Datenbank ein (Sie können auf den Artikel über den folgenden Link verweisen).
DATABASE_PASSWORD='Datenbank-Root-Benutzerpasswort'
SECRET_KEY_BASE='Das früher geschaffene Geheimnis_key_base'
Führen Sie nach Abschluss der Eingabe die Reihenfolge "esc key" → ": wq" aus und speichern Sie. Melden Sie sich einmal von der Produktionsumgebung ab, um die festgelegten Umgebungsvariablen wiederzugeben.
In Klemme laufen lassen (in EC2)
# 「2.1.Im Teil von "4" wird die lokal bestätigte Version des Bundlers eingeführt.
[ec2-user@ip-***-**-**-*** ~]$ exit
logout
Connection to 52.xx.xx.xx closed.
Überprüfen Sie als Nächstes, ob die soeben festgelegten Umgebungsvariablen ordnungsgemäß wiedergegeben werden. Stellen Sie mit dem folgenden Befehl erneut eine Verbindung zu EC2 her.
Terminal (lokal)
$ ssh -i [Der Name des heruntergeladenen Schlüssels].pem ec2-user@[Elastische IP, die der erstellten EC2-Instanz zugeordnet ist]
Kombinieren Sie nach dem erneuten Verbinden den Befehl "env" und den Befehl "grep" mit Stellen Sie sicher, dass die zuvor festgelegten Umgebungsvariablen angewendet werden.
Befehl env: Ein Befehl zum Anzeigen der festgelegten Umgebungsvariablen Befehl grep: Ein Befehl zum Suchen nach Umgebungsvariablen usw. Die Verwendung ist "grep (Suchziel)".
In Klemme laufen lassen (in EC2)
# 「2.1.Im Teil von "4" wird die lokal bestätigte Version des Bundlers eingeführt.
[ec2-user@ip-***-**-**-*** ~]$ env | grep SECRET_KEY_BASE
SECRET_KEY_BASE='secret_key_base'
[ec2-user@ip-***-**-**-*** ~]$ env | grep DATABASE_PASSWORD
DATABASE_PASSWORD='Datenbank-Root-Benutzerpasswort'
Auf die neu gestartete EC2-Instanz kann mit ssh zugegriffen werden. Es ist überhaupt nicht durch andere Kommunikationsmethoden wie HTTP verbunden. Daher muss die als Server verwendete EC2-Instanz den "Port" öffnen, damit HTTP im Voraus verbunden werden kann. Zuvor schrieb ich "listen 3000" in config / unicorn.rb, Dies bedeutet "Starten Sie den Rails-Server auf Port 3000".
Um den Port einzustellen, muss die Einstellung "Sicherheitsgruppe" von EC2 geändert werden.
Wählen Sie die Zielinstanz im Bildschirm mit der EC2-Instanzliste aus und wählen Sie sie aus. Klicken Sie unten rechts in der Abbildung auf den Link "Sicherheitsgruppe" (in der Abbildung "Startassistent-2") ](https://gyazo.com/cef10db71b1cb250b5fcc8851bc46d1b)
Klicken Sie dann auf der Registerkarte "Eingehend" auf "Eingehende Regel bearbeiten"
Klicken Sie nach dem Bildschirmübergang auf "Regel hinzufügen" und bearbeiten Sie sie wie folgt Typ: Benutzerdefiniertes TCP Protokoll: TCP Portbereich: 3000 Quelle: Benutzerdefiniert /0.0.0.0/0
Klicken Sie nach dem Einstellen auf "Regel speichern". Das ist alles, um den Hafen zu öffnen.
Verwenden Sie den Befehl "unicorn_rails", um Rails in einer Produktionsumgebung zu starten.
Bearbeiten Sie zunächst die Einstellungen der Produktionsumgebung von "database.yml" mit VS Code. Bearbeiten Sie die lokale database.yml wie folgt, um sie an die MySQL-Einstellungen in der Produktionsumgebung anzupassen.
config/database.yml (lokal)
production:
<<: *default
database:(* Hier nicht bearbeiten)
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
Bearbeiten Sie als Nächstes "Festschreiben → Drücken".
Reflektieren Sie als Nächstes den Inhalt von GitHub in EC2 Führen Sie den folgenden Befehl im Terminal aus (in EC2).
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ git pull origin master
Erstellen Sie als Nächstes eine Datenbank in EC2. Es gibt eine Option "RAILS_ENV = Produktion". RAILS_ENV = Produktion: Optionen, die beim Ausführen von Befehlen in der Produktionsumgebung angehängt werden.
In Klemme laufen lassen (in EC2)
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ rails db:create RAILS_ENV=production
Created database '<Name der Datenbank>'
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ rails db:migrate RAILS_ENV=production
Sobald dies erledigt ist, starten Sie Rails.
In Klemme laufen lassen (in EC2)
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ cd /var/www/[Repository]
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
Gehen Sie mit Ihrem Browser zu http: //
Wenn ich es mit einem Browser überprüfe, bleibt die Ansicht unterbrochen. Eine Fehlermeldung (Es tut uns leid, aber es ist ein Fehler aufgetreten.) Wird möglicherweise angezeigt.
Das ist nicht gut, also organisieren Sie die "Asset-Dateien".
Asset-Datei: Eine Datei, die Bilder, CSS, JavaScript usw. verwaltet. Das Komprimieren dieser Asset-Datei und das Übertragen der Daten wird als "Kompilierung" bezeichnet. Wenn Sie dies nicht tun, wird das CSS nicht in der Produktionsumgebung wiedergegeben und die Ansicht wird beschädigt. Probleme wie der Browser, der aufgrund eines Fehlers nicht angezeigt wird, treten auf.
In Klemme laufen lassen (in EC2)
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ rails assets:precompile RAILS_ENV=production
Wenn ich fertig bin, habe ich Rails erneut gestartet, aber da der Server bereits aktiv ist, muss ich Rails neu starten.
Überprüfen Sie zuerst "Einhornprozess". Verwenden Sie den Befehl "ps", um den Vorgang vom Terminal aus zu überprüfen. Beenden Sie danach den Vorgang mit dem Befehl "kill".
ps-Befehl: Ein Befehl zum Überprüfen des aktuell ausgeführten Prozesses. Befehl kill: Ein Befehl zum Stoppen des aktuell ausgeführten Prozesses.
In Klemme laufen lassen (in EC2)
[ec2-user@ip-***-**-**-*** <Repository-Name>]$ ps aux | grep unicorn
...
Dann sollten Sie den Prozess wie folgt sehen.
#### **`Terminal`**
```bash
ec2-user 17877 0.4 18.1 588472 182840 ? Sl 01:55 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 17881 0.0 17.3 589088 175164 ? Sl 01:55 0:00 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
Über "ec2-Die Nummer rechts von "Benutzer" ist die Prozess-ID (PID). 「unicorn_Der als "Rails Master" bezeichnete Prozess ist der Einhorn-Prozesskörper Die Prozess-ID lautet derzeit "17877".
Terminal (in EC2))Laufen Sie weiter
[ec2-user @ ip - *** - ** - ** - *** <Repository-Name>] $ kill <bestätigte Einhornschienen-Master-Prozess-ID> ← Diesmal 17878
Zeigen Sie den ausgeführten Prozess erneut an und bestätigen Sie, dass er beendet wurde.
[ec2-user @ ip - *** - ** - ** - *** <Repository-Name>] $ ps aux | grep unicorn
...
ec2-user 17911 0.0 0.2 110532 2180 pts/0 S+ 02:05 0:00 grep --color=auto unicorn
Wenn das Ausführungsergebnis wie oben ist, ist der Stopp von Unicorn abgeschlossen.
###Führen Sie abschließend den Befehl aus, um Rails neu zu starten 「RAILS_SERVE_STATIC_FILES="1" hat die Aufgabe, Rails anzugeben, um das kompilierte Asset zu finden.
Terminal (in EC2))Laufen Sie weiter
[ec2-user @ ip - *** - ** - ** - *** <Repository-Name>] $ RAILS_SERVE_STATIC_FILES = 1 unicorn_rails -c config / unicorn.rb -E Produktion -D
HTTP im Browser://<Elastic IP>:3000/Gehen Sie zu und überprüfen Sie, ob die Site angezeigt wird.
##Wenn Rails nicht gut startet unicorn_Beim Laufen von Schienen 「master failed to start, check stderr log for details」 Wenn Sie erhalten, müssen Sie das Fehlerprotokoll von Einhorn überprüfen.
Verwenden Sie beim Anzeigen von Protokolldateien den Befehl "weniger Befehl"
less command: Ein Befehl, mit dem Sie den Inhalt einer Datei überprüfen können. Der "Katzenbefehl" hat eine ähnliche Rolle.
Terminal (in EC2))Laufen Sie weiter
[ec2-user @ ip - *** - ** - ** - *** <Repository-Name>] $ less log / unicorn.stderr.log
I, [2016-12-21T04:01:19.135154 #18813] INFO -- : Refreshing Gem list
I, [2016-12-21T04:01:20.732521 #18813] INFO -- : listening on addr=0.0.0.0:3000 fd=10
E, [2016-12-21T04:01:20.734067 #18813] Mysql2::Error::ConnectionError: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/var/www/furima/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `connect'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `initialize'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `new'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/mysql2_adapter.rb:24:in `mysql2_connection'
/var/www/furima/shared/bundle/ruby/2.6.0/gems/activerecord-6.0.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:889:in `new_connection'
##「We’re sorry,aber ~ "wird angezeigt Zuallererst "Produktion.Überprüfen Sie "log".
production.Protokoll: Ein Ort zum Aufzeichnen von Serverprotokollen, "ein Ort zum Aufzeichnen von Ereignissen in EC2"
Terminal (in EC2))Laufen Sie weiter
[ec2-user @ ip - *** - ** - ** - *** <Repository-Name>] $ less log / Production.log
(Produktion.log anzeigen)
####tail -Verwenden Sie den Befehl f tail -Befehl f: Ein Befehl, der das neueste Protokoll nur für 10 Zeilen anzeigt. Es ist ein Tool, mit dem Sie das Protokoll einfach überprüfen können. Verwenden Sie es daher so oft wie möglich.
das ist alles. Danke für deine harte Arbeit.
Weiter →Hier
Recommended Posts