Tomcat Installieren: Unterschied zwischen den Versionen
(Software in /opt, Versionen aktualisiert) |
K (Links: Monit raus) |
||
(64 dazwischenliegende Versionen von 10 Benutzern werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
== Allgemein == | == Allgemein == | ||
[http://tomcat.apache.org/ 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 [http://de.wikipedia.org/wiki/Servlet Java-Servlets] und [http://de.wikipedia.org/wiki/JSP 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: | |||
# 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 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: | |||
<syntaxhighlight lang="bash"> | |||
xyz00-tomcat@h00:~$ tomcat10-instance-create tomcat | |||
</syntaxhighlight> | |||
Ich bevorzuge das catalina.sh-Startskript zum Testen: | |||
<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: | |||
= | <syntaxhighlight lang="bash"> | ||
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 | |||
</syntaxhighlight> | |||
In der Hauptsache muss die Konfigurationsdatei "server.xml" im Verzeichnis "~/tomcat/conf/" angepasst werden. | |||
Beispiel für eine minimale "server.xml": | |||
==== | <syntaxhighlight lang="xml" line> | ||
<?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> | |||
</syntaxhighlight> | |||
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: | |||
= | <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: | |||
=== | <syntaxhighlight lang="xml" line> | ||
<?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> | |||
</syntaxhighlight> | |||
Dazu eine einfache JSP-Datei ~/webapps/hello/index.jsp: | |||
<syntaxhighlight lang="html" line> | |||
<%@ 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> | |||
</syntaxhighlight> | |||
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'': | |||
<syntaxhighlight lang="apache" line> | |||
DirectoryIndex disabled | |||
RewriteEngine On | |||
RewriteBase / | |||
RewriteCond %{REQUEST_FILENAME} !-f | |||
RewriteCond %{REQUEST_FILENAME} !-l | |||
RewriteRule ^(.*) ajp://127.0.0.1:38006/$1 [proxy,last] | |||
</syntaxhighlight> | |||
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. | |||
<syntaxhighlight lang="bash"> | |||
cd ~/tomcat | |||
./bin/startup.sh | |||
</syntaxhighlight> | |||
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: | |||
<syntaxhighlight lang="bash"> | |||
mkdir -p ~/.config/systemd/user | |||
</syntaxhighlight> | |||
Die Unit-Datei ''~/.config/systemd/user/tomcat.service'' | |||
<syntaxhighlight lang="ini" line> | |||
[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 | |||
</syntaxhighlight> | |||
Auf Wunsch kann ''SystemD'' RAM- und CPU-Ressourcen begrenzen. Dazu wird der Abschnitt ''Service'' ergänzt: | |||
=== | <syntaxhighlight lang="ini" line> | ||
[Service] | |||
... | |||
MemoryAccounting=true | |||
CPUAccounting=true | |||
MemoryHigh=512M | |||
MemoryMax=768M | |||
CPUQuota=50% | |||
</syntaxhighlight> | |||
Die | Die letzte Aufgabe ist das Einrichten der Bereinigung für die Log-Dateien. | ||
Dazu lege ich die Konfigurationsdatei ''.logrotate'' im $HOME-Verzeichnis an: | |||
<syntaxhighlight lang="bash" line> | |||
/home/pacs/xyz00/users/tomcat/tomcat/logs/catalina.log { | |||
copytruncate | |||
compress | |||
rotate 5 | |||
daily | |||
missingok | |||
} | |||
</syntaxhighlight> | |||
Für die Bereinigung der Log-Dateien noch eine ''crontab'': | |||
<syntaxhighlight lang="bash" line> | |||
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 | |||
</syntaxhighlight> | |||
Dann gehen wir daran unsere Anwendungen im Tomcat zu deployen. | |||
== Links == | |||
*[http://tomcat.apache.org/ Apache Tomcat Homepage (Englisch)] | |||
*[http://tomcat.apache.org/tomcat-9.0-doc/index.html Apache Tomcat Dokumentation (Version 9.0, Englisch)] | |||
*[http://wiki.apache.org/tomcat/FrontPage Apache Tomcat Wiki (Englisch)] | |||
*[https://github.com/tpokorra/Hostsharing-Ansible-Tomcat Ansible Playbook für Hostsharing] | |||
---- | ---- | ||
[[Kategorie:HSDoku]] | [[Kategorie:HSDoku]] | ||
[[Kategorie:Installationsanleitungen]] | [[Kategorie:Installationsanleitungen]] | ||
[[Kategorie: | [[Kategorie:Ansible Playbook]] | ||
[[Kategorie:Software]] | |||
[[Kategorie:Java]] | |||
[[Kategorie:Eigene Daemons]] |
Aktuelle Version vom 23. Oktober 2024, 14:27 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:
- 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 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
- Apache Tomcat Homepage (Englisch)
- Apache Tomcat Dokumentation (Version 9.0, Englisch)
- Apache Tomcat Wiki (Englisch)
- Ansible Playbook für Hostsharing