Tomcat Installieren: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
(Schlagworte Tomcat Java Hosting)
(Anpassung für Tomcat9.0.x)
Zeile 13: Zeile 13:
Dazu muss für jede Tomcat-Instanz die Option "Betrieb eines eigenen Serverdienstes" gebucht werden. Im Bereich des Shared Hosting ist die Option kostenpflichtig.  
Dazu muss für jede Tomcat-Instanz die Option "Betrieb eines eigenen Serverdienstes" gebucht werden. Im Bereich des Shared Hosting ist die Option kostenpflichtig.  


Diese Anleitung dokumentiert die Installation des Apache Tomcat Servers als Service-User in einem WEB-Paket bei Hostsharing.  Mit der Einrichtung der Option "eigener Serverdienst" werden für die Paket-IP-Adresse einer oder mehrere IP-Ports reserviert. An diese Ports wird der eigene Serverdienst (also der Tomcat-Server) auf der paketeigenen IP-Adresse gebunden.
Diese Anleitung dokumentiert die Installation des Apache Tomcat Servers als Service-User in einem WEB-Paket bei Hostsharing.  Mit der Einrichtung der Option "eigener Serverdienst" werden für die Paket-IP-Adresse einer oder mehrere IP-Ports reserviert. An diese Ports wird der eigene Serverdienst (also der Tomcat-Server) am Localhost-Interface gebunden.


Geben Sie bei der Bestellung der Option "Eigener Serverdienst" an:
Geben Sie bei der Bestellung der Option "Eigener Serverdienst" an:


# den Service User, mit dessen Rechten der Tomcat-Dienst laufen soll (also zum Beispiel "xyz00-tomcat")
# den Service User, mit dessen Rechten der Tomcat-Dienst laufen soll (also zum Beispiel "xyz00-tomcat")
# wieviele IP-Ports reserviert werden sollen (in der folgenden Anleitung verwenden wir einen nicht-privilegierten Port: 30001, mehrere sind ggf. sinnvoll und möglich
# wieviele IP-Ports reserviert werden sollen (in der folgenden Anleitung verwenden wir drei nicht-privilegierte Ports:  
* 38005 als "Shutdown"-Schnittstelle
* 38006 für eine AJP-Listener
* 38008 für den HTTP-Listener des Monit-Prozessmonitors


== Installation ==  
== Installation ==  


Auf den Hostsharing-Servern ist das Debian-Paket "tomcat8-user" installiert. Es stellt den  
Auf den Hostsharing-Servern ist das Debian-Paket "tomcat9-user" installiert. Es stellt den  
Apache Tomcat Server in der Version 8.5.x für den Betrieb als normaler (nicht privilegierter) User bereit.
Apache Tomcat Server in der Version 9.0.x für den Betrieb als normaler (nicht privilegierter) User bereit.
Dabei wird die zentral installierte Tomcat-Software benutzt, die über Betriebssystem-Updates mit Sicherheits-Updates versorgt wird.
Dabei wird die zentral installierte Tomcat-Software benutzt, die über Betriebssystem-Updates mit Sicherheits-Updates versorgt wird.


Zeile 29: Zeile 32:
mit den Rechten des Service-Users aufgerufen:
mit den Rechten des Service-Users aufgerufen:


     xyz00-tomcat@h00:~$ tomcat8-instance-create tomcat
     xyz00-tomcat@h00:~$ tomcat9-instance-create tomcat


Ich bevorzuge das catalina.sh-Startskript zum Testen:
Ich bevorzuge das catalina.sh-Startskript zum Testen:


     xyz00-tomcat@h00:~$ cp /usr/share/tomcat8/bin/catalina.sh tomcat/bin/
     xyz00-tomcat@h00:~$ cp /usr/share/tomcat9/bin/catalina.sh tomcat/bin/


Dieser Befehl legt ein Verzeichnis "tomcat" mit der üblichen Dateistruktur für einen Tomcat-Server an:
Dieser Befehl legt ein Verzeichnis "tomcat" mit der üblichen Dateistruktur für einen Tomcat-Server an:


     tomcat/
     bin
     tomcat/conf/
    bin/catalina.sh
     tomcat/conf/server.xml
     bin/setenv.sh
     tomcat/conf/context.xml
    bin/shutdown.sh
     tomcat/conf/logging.properties
     bin/startup.sh
     tomcat/conf/tomcat-users.xml
    conf
     tomcat/conf/catalina.properties
    conf/Catalina
     tomcat/conf/web.xml
     conf/Catalina/localhost
     tomcat/logs/
    conf/catalina.properties
    tomcat/webapps/
     conf/context.xml
     tomcat/work/
     conf/jaspic-providers.xml
     tomcat/temp/
     conf/logging.properties
     tomcat/bin/
     conf/server.xml
     tomcat/bin/catalina.sh
     conf/tomcat-users.xml
     tomcat/bin/setenv.sh
     conf/web.xml
     tomcat/bin/startup.sh
     logs
     tomcat/bin/shutdown.sh
     policy
     policy/catalina.policy
     temp
     webapps
     work


In der Hauptsache muss die Konfigurationsdatei "server.xml" im Verzeichnis "~/tomcat/conf/" angepasst werden.
In der Hauptsache muss die Konfigurationsdatei "server.xml" im Verzeichnis "~/tomcat/conf/" angepasst werden.
Zeile 61: Zeile 68:
<pre>
<pre>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
 
<Server port="38005" shutdown="SHUTDOWN">
<Server port="-1" shutdown="SHUTDOWN">
 
   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
Zeile 69: Zeile 74:
   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
   <GlobalNamingResources>
   <GlobalNamingResources>
     <Resource name="UserDatabase" auth="Container"
     <Resource name="UserDatabase" auth="Container"
               type="org.apache.catalina.UserDatabase" description="User database"
               type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
               pathname="conf/tomcat-users.xml" />
               pathname="conf/tomcat-users.xml" />
   </GlobalNamingResources>
   </GlobalNamingResources>
   <Service name="Catalina">
   <Service name="Catalina">
 
     <Connector protocol="AJP/1.3" address="127.0.0.1" port="38006" redirectPort="443" secretRequired="false" />
     <Connector address="localhost" port="30001" protocol="AJP/1.3" redirectPort="443" />
 
     <Engine name="Catalina" defaultHost="localhost">
     <Engine name="Catalina" defaultHost="localhost">
       <Realm className="org.apache.catalina.realm.LockOutRealm">
       <Realm className="org.apache.catalina.realm.LockOutRealm">
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
         <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
       </Realm>
       </Realm>
 
       <Host name="localhost"  appBase="../webapps" unpackWARs="true" autoDeploy="true"></Host>
       <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
      </Host>
 
     </Engine>
     </Engine>
   </Service>
   </Service>
Zeile 95: Zeile 93:
</pre>
</pre>


Angepasst werden muss:
Angepasst werden müssen:
* der IP-Port (im Beispiel 30001 am localhost Interface)
* die beiden IP-Ports (im Beispiel 38005 und 38006 am Localhost-Interface)


In der Datei "~/tomcat/bin/setenv.sh" sollte die Umgebungs-Variable "CATALINA_PID"
Das Startskript kann durch Anpassung der Datei ''setenv.sh'' angepasst werden. Für den Monit-Prozessmonitor setze ich insbesondere die Variable ''CATALINA_PID''. Mit ''JAVA_HOME'' sorge ich dafür, dass Java 11 zum Einsatz kommt:
gesetzt werden. Das sorgt dafür, dass der Tomcat-Dienst über das Shutdown-Skript
gestoppt wird, obwohl in der "server.xml"-Konfiguration kein Shutdown-Port definiert
ist.


Also etwa:
<pre>
<pre>
CATALINA_PID=/home/pacs/xyz00/users/tomcat/tomcat/work/catalina.pid
#!/bin/sh
#
HOME=/home/pacs/xyz00/users/tomcat
CATALINA_HOME=/usr/share/tomcat9
CATALINA_PID=$HOME/tomcat/work/catalina.pid
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
PATH=$JAVA_HOME/bin:$PATH
# Default Java options
if [ -z "$JAVA_OPTS" ]; then
JAVA_OPTS="-Djava.awt.headless=true"
fi
</pre>
</pre>
am Anfang der Datei (etwa Zeile 4 oder 5) ergänzen.


== Deployment einer Anwendung ==
== Deployment einer Anwendung ==


In der Beispiel-Konfiguration wurde das Verzeichnis "~/tomcat/webapps/" für die Anwendungen konfiguriert.
In der Beispiel-Konfiguration wurde das Verzeichnis ''$HOME/webapps/'' für die Anwendungen konfiguriert. Wir legen dieses Verzeichnis an und kopieren eine minimale Anwendung hinein:
Wir legen dieses Verzeichnis an und kopieren eine minimale Anwendung hinein:


     mkdir -p ~/tomcat/webapps/hello/WEB-INF/
     mkdir -p $HOME/webapps/hello/WEB-INF/


Dort legen wir die Datei ~/tomcat/webapps/hello/WEB-INF/web.xml mit folgendem Inhalt an:
Dort legen wir die Datei ~/tomcat/webapps/hello/WEB-INF/web.xml mit folgendem Inhalt an:
Zeile 126: Zeile 128:
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
id="WebApp_ID" version="3.0">
id="WebApp_ID" version="3.0">
</web-app>
</web-app>
</pre>
</pre>

Version vom 15. Juni 2020, 17:49 Uhr

Apache Tomcat installieren

Allgemein

Apache Tomcat ist ein Webserver (HTTP-Server), der in der Programmiersprache Java entwickelt ist. Er dient in erster Linie dazu, dynamische Web-Anwendungen zu betreiben, die ebenfalls in Java programmiert sind. Basis-Technologien sind Java-Servlets und Java Server Pages (JSP).

Mit Hilfe von Apache Tomcat ist bei Hostsharing das Hosting von komplexen Java Web-Applikationen problemlos möglich.

Spezielle Installation bei Hostsharing

In jedem dynamischen Webhosting-Paket der Hostsharing eG können einer (oder mehrere) Tomcat-Webserver betrieben werden.

Dazu muss für jede Tomcat-Instanz die Option "Betrieb eines eigenen Serverdienstes" gebucht werden. Im Bereich des Shared Hosting ist die Option kostenpflichtig.

Diese Anleitung dokumentiert die Installation des Apache Tomcat Servers als Service-User in einem WEB-Paket bei Hostsharing. Mit der Einrichtung der Option "eigener Serverdienst" werden für die Paket-IP-Adresse einer oder mehrere IP-Ports reserviert. An diese Ports wird der eigene Serverdienst (also der Tomcat-Server) am Localhost-Interface gebunden.

Geben Sie bei der Bestellung der Option "Eigener Serverdienst" an:

  1. den Service User, mit dessen Rechten der Tomcat-Dienst laufen soll (also zum Beispiel "xyz00-tomcat")
  2. wieviele IP-Ports reserviert werden sollen (in der folgenden Anleitung verwenden wir drei nicht-privilegierte Ports:
  • 38005 als "Shutdown"-Schnittstelle
  • 38006 für eine AJP-Listener
  • 38008 für den HTTP-Listener des Monit-Prozessmonitors

Installation

Auf den Hostsharing-Servern ist das Debian-Paket "tomcat9-user" installiert. Es stellt den Apache Tomcat Server in der Version 9.0.x für den Betrieb als normaler (nicht privilegierter) User bereit. Dabei wird die zentral installierte Tomcat-Software benutzt, die über Betriebssystem-Updates mit Sicherheits-Updates versorgt wird.

Für die Installation der Konfigurations-Dateien in Heimat-Verzeichnis des Benutzers wird folgender Befehl mit den Rechten des Service-Users aufgerufen:

   xyz00-tomcat@h00:~$ tomcat9-instance-create tomcat

Ich bevorzuge das catalina.sh-Startskript zum Testen:

   xyz00-tomcat@h00:~$ cp /usr/share/tomcat9/bin/catalina.sh tomcat/bin/

Dieser Befehl legt ein Verzeichnis "tomcat" mit der üblichen Dateistruktur für einen Tomcat-Server an:

   bin
   bin/catalina.sh
   bin/setenv.sh
   bin/shutdown.sh
   bin/startup.sh
   conf
   conf/Catalina
   conf/Catalina/localhost
   conf/catalina.properties
   conf/context.xml
   conf/jaspic-providers.xml
   conf/logging.properties
   conf/server.xml
   conf/tomcat-users.xml
   conf/web.xml
   logs
   policy
   policy/catalina.policy
   temp
   webapps
   work

In der Hauptsache muss die Konfigurationsdatei "server.xml" im Verzeichnis "~/tomcat/conf/" angepasst werden.

Beispiel für eine minimale "server.xml":

<?xml version="1.0" encoding="UTF-8"?>
<Server port="38005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector protocol="AJP/1.3" address="127.0.0.1" port="38006" redirectPort="443" secretRequired="false" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="../webapps" unpackWARs="true" autoDeploy="true"></Host>
    </Engine>
  </Service>
</Server>

Angepasst werden müssen:

  • die beiden IP-Ports (im Beispiel 38005 und 38006 am Localhost-Interface)

Das Startskript kann durch Anpassung der Datei setenv.sh angepasst werden. Für den Monit-Prozessmonitor setze ich insbesondere die Variable CATALINA_PID. Mit JAVA_HOME sorge ich dafür, dass Java 11 zum Einsatz kommt:

#!/bin/sh
#
HOME=/home/pacs/xyz00/users/tomcat
CATALINA_HOME=/usr/share/tomcat9
CATALINA_PID=$HOME/tomcat/work/catalina.pid
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
PATH=$JAVA_HOME/bin:$PATH
# Default Java options
if [ -z "$JAVA_OPTS" ]; then
	JAVA_OPTS="-Djava.awt.headless=true"
fi

Deployment einer Anwendung

In der Beispiel-Konfiguration wurde das Verzeichnis $HOME/webapps/ für die Anwendungen konfiguriert. Wir legen dieses Verzeichnis an und kopieren eine minimale Anwendung hinein:

   mkdir -p $HOME/webapps/hello/WEB-INF/

Dort legen wir die Datei ~/tomcat/webapps/hello/WEB-INF/web.xml mit folgendem Inhalt an:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
	id="WebApp_ID" version="3.0">
</web-app>

Dazu eine einfache JSP-Datei ~/tomcat/webapps/hello/index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="de-de">
<body>
<h1>Hallo Welt</h1>
<p>Java Version: <%= System.getProperty("java.version")  %></p>
</body>
</html>

Nun können wir die HTTP-Requests, die an eine Domain im Paket gesendet werden, an den Tomcat weiterleiten. Das funktioniert über eine ".htaccess"-Datei, zum Beispiel im Verzeichnis "~/doms/example.org/htdocs":

DirectoryIndex disabled
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*) ajp://localhost:30001/$1 [proxy,last]

Achtung der IP-Port 30001 muss hier wieder angepasst werden!

Dadurch ist die Mini-Anwendung unter der URL "http://examples.org/hello/" erreichbar.

Start des Tomcat Servers

Der Tomcat kann über die Skripte in "~/tomcat7/bin/" gestartet und gestoppt werden.

cd ~/tomcat
./bin/startup.sh

Log-Ausgaben des Servers sind in "~/tomcat/logs/catalina.out" zu finden.

Damit der Tomcat bei einem Reboot der Hostsharing-Server automatisch gestartet wird, kann "monit" als einfaches Überwachungswerkzeug genutzt werden. Ein Anleitung dazu gibt es in diesem Wiki: Monit_installieren Die Anleitung bezieht sich auf einen eigenen Apache-Webserver und muss entsprechend für Tomcat adaptiert werden.

Links