Tomcat Installieren: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 33: Zeile 33:
mit den Rechten des Service-Users aufgerufen:
mit den Rechten des Service-Users aufgerufen:


    xyz00-tomcat@h00:~$ tomcat10-instance-create tomcat
<syntaxhighlight lang="bash">
xyz00-tomcat@h00:~$ tomcat10-instance-create tomcat
</syntaxhighlight>


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


    xyz00-tomcat@h00:~$ cp /usr/share/tomcat10/bin/catalina.sh tomcat/bin/
<syntaxhighlight lang="bash">
xyz00-tomcat@h00:~$ cp /usr/share/tomcat10/bin/catalina.sh tomcat/bin/
</syntaxhighlight>


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:


    bin
<syntaxhighlight lang="bash">
    bin/catalina.sh
bin
    bin/setenv.sh
bin/catalina.sh
    bin/shutdown.sh
bin/setenv.sh
    bin/startup.sh
bin/shutdown.sh
    conf
bin/startup.sh
    conf/catalina.properties
conf
    conf/context.xml
conf/catalina.properties
    conf/jaspic-providers.xml
conf/context.xml
    conf/logging.properties
conf/jaspic-providers.xml
    conf/server.xml
conf/logging.properties
    conf/tomcat-users.xml
conf/server.xml
    conf/web.xml
conf/tomcat-users.xml
    logs
conf/web.xml
    policy
logs
    policy/catalina.policy
policy
    temp
policy/catalina.policy
    webapps
temp
    work
webapps
work
</syntaxhighlight>


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 65: Zeile 71:
Beispiel für eine minimale "server.xml":
Beispiel für eine minimale "server.xml":


<pre>
<syntaxhighlight lang="xml" line>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<Server port="38005" shutdown="SHUTDOWN">
<Server port="38005" shutdown="SHUTDOWN">
Zeile 90: Zeile 96:
   </Service>
   </Service>
</Server>
</Server>
</pre>
</syntaxhighlight>


Angepasst werden müssen:
Angepasst werden müssen:
Zeile 99: Zeile 105:
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:
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/
<syntaxhighlight lang="bash">
mkdir -p $HOME/webapps/hello/WEB-INF/
</syntaxhighlight>


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


<pre>
<syntaxhighlight lang="xml" line>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<web-app  
<web-app  
Zeile 112: Zeile 120:
id="WebApp_ID" version="3.0">
id="WebApp_ID" version="3.0">
</web-app>
</web-app>
</pre>
</syntaxhighlight>


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


<pre>
<syntaxhighlight lang="html" line>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<!DOCTYPE html>
Zeile 125: Zeile 133:
</body>
</body>
</html>
</html>
</pre>
</syntaxhighlight>


Nun können wir die HTTP-Requests, die an eine Domain im Paket gesendet werden, an den Tomcat weiterleiten.
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/hs-example.de/htdocs-ssl'':
Das funktioniert über eine ''.htaccess''-Datei, zum Beispiel im Verzeichnis ''~/doms/hs-example.de/htdocs-ssl'':


<pre>
<syntaxhighlight lang="apache" line>
DirectoryIndex disabled
DirectoryIndex disabled
RewriteEngine On
RewriteEngine On
Zeile 137: Zeile 145:
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*) ajp://127.0.0.1:38006/$1 [proxy,last]
RewriteRule ^(.*) ajp://127.0.0.1:38006/$1 [proxy,last]
</pre>
</syntaxhighlight>


Achtung der IP-Port 38006 muss hier wieder angepasst werden!
Achtung der IP-Port 38006 muss hier wieder angepasst werden!
Zeile 147: Zeile 155:
Der Tomcat kann über die Skripte in "~/tomcat/bin/" gestartet und gestoppt werden.
Der Tomcat kann über die Skripte in "~/tomcat/bin/" gestartet und gestoppt werden.


<pre>
<syntaxhighlight lang="bash">
cd ~/tomcat
cd ~/tomcat
./bin/startup.sh
./bin/startup.sh
</pre>
</syntaxhighlight>


Log-Ausgaben des Servers sind in "~/tomcat/logs/catalina.out" zu finden.
Log-Ausgaben des Servers sind in "~/tomcat/logs/catalina.out" zu finden.
Zeile 159: Zeile 167:
Wir legen ein Verzeichnis für die Konfiguration des ''systemd'' an und legen eine Unit-Konfiguration für einen Service dort ab:
Wir legen ein Verzeichnis für die Konfiguration des ''systemd'' an und legen eine Unit-Konfiguration für einen Service dort ab:


mkdir -p ~/.config/systemd/user
<syntaxhighlight lang="bash">
mkdir -p ~/.config/systemd/user
</syntaxhighlight>


Die Unit-Datei ''~/.config/systemd/user/tomcat.service''
Die Unit-Datei ''~/.config/systemd/user/tomcat.service''


[Unit]
<syntaxhighlight lang="ini" line>
Description=Tomcat User Service
[Unit]
Description=Tomcat User Service
[Service]
 
WorkingDirectory=%h/tomcat
[Service]
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
WorkingDirectory=%h/tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="JAVA_OPTS=-Xms256M -Xmx512M"
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=%h/tomcat/bin/catalina.sh run
Environment="JAVA_OPTS=-Xms256M -Xmx512M"
StandardOutput=file:%h/tomcat/logs/catalina.log
ExecStart=%h/tomcat/bin/catalina.sh run
StandardError=inherit
StandardOutput=file:%h/tomcat/logs/catalina.log
Restart=always
StandardError=inherit
PrivateTmp=true
Restart=always
NoNewPrivileges=true
PrivateTmp=true
NoNewPrivileges=true
[Install]
 
WantedBy=default.target
[Install]
WantedBy=default.target
</syntaxhighlight>


Auf Wunsch kann ''SystemD'' RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt ''Service'' ergänzt:
Auf Wunsch kann ''SystemD'' RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt ''Service'' ergänzt:


[Service]
<syntaxhighlight lang="ini" line>
...
[Service]
MemoryAccounting=true
...
CPUAccounting=true
MemoryAccounting=true
MemoryHigh=512M
CPUAccounting=true
MemoryMax=768M
MemoryHigh=512M
CPUQuota=50%
MemoryMax=768M
CPUQuota=50%
</syntaxhighlight>


Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien.
Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien.
Zeile 195: Zeile 209:
Dazu lege ich die Konfigurationsdatei ''.logrotate'' im $HOME-Verzeichnis an:
Dazu lege ich die Konfigurationsdatei ''.logrotate'' im $HOME-Verzeichnis an:


<pre>
<syntaxhighlight lang="bash" line>
/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log {
/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log {
   copytruncate
   copytruncate
Zeile 203: Zeile 217:
   missingok
   missingok
}
}
</pre>
</syntaxhighlight>


Für die Bereinigung der Log-Dateien noch eine ''crontab'':
Für die Bereinigung der Log-Dateien noch eine ''crontab'':


<pre>
<syntaxhighlight lang="bash" line>
PATH=/usr/local/bin:/usr/bin:/bin
PATH=/usr/local/bin:/usr/bin:/bin
HOME=/home/pacs/xyz00/users/tomcat
HOME=/home/pacs/xyz00/users/tomcat
Zeile 214: Zeile 228:
1 1 * * * /usr/sbin/logrotate -s $HOME/.logrotate.state $HOME/.logrotate
1 1 * * * /usr/sbin/logrotate -s $HOME/.logrotate.state $HOME/.logrotate
14 3 * * * /usr/bin/find $HOME/tomcat/logs -type f -mmin +10080 -delete
14 3 * * * /usr/bin/find $HOME/tomcat/logs -type f -mmin +10080 -delete
</pre>
</syntaxhighlight>


Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen.
Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen.

Aktuelle Version vom 12. Juni 2024, 10:58 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

Installation

Vorbemerkung: Mit Debian 12 ('Bookworm') wird Tomcat 10 von der Distribution mitgeliefert.

Auf den Hostsharing-Servern ist das Debian-Paket "tomcat10-user" installiert. Es stellt den Apache Tomcat Server in der Version 10.1.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:~$ tomcat10-instance-create tomcat

Ich bevorzuge das catalina.sh-Startskript zum Testen:

xyz00-tomcat@h00:~$ cp /usr/share/tomcat10/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.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)

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 ~/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 ~/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/hs-example.de/htdocs-ssl:

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

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

Dadurch ist die Mini-Anwendung unter der URL "https://hs-example.de/hello/" erreichbar.

Start des Tomcat Servers

Der Tomcat kann über die Skripte in "~/tomcat/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, konfigurieren wir den Prozessmonitor systemd entsprechend.

Wir legen ein Verzeichnis für die Konfiguration des systemd an und legen eine Unit-Konfiguration für einen Service dort ab:

mkdir -p ~/.config/systemd/user

Die Unit-Datei ~/.config/systemd/user/tomcat.service

[Unit]
Description=Tomcat User Service

[Service]
WorkingDirectory=%h/tomcat
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="JAVA_OPTS=-Xms256M -Xmx512M"
ExecStart=%h/tomcat/bin/catalina.sh run
StandardOutput=file:%h/tomcat/logs/catalina.log
StandardError=inherit
Restart=always
PrivateTmp=true
NoNewPrivileges=true

[Install]
WantedBy=default.target

Auf Wunsch kann SystemD RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt Service ergänzt:

[Service]
...
MemoryAccounting=true
CPUAccounting=true
MemoryHigh=512M
MemoryMax=768M
CPUQuota=50%

Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien.

Dazu lege ich die Konfigurationsdatei .logrotate im $HOME-Verzeichnis an:

/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log {
   copytruncate
   compress
   rotate 5
   daily
   missingok
}

Für die Bereinigung der Log-Dateien noch eine crontab:

PATH=/usr/local/bin:/usr/bin:/bin
HOME=/home/pacs/xyz00/users/tomcat
MAILTO=ich@meine-domain.de
# m h  dom mon dow   command
1 1 * * * /usr/sbin/logrotate -s $HOME/.logrotate.state $HOME/.logrotate
14 3 * * * /usr/bin/find $HOME/tomcat/logs -type f -mmin +10080 -delete

Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen.

Links