Je voulais acquérir des connaissances sur Linux, j'ai donc essayé de louer un serveur Linux, d'installer JDK, Apache, Tomcat et de déployer une application Java (niveau Hello World) réalisée par moi-même sur mon PC local. Dans cet article, j'ai écrit ce que j'ai fait à l'époque et comment j'ai résolu le problème. Le cloud est extrêmement répandu ces jours-ci, mais je pense que le cloud est une boîte trop noire. Je n'ai pas les bases de Linux (infrastructure) de toute façon, donc je vais commencer par louer un serveur Linux simple au lieu du cloud et y déployer des applications. À l'avenir, je vais étendre l'application et essayer de la faire fonctionner moi-même. Je veux apprendre les bases de Linux grâce à de telles tentatives. Dans cet esprit, j'ai essayé quelque chose comme ça. Cette fois, nous devons déployer l'application, et l'expansion et l'exploitation sont l'avenir. J'ai déployé l'application au niveau Hello World, je n'écrirai donc pas sur Java. J'ai loué un serveur Linux, installé Apache et Tomcat, je l'ai configuré et j'ai frappé l'URL, et Hello World est sorti! C'est à peu près ça.
Louez un serveur de location pour les particuliers qui peuvent utiliser Java. Cette fois, j'ai décidé d'utiliser Sakura Internet. Il y en a beaucoup, alors cherchez-les vous-même et choisissez la bonne.
Je vais désormais installer Java, Apache et Tomcat sur le serveur loué, mais avant cela, vérifiez les informations de base du système d'exploitation. Tout d'abord, vérifiez la version de CentOS avec la commande suivante.
cat /etc/redhat-release
Résultat d'exécution
CentOS Linux release 7.7.1908 (Core)
Il s'avère que c'est la version 7 de CentOS.
Utilisez la commande suivante pour vérifier si le système d'exploitation est 32 bits ou 64 bits.
arch
Résultat d'exécution(64bit)
X86_64
Cela indique qu'il s'agit de 64 bits. Dans le cas du 32 bits, il s'affiche comme suit.
Résultat d'exécution(32bit)
i686
Vous pouvez également vérifier avec la commande suivante.
uname -a
Dans le cas de CentOS 7, il s'affiche comme suit.
Exemple d'affichage de CentOS7(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
Pour référence, dans le cas de CentOS 6, il est affiché comme suit.
Exemple d'affichage de CentOS6(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
Référence: Commande de confirmation de version CentOS et commande de confirmation d'architecture
Mettez à jour le package avec la commande suivante.
yum update
Normalement, le package est spécifié et mis à jour afin de ne pas affecter le programme en cours d'exécution. Cependant, cette fois, je viens de le louer et aucune application n'est en cours d'exécution, j'ai donc mis à jour tous les packages avec yum update
.
La commande pour spécifier le package est la suivante. Normalement, vous devriez l'utiliser pour éviter d'affecter les programmes en cours d'exécution.
yum update [package]
Référence: [yum update] Mettre à jour en toute sécurité le package yum
Installez java-1.8.0-openjdk si vous avez seulement besoin d'installer le runtime, et java-1.8.0-openjdk-devel si vous souhaitez également installer l'environnement de développement OpenJDK.
Exécutez la commande suivante pour installer le runtime Java 8 (JDK).
yum install java-1.8.0-openjdk
Si vous avez besoin d'un environnement de développement, exécutez la commande suivante pour installer l'environnement de développement java 8 (JDK). Je l'ai développé sur mon PC et l'ai déployé sur le serveur, donc je n'ai pas installé l'environnement de développement.
yum install java-1.8.0-openjdk-devel
Au cas où, vérifions si l'installation est terminée. Tapez la commande suivante et si la version Java installée est affichée, la confirmation est terminée.
Commande d'exécution
java -version
Résultat d'exécution
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)
Référence: Procédure d'installation yum de Java 8 (OpenJDK) sur CentOS 7
Installez Apache avec la commande suivante.
Commande d'exécution
yum -y install httpd
Enregistrez le service et démarrez-le.
Commande d'exécution
systemctl enable httpd.service
systemctl start httpd.service
Confirmez que le service est démarré avec la commande suivante.
Commande d'exécution
systemctl status httpd.service
Si ʻactive (running) s'affiche, c'est OK. Enfin, assurez-vous que la page de test (
http: //
Référence: Résumé lors de la création d'un environnement pour Apache et Tomcat sur CentOS 7 de Sakura Cloud
Tout d'abord, ajoutez tomcat en tant qu'utilisateur dédié pour exécuter Tomcat sous Linux.
Commande d'exécution
useradd -s /sbin/nologin tomcat
Ensuite, utilisez la commande curl pour télécharger l'unité principale d'Apache Tomcat 9 au format tar.gz depuis la page de téléchargement d'Apache Tomcat 9. Depuis mai 2020, la version 9.0.34 est la dernière version, spécifiez donc l'URL suivante. Veuillez vérifier l'URL de la dernière version avant de l'exécuter.
Commande d'exécution
cd ~
curl -O http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
Décompressez et placez le fichier tar.gz téléchargé. Décompressez-le avec la commande tar et placez-le dans / opt comme suit: De plus, faites en sorte que le propriétaire de l'Apache Tomcat décompressé appartienne à l'utilisateur tomcat créé précédemment.
Commande d'exécution
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
À partir de CentOS 7, le service est géré par systemd. Ici, Apache Tomcat 9 est enregistré en tant que service. Tout d'abord, créez un nouveau / etc / systemd / system / tomcat.service
, écrivez-le comme suit et enregistrez-le. Il s'agit du fichier de définition de service.
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
Modifiez les autorisations du fichier de définition créé en 755 avec la commande suivante:
Commande d'exécution
chmod 755 /etc/systemd/system/tomcat.service
Après avoir créé le fichier de définition, activez le service avec la commande suivante.
Commande d'exécution
systemctl enable tomcat
Si ce qui suit s'affiche, c'est OK.
Résultat d'exécution
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /etc/systemd/system/tomcat.service.
Enfin, allez sur http: // <adresse IP>: 8080
et vérifiez que vous voyez la page de test Tomcat.
[Exemple d'écran d'affichage]
Si un tel écran s'affiche, l'installation de Tomcat et l'enregistrement du service sont terminés.
Référence: Procédure pour installer Apache Tomcat 9 sur CentOS 7
Utilisez AJP (Apache JServ Protocol) pour lier Apache et Tomcat. Pour utiliser AJP, utilisez un module appelé mod_proxy_ajp.
Référence: Comment lier Apache httpd et Tomcat
Httpd.conf
était dans cet état lorsque j'ai installé apache.
httpd.conf (extrait partiel)
~ Omis ~
#
# 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
~ Omis ~
Si vous allez dans "/etc/httpd/conf.modules.d" décrit ici, vous pouvez voir les 7 fichiers de configuration suivants.
01-cgi.conf
00-systemd.conf
00-proxy.conf
00-mpm.conf
00-lua.conf
00-dav.conf
00-base.conf
Si vous ouvrez "00-proxy.conf" dans ce champ, vous trouverez les paramètres suivants.
00-proxy.conf (extrait partiel)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
Mod_proxy_ajp est requis pour utiliser AJP, et mod_proxy_ajp dépend du module mod_proxy. Par conséquent, ces deux modules sont nécessaires. S'il existe le paramètre ci-dessus dans 00-proxy.conf, le module requis peut être chargé correctement.
Au fait, ces modules "mod_proxy.so" et "mod_proxy_ajp.so" peuvent être confirmés en allant dans le répertoire / usr / lib64 / httpd / modules
.
(Il existe un raccourci vers / usr / lib64 / httpd / modules sous / etc / httpd)
La dernière ligne de httpd.conf a les paramètres suivants, donc si vous créez un fichier conf dans le répertoire / etc / httpd / conf.d
, le contenu sera lu.
httpd.conf
~ Omis ~
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
Créez un fichier proxy-ajp.conf
dans le répertoire / etc / httpd / conf.d
avec le contenu suivant.
cat /etc/httpd/conf.d/proxy-ajp.conf
<Location /docs/>
ProxyPass ajp://127.0.0.1:8009/docs/
</Location>
Le port est défini sur 8009 car Tomcat accepte la communication AJP 1.3 sur le port 8009. Les paramètres Tomcat sortiront plus tard. Ceci termine les paramètres Apache.
Modifiez / opt / apache-tomcat-9.0.34 / conf / server.xml
. Avant la correction, c'est comme suit.
server.xml (avant modification)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
~ Omis ~
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
Si tous les accès depuis Internet se font via Apache, la mise en veille sur le port 8080 n'est pas nécessaire, alors commentez-la. Après la correction, ce sera comme suit.
server.xml (après modification)
<!--
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
~ Omis ~
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
Ceci termine les paramètres pour lier Apache et Tomcat.
Après avoir terminé le travail ci-dessus, j'ai entré http: // <adresse IP> / docs
dans le navigateur, mais j'ai eu une erreur 503 et je n'ai pas pu y accéder. Lorsque j'ai vérifié le journal Apache (error_log), le journal suivant était affiché.
Journal Apache
[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
Au début, j'ai recherché diverses choses sur Google en me basant sur le libellé de ce journal, mais je ne savais pas comment le résoudre. Ensuite, lorsque j'ai vérifié le journal Tomcat (catalina.out), j'ai pu confirmer que le journal suivant était sorti à chaque fois que j'ai démarré Tomcat.
Journal au démarrage de 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
Si vous recherchez sur Google avec "Famille de protocoles non disponible" ou "Connecteur [AJP / 1.3-8009]", accédez à ce site Je suis arrivé. Apparemment, cela se produit lorsque l'adresse IPv6 ":: 1" est spécifiée sur un serveur qui ne prend pas en charge IPv6. Il a été résolu en réécrivant ":: 1" en "0.0.0.0".
xml:server.xml("0.0.0.0"Corrigé en)
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
address="0.0.0.0"
port="8009"
redirectPort="8443" />
Quand j'ai redémarré Tomcat après avoir traité le "I got stuck 1" ci-dessus, le journal suivant a été produit ensuite.
Connectez-vous au démarrage de 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
Lorsque je l'ai recherché, il y avait un attribut Connector dans server.xml appelé secretRequired
, qui par défaut est true. Si c'est vrai, il semble nécessaire de spécifier un attribut synonyme avec l'attribut secret. (Site officiel)
Dans ce site, "secretRequired =" false "" a été explicitement spécifié et résolu, donc si vous essayez d'imiter cela, il sera résolu. Fait.
server.xml (ajouté secretRequired)
<!-- 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" />
Ceci termine les paramètres Tomcat.
Enfin, déployez le fichier war créé sur votre PC local sur le serveur de location. Si vous stockez le fichier war dans / opt / apache-tomcat-9.0.34 / webapps
, Tomcat le déploiera automatiquement pour vous.
Une fois le déploiement terminé, accédez-y et confirmez que Hello World apparaît, et vous avez terminé.
c'est tout.