Ich wollte Kenntnisse über Linux erwerben, also habe ich versucht, einen Linux-Server zu mieten, JDK, Apache, Tomcat zu installieren und eine Java-Anwendung (Hello World-Ebene) bereitzustellen, die ich selbst auf meinem lokalen PC erstellt habe. In diesem Artikel habe ich aufgeschrieben, was ich damals gemacht habe und wie ich das Problem gelöst habe. Die Wolke ist heutzutage überwiegend Mainstream, aber ich denke, dass die Wolke zu Black Box ist. Ich habe sowieso nicht die Grundlagen für Linux (Infrastruktur), also werde ich zunächst einen einfachen Linux-Server anstelle der Cloud mieten und Anwendungen darauf bereitstellen. In Zukunft werde ich die Anwendung erweitern und versuchen, sie selbst zu bedienen. Ich möchte durch solche Versuche die Grundlagen von Linux lernen. In diesem Sinne habe ich so etwas versucht. Dieses Mal müssen wir die Anwendung bereitstellen, und Erweiterung und Betrieb sind die Zukunft. Ich habe die Anwendung auf der Ebene von Hello World bereitgestellt, daher werde ich nicht über Java schreiben. Ich mietete einen Linux-Server, installierte Apache und Tomcat, richtete ihn ein und drückte auf die URL, und Hello World kam heraus! Es geht darum.
Mieten Sie einen Mietserver für Personen, die Java verwenden können. Diesmal habe ich mich für Sakura Internet entschieden. Es gibt viele, also suchen Sie sie selbst und wählen Sie die richtige aus.
Ich werde Java, Apache und Tomcat auf dem gemieteten Server installieren, aber vorher die grundlegenden Informationen des Betriebssystems überprüfen. Überprüfen Sie zunächst die Version von CentOS mit dem folgenden Befehl.
cat /etc/redhat-release
Ausführungsergebnis
CentOS Linux release 7.7.1908 (Core)
Es stellt sich heraus, dass es sich um Version 7 von CentOS handelt.
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob das Betriebssystem 32-Bit oder 64-Bit ist.
arch
Ausführungsergebnis(64bit)
X86_64
Dies zeigt an, dass es 64bit ist. Im Fall von 32 Bit wird dies wie folgt angezeigt.
Ausführungsergebnis(32bit)
i686
Sie können dies auch mit dem folgenden Befehl überprüfen.
uname -a
Im Fall von CentOS 7 wird dies wie folgt angezeigt.
Beispiel für CentOS7 anzeigen(64bit)
Linux ik1-344-32350.vs.sakura.ne.jp 3.10.0-957.10.1.el7.x86_64 #1 SMP Mon Mar 18 15:06:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Als Referenz wird es im Fall von CentOS 6 wie folgt angezeigt.
Beispiel für CentOS6 anzeigen(64bit)
Linux localhost.localdomain 2.6.32-279.2.1.el6.x86_64 #1 SMP Fri Jul 20 01:55:29 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Referenz: CentOS-Versionsbestätigungsbefehl und Architekturbestätigungsbefehl
Aktualisieren Sie das Paket mit dem folgenden Befehl.
yum update
Normalerweise wird das Paket angegeben und aktualisiert, um das aktuell ausgeführte Programm nicht zu beeinträchtigen. Dieses Mal habe ich es jedoch nur gemietet und es läuft keine Anwendung. Daher habe ich alle Pakete mit "yum update" aktualisiert.
Der Befehl zum Angeben des Pakets lautet wie folgt. Normalerweise sollten Sie dies verwenden, um die Ausführung laufender Programme nicht zu beeinträchtigen.
yum update [package]
Referenz: [yum update] Aktualisiere das yum-Paket sicher
Installieren Sie java-1.8.0-openjdk, wenn Sie nur die Laufzeit installieren müssen, und java-1.8.0-openjdk-devel, wenn Sie auch die OpenJDK-Entwicklungsumgebung installieren möchten.
Führen Sie den folgenden Befehl aus, um die Java 8-Laufzeit (JDK) zu installieren.
yum install java-1.8.0-openjdk
Wenn Sie eine Entwicklungsumgebung benötigen, führen Sie den folgenden Befehl aus, um die Java 8-Entwicklungsumgebung (JDK) zu installieren. Ich habe es auf meinem PC entwickelt und auf dem Server bereitgestellt, damit ich die Entwicklungsumgebung nicht installiert habe.
yum install java-1.8.0-openjdk-devel
Überprüfen wir für alle Fälle, ob die Installation abgeschlossen ist. Geben Sie den folgenden Befehl ein. Wenn die installierte Java-Version angezeigt wird, ist die Bestätigung abgeschlossen.
Ausführungsbefehl
java -version
Ausführungsergebnis
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
Referenz: Verfahren zur Installation von Java 8 (OpenJDK) unter CentOS 7
Installieren Sie Apache mit dem folgenden Befehl.
Ausführungsbefehl
yum -y install httpd
Registrieren Sie den Dienst und starten Sie ihn.
Ausführungsbefehl
systemctl enable httpd.service
systemctl start httpd.service
Bestätigen Sie, dass der Dienst mit dem folgenden Befehl gestartet wurde.
Ausführungsbefehl
systemctl status httpd.service
Es ist in Ordnung, wenn "aktiv (laufend)" angezeigt wird.
Stellen Sie schließlich sicher, dass die Testseite (http: // <IP-Adresse>
) angezeigt wird.
Referenz: Zusammenfassung beim Erstellen einer Umgebung für Apache und Tomcat unter CentOS 7 von Sakura Cloud
Fügen Sie zunächst Tomcat als dedizierten Benutzer hinzu, um Tomcat unter Linux auszuführen.
Ausführungsbefehl
useradd -s /sbin/nologin tomcat
Verwenden Sie dann den Befehl curl, um die Apache Tomcat 9-Konsole im tar.gz-Format von der Apache Tomcat 9-Download-Seite (http://tomcat.apache.org/download-90.cgi) herunterzuladen. Ab Mai 2020 ist Version 9.0.34 die neueste Version. Geben Sie daher die folgende URL an. Bitte überprüfen Sie vor der Ausführung die URL der neuesten Version.
Ausführungsbefehl
cd ~
curl -O http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
Entpacken und platzieren Sie die heruntergeladene tar.gz-Datei. Entpacken Sie es mit dem Befehl tar und platzieren Sie es wie folgt in / opt: Machen Sie außerdem den Besitzer des entpackten Apache Tomcat, der dem zuvor erstellten Tomcat-Benutzer gehört.
Ausführungsbefehl
tar -xzvf ~/apache-tomcat-9.0.34.tar.gz
mv ~/apache-tomcat-9.0.34 /opt
chown -R tomcat:tomcat /opt/apache-tomcat-9.0.34
Ab CentOS 7 verwaltet systemd den Dienst. Hier ist Apache Tomcat 9 als Dienst registriert. Erstellen Sie zunächst einen neuen / etc / systemd / system / tomcat.service
, schreiben Sie ihn wie folgt und speichern Sie ihn. Dies ist die Dienstdefinitionsdatei.
tomcat.service
[Unit]
Description=Apache Tomcat 9
After=network.target
[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/apache-tomcat-9.0.34/tomcat.pid
RemainAfterExit=yes
ExecStart=/opt/apache-tomcat-9.0.34/bin/startup.sh
ExecStop=/opt/apache-tomcat-9.0.34/bin/shutdown.sh
ExecReStart=/opt/apache-tomcat-9.0.34/bin/shutdown.sh;/opt/apache-tomcat-9.0.34/bin/startup.sh
[Install]
WantedBy=multi-user.target
Ändern Sie die Berechtigungen der erstellten Definitionsdatei mit dem folgenden Befehl in 755:
Ausführungsbefehl
chmod 755 /etc/systemd/system/tomcat.service
Aktivieren Sie den Dienst nach dem Erstellen der Definitionsdatei mit dem folgenden Befehl.
Ausführungsbefehl
systemctl enable tomcat
Wenn Folgendes angezeigt wird, ist es OK.
Ausführungsergebnis
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
Gehen Sie schließlich zu "http: //
[Beispielanzeigebildschirm]
Wenn ein solcher Bildschirm angezeigt wird, sind die Tomcat-Installation und die Serviceregistrierung abgeschlossen.
Referenz: Verfahren zum Installieren von Apache Tomcat 9 unter CentOS 7
Verwenden Sie AJP (Apache JServ Protocol), um Apache und Tomcat zu verbinden. Verwenden Sie zur Verwendung von AJP ein Modul namens mod_proxy_ajp.
Referenz: So verbinden Sie Apache httpd und Tomcat
Httpd.conf
war in diesem Zustand, als ich Apache installiert habe.
httpd.conf (Teilauszug)
~ Ausgelassen ~
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf
~ Ausgelassen ~
Wenn Sie zu "/etc/httpd/conf.modules.d" gehen, das hier beschrieben wird, sehen Sie die folgenden 7 conf-Dateien.
01-cgi.conf
00-systemd.conf
00-proxy.conf
00-mpm.conf
00-lua.conf
00-dav.conf
00-base.conf
Wenn Sie hier "00-proxy.conf" öffnen, finden Sie folgende Einstellungen.
00-proxy.conf (Teilauszug)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Mod_proxy_ajp ist erforderlich, um AJP zu verwenden, und mod_proxy_ajp hängt vom Modul mod_proxy ab. Daher sind diese beiden Module erforderlich. Wenn die obige Einstellung in 00-proxy.conf vorhanden ist, kann das erforderliche Modul ordnungsgemäß geladen werden. Diese Module "mod_proxy.so" und "mod_proxy_ajp.so" können übrigens im Verzeichnis "/ usr / lib64 / httpd / modules" bestätigt werden. (Es gibt eine Verknüpfung zu / usr / lib64 / httpd / modules unter / etc / httpd)
Die letzte Zeile von httpd.conf enthält die folgenden Einstellungen. Wenn Sie also eine conf-Datei im Verzeichnis / etc / httpd / conf.d
erstellen, wird der Inhalt gelesen.
httpd.conf
~ Ausgelassen ~
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
Erstellen Sie eine proxy-ajp.conf
-Datei im Verzeichnis / etc / httpd / conf.d
mit den folgenden Inhalten.
cat /etc/httpd/conf.d/proxy-ajp.conf
<Location /docs/>
ProxyPass ajp://127.0.0.1:8009/docs/
</Location>
Der Port ist auf 8009 eingestellt, da Tomcat die AJP 1.3-Kommunikation auf Port 8009 akzeptiert. Die Tomcat-Einstellungen werden später veröffentlicht. Damit sind die Apache-Einstellungen abgeschlossen.
Ändern Sie / opt / apache-tomcat-9.0.34 / conf / server.xml
. Vor der Korrektur ist es wie folgt.
server.xml (vor der Änderung)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
~ Ausgelassen ~
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
Wenn der gesamte Zugriff über das Internet über Apache erfolgt, ist der Standby-Modus an Port 8080 nicht erforderlich. Kommentieren Sie ihn daher aus. Nach der Korrektur wird es wie folgt sein.
server.xml (nach Änderung)
<!--
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
~ Ausgelassen ~
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
Damit sind die Einstellungen für die Verknüpfung von Apache und Tomcat abgeschlossen.
Nach Abschluss der obigen Arbeit habe ich "http: //
Apache-Protokoll
[Sun Apr 26 14:33:39.753098 2020] [proxy:error] [pid 30144](111)Connection refused: AH00957: AJP: attempt to connect to 127.0.0.1:8009 (127.0.0.1) failed
[Sun Apr 26 14:33:39.753136 2020] [proxy:error] [pid 30144] AH00959: ap_proxy_connect_backend disabling worker for (127.0.0.1) for 60s
[Sun Apr 26 14:33:39.753141 2020] [proxy_ajp:error] [pid 30144] [client 220.100.106.105:51467] AH00896: failed to make connection to backend: 127.0.0.1
Zuerst habe ich verschiedene Dinge gegoogelt, basierend auf dem Wortlaut dieses Protokolls, aber ich hatte keine Ahnung, wie ich es lösen sollte. Als ich das Tomcat-Protokoll (catalogina.out) überprüfte, konnte ich als nächstes bestätigen, dass das folgende Protokoll bei jedem Start von Tomcat ausgegeben wurde.
Protokoll beim Starten von Tomcat 1
18-Apr-2020 16:36:49.322 SEVERE [main] org.apache.catalina.util.LifecycleBase.handleSubClassException Failed to initialize component [Connector[AJP/1.3-8009]]
org.apache.catalina.LifecycleException: Protocol handler initialization failed
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1041)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardService.initInternal(StandardService.java:533)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1057)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
at org.apache.catalina.startup.Catalina.load(Catalina.java:584)
at org.apache.catalina.startup.Catalina.load(Catalina.java:607)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:303)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
Caused by: java.net.SocketException: Protocol family unavailable
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:220)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:228)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:211)
at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1141)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1154)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:581)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1038)
... 13 more
Wenn Sie mit "Protokollfamilie nicht verfügbar" oder "Connector [AJP / 1.3-8009]" googeln, gehen Sie zu dieser Site. Ich kam an. Anscheinend passiert es, wenn die IPv6-Adresse ":: 1" auf einem Server angegeben wird, der IPv6 nicht unterstützt. Es wurde gelöst, indem ":: 1" auf "0.0.0.0" umgeschrieben wurde.
xml:server.xml("0.0.0.0"Korrigiert zu)
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
address="0.0.0.0"
port="8009"
redirectPort="8443" />
Als ich Tomcat neu startete, nachdem ich mich mit dem oben genannten "Ich bin festgefahren 1" befasst hatte, wurde als nächstes das folgende Protokoll ausgegeben.
Protokoll beim Starten von Tomcat 2
org.apache.catalina.LifecycleException: Protocol handler start failed
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1066)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:438)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)
Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true" but the secret attribute is either null or "". This combination is not valid.
at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:264)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:1063)
... 12 more
Als ich nachgeschlagen habe, gab es in server.xml ein Connector-Attribut namens "secretRequired", das standardmäßig "true" ist. Wenn true, muss ein synonymes Attribut mit dem geheimen Attribut angegeben werden. (Offizielle Website) In dieser Site wurde "secretRequired =" false "" explizit angegeben und gelöst. Wenn Sie also versuchen, dies nachzuahmen, wird es gelöst. Hat.
server.xml (secretRequired hinzugefügt)
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
address="0.0.0.0"
port="8009"
redirectPort="8443"
secretRequired="false" />
Damit sind die Tomcat-Einstellungen abgeschlossen.
Stellen Sie abschließend die auf Ihrem lokalen PC erstellte Kriegsdatei auf dem Mietserver bereit. Wenn Sie die Kriegsdatei in / opt / apache-tomcat-9.0.34 / webapps
speichern, wird sie von Tomcat automatisch für Sie bereitgestellt.
Wenn die Bereitstellung abgeschlossen ist, greifen Sie darauf zu und bestätigen Sie, dass Hello World angezeigt wird und Sie fertig sind.
das ist alles.
Recommended Posts