Tomcat Installieren: Unterschied zwischen den Versionen
Peh (Diskussion | Beiträge) |
|||
Zeile 169: | Zeile 169: | ||
WorkingDirectory=%h/tomcat | WorkingDirectory=%h/tomcat | ||
Environment="PATH=/usr/local/bin:/usr/bin:/bin" | Environment="PATH=/usr/local/bin:/usr/bin:/bin" | ||
Environment="JAVA_HOME=/usr/lib/jvm/java- | Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" | ||
Environment="JAVA_OPTS=-Xms256M -Xmx512M" | Environment="JAVA_OPTS=-Xms256M -Xmx512M" | ||
ExecStart=%h/tomcat/bin/catalina.sh run | ExecStart=%h/tomcat/bin/catalina.sh run |
Version vom 11. Juni 2024, 17: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
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)
- Monit installieren
- Ansible Playbook für Hostsharing