Jusqu'à ce que vous installiez Apache et Tomcat sur Linux (CentOS) et déployez des applications Java

introduction

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.

Ce que j'ai réellement fait

Serveur de location pour particuliers

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.

Vérification du système d'exploitation

Vérifiez la version de CentOS

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.

Vérifiez l'architecture (si le système d'exploitation est 32 bits ou 64 bits)

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

Mise à jour du package

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

Installation de Java 8 (OpenJDK)

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.

Installation du runtime Java 8 (JDK)

Exécutez la commande suivante pour installer le runtime Java 8 (JDK). yum install java-1.8.0-openjdk

Installation de l'environnement de développement java 8 (JDK)

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

Confirmation de la fin de l'installation

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

Installation d'Apache

Installez Apache et inscrivez-vous au service

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: // `) est affichée.

Référence: Résumé lors de la création d'un environnement pour Apache et Tomcat sur CentOS 7 de Sakura Cloud

Installation de Tomcat

Installation d'Apache Tomcat 9

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

Création et enregistrement de services

À 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] image.png

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

Coopération entre Apache et Tomcat

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

paramètres Apache

Charger proxy_module et proxy_ajp_module

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)

Paramètres ProxyPass

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.

Paramètres Tomcat

Modifier server.xml

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.

Addictif 1

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" />

Addictif 2

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.

Déployer la guerre

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.

référence

Recommended Posts

Jusqu'à ce que vous installiez Apache et Tomcat sur Linux (CentOS) et déployez des applications Java
Jusqu'à ce que vous installiez Arch Linux sur VMware
Installez tomcat 5.5 sur Amazon Linux.
Pour déployer des applications Java sur VPS (installation / liaison Apache / Tomcat)
Installer Oracle Java8 sur Amazon Linux2
Installez java (Oracle JDK14) sur CentOS7
Jusqu'à ce que matplotlib soit installé et exécuté
Installez wsl2 et master linux sous Windows
Installer et lancer k3s sur Manjaro Linux
Installer et configurer le serveur TigerVNC sous Linux
Comment installer Apache (httpd) sur CentOS7
Comment installer Apache (httpd) sur CentOS8
Installez pyenv et rbenv à l'échelle du système sur CentOS
Jusqu'à ce que vous installiez Caffe et exécutiez l'exemple
Jusqu'à ce que vous créiez une clé USB de démarrage Ubuntu sur votre Macbook et installiez Ubuntu sur votre Thinkpad
Jusqu'à ce que Python soit installé avec pythonbrew et que Flask s'exécute sur le serveur WSGI
Jusqu'à ce que vous installiez Anaconda pour l'analyse des données sur votre Mac et que vous lanciez l'IDE
Installez Apache Tomcat 9 sur Ubuntu 19.10 Eoan Ermine Hello World
Procédure d'installation manuelle de Java (jdk1.8) sous Linux (CentOS7)
Installez Apache 2.4 sur Ubuntu 19.10 Eoan Ermine et exécutez CGI
Comment installer Git GUI et Gitk sur CentOS
Créer un serveur HTTP Apache et Wildfly sur Oracle Linux 8
Jusqu'à ce que vous installiez Gauge et exécutiez l'exemple officiel
Compilez et installez MySQL-python pour python2.7 sur Amazon Linux
Installez Docker sur Arch Linux et exécutez-le à distance
Installez Faiss sur CentOS 7
Installez numba sur CentOS 7.2
Installez Python3.4 sur CentOS 6.6
Intégrez Apache et Tomcat
Jusqu'à ce que vous installiez MySQL-python
Installez mecab-python sur CentOS
Installez Python 2.7.3 sur CentOS 5.4
Installez awscli sur centos7
Installer Chainer sur CentOS 6.7
[Note personnelle] Installez la dernière version de Java sur Amazon Linux qui contient déjà Java et changez de version
Jusqu'à ce que vous créiez Python Virtualenv sur Windows et lanciez Jupyter
Comment intégrer Apache httpd 2.4 et Tomcat 9 sur Cent OS 8
Installer Linux sur Chromebox
Jusqu'à docker-compose sur CentOS7
Installez Tomcat 9 sur Cent OS 8
Installez la série ImageMagick-6.2.x sur CentOS7.7
Installez Python 3.8 sur CentOS 7 (SCL)
L'installation d'Apache échoue sur CentOS 8.2
Installez JDK sur Linux
Enregistrement et lecture sous Linux
Installez Python 3.7 et Django 3.0 (CentOS)
Installez Chrome sur la série CentOS 7
Installez Python 3.8 sur CentOS 8 (AppStream)
Installation de Homebrew sur Amazon Linux 2
[MariaDB] Installez MariaDB sous Linux et créez une base de données et un utilisateur opérationnel.
Étapes pour créer un utilisateur général dans CentOs et pouvoir exécuter la commande sudo (Remarque)