So installierst du Apache Tomcat 10 mit Nginx auf Rocky Linux 8

Tomcat ist ein Open-Source-Webserver für Java-basierte Anwendungen. Er wird für den Einsatz von Java-Servlet- und JSP-Anwendungen verwendet. Java-Servlets sind kleine Programme, die festlegen, wie ein Server mit Anfragen und Antworten umgeht. Tomcat dient als Open-Source-Implementierung der Technologien Java Servlet, JavaServer Pages, Java Expression Language und Java WebSocket.

Es gibt verschiedene Versionen von Tomcat. Für unseren Lehrgang werden wir die Installation von Tomcat 10 besprechen. Wenn du Tomcat 9 installieren willst, sind die Anweisungen die gleichen. Wenn es Änderungen gibt, werden diese im Tutorial beschrieben.

Für unseren Lehrgang werden wir Tomcat 10 zusammen mit dem Nginx-Server installieren, der als Reverse Proxy fungiert und mit SSL geschützt wird. Es gibt auch eine Tomcat 10.1.x Version, die letzte Alpha-Version von Tomcat, aber die werden wir nicht installieren.

Voraussetzungen

  • Ein Server, auf dem Rocky Linux 8.5 läuft
  • Ein Nicht-Sudo-Benutzer mit Superuser-Rechten.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo dnf update
    
  • Die für die Installation benötigten Pakete.
    $ sudo dnf install wget tar
    

Schritt 1 – Java installieren

Tomcat 9 und 10 benötigen Java 8 oder höher. Wir werden OpenJDK 11 installieren, die Open-Source-Implementierung der Java-Plattform.

Führe den folgenden Befehl aus, um OpenJDK zu installieren.

$ sudo dnf install java-11-openjdk-devel

Überprüfe die Installation.

$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

Schritt 2 – Anlegen eines Systembenutzers

Wir erstellen einen neuen Systembenutzer, um das Sicherheitsrisiko zu minimieren, indem wir Tomcat als Root-Benutzer ausführen. Für den neuen Benutzer legen wir /opt/tomcat als Home-Verzeichnis fest.

Führe den folgenden Befehl aus, um einen neuen Systembenutzer für Tomcat anzulegen.

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

Schritt 3 – Tomcat herunterladen

Die neueste Version von Tomcat v10 kannst du von der Download-Seite herunterladen. Zum Zeitpunkt der Erstellung dieses Tutorials ist v10.0.14 die neueste verfügbare Version. Überprüfe die neueste Version, bevor du Tomcat herunterlädst.

Verwende wget, um Tomcat herunterzuladen.

$ VERSION=10.0.14
$ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

Entpacke die Datei in das Verzeichnis /opt/tomcat.

$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/

Erstelle einen symbolischen Link auf die neueste Version von Tomcat, der auf das Installationsverzeichnis von Tomcat zeigt.

$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

Ändere die Eigentümerschaft des Verzeichnisses auf den zuvor angelegten Benutzer.

$ sudo chown -R tomcat:tomcat /opt/tomcat

Schritt 4 – Erstellen einer Systemd Unit-Datei

Im nächsten Schritt musst du eine Dienstdatei für den Tomcat-Server erstellen, damit er automatisch gestartet werden kann.

Erstelle und öffne die Datei /etc/systemd/system/tomcat.service zur Bearbeitung.

$ sudo nano /etc/systemd/system/tomcat.service

Füge den folgenden Code ein.

[Unit]
Description=Apache Tomcat 10 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du zum Speichern aufgefordert wirst.

Schritt 5 – Starten und Aktivieren des Tomcat-Dienstes

Starte den Service Daemon neu, um den Tomcat-Dienst zu aktivieren.

$ sudo systemctl daemon-reload

Aktiviere und starte den Tomcat-Dienst.

$ sudo systemctl enable tomcat --now

Überprüfe den Status des Dienstes.

$ sudo systemctl status tomcat
? tomcat.service - Apache Tomcat 10 Servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-12-17 15:54:28 UTC; 24s ago
  Process: 86219 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 86226 (java)
    Tasks: 19 (limit: 11411)
   Memory: 132.7M
   CGroup: /system.slice/tomcat.service
           ??86226 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties>

Dec 17 15:54:27 howtoforge systemd[1]: Starting Apache Tomcat 10 Servlet container...
Dec 17 15:54:28 howtoforge systemd[1]: Started Apache Tomcat 10 Servlet container.

Schritt 6 – Firewall konfigurieren

Rocky Linux verwendet die Firewall Firewalld. Überprüfe den Status der Firewall.

$ sudo firewall-cmd --state
running

Lasse HTTP- und HTTPS-Ports zu.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Lade die Firewall neu, um die Änderungen zu aktivieren.

$ sudo firewall-cmd --reload

Schritt 7 – Tomcat Web Management Interface konfigurieren

Die Webverwaltungsoberfläche ist nur zugänglich, wenn wir einen Benutzerzugang dafür erstellen.

Tomcat-Benutzer und -Rollen werden in der Datei /opt/tomcat/latest/conf/tomcat-users.xml definiert. Öffne die Datei zum Bearbeiten.

$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml

Füge die folgenden Zeilen vor der Zeile </tomcat-users ein. Ersetze den Benutzernamen und das Passwort durch deine Anmeldedaten.

Wähle unterschiedliche Anmeldedaten für die Tomcat-Portale Manager und Administrator.

<tomcat-users>
<!--
    Comments
-->
<role rolename="manager-gui"/>
    <user username="manager" password="managerpassword" roles="manager-gui" />
<role rolename="admin-gui"/>
	<user username="admin" password="adminpassword" roles="admin-gui"/>
</tomcat-users>

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du zum Speichern aufgefordert wirst.

Standardmäßig ist die Tomcat-Oberfläche nur von localhost aus zugänglich. Wenn du von überall darauf zugreifen willst, musst du sie konfigurieren.

Öffne die /opt/tomcat/latest/webapps/manager/META-INF/context.xml zum Bearbeiten.

$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml

Entferne die folgenden Zeilen oder kommentiere sie wie unten angegeben aus, indem du sie in <!-- und --> einschließt.

<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

Den Zugriff von jeder IP-Adresse aus zu erlauben, ist ein Sicherheitsrisiko. Du kannst es einschränken, indem du den Zugriff nur von deiner öffentlichen IP-Adresse aus zulässt. Wenn deine öffentliche IP-Adresse 22.22.22.22 lautet, dann ändere die Zeile wie folgt.

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|22.22.22.22" />

Die Liste der erlaubten IP-Adressen wird durch einen senkrechten Strich(|) getrennt. Du kannst entweder einzelne IP-Adressen hinzufügen oder einen regulären Ausdruck verwenden.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du zum Speichern aufgefordert wirst.

Nimm die gleichen Änderungen auch in der Datei /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml vor.

Wenn du fertig bist, starte den Tomcat-Server neu.

$ sudo systemctl restart tomcat

Schritt 8 – SSL installieren

Um ein SSL-Zertifikat mit Let’s Encrypt zu installieren, müssen wir das Tool Certbot installieren.

Als erstes musst du das EPEL-Repository herunterladen und installieren.

$ sudo dnf install epel-release

Führe die folgenden Befehle aus, um Certbot zu installieren.

$ sudo dnf install certbot

Erstelle das SSL-Zertifikat.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d tomcat.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/tomcat.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Erstelle ein Challenge-Webroot-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Erstelle einen Cron Job zur Erneuerung des SSL-Zertifikats. Er wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstelle dazu zunächst die Datei /etc/cron.daily/certbot-renew und öffne sie zur Bearbeitung.

$ sudo nano /etc/cron.daily/certbot-renew

Füge den folgenden Code ein.

#!/bin/sh
certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Ändere die Berechtigungen für die Aufgabendatei, um sie ausführbar zu machen.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Schritt 9 – Nginx installieren

Rocky Linux 8.5 wird mit der neuesten stabilen Version von Nginx ausgeliefert. Installiere sie mit dem folgenden Befehl.

$ sudo dnf module install nginx:1.20

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.20.1

Aktiviere und starte den Nginx-Dienst.

$ sudo systemctl enable nginx --now

Erstelle und öffne die Datei /etc/nginx/conf.d/tomcat.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/tomcat.conf

Füge den folgenden Code in die Datei ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  tomcat.example.com;

    access_log  /var/log/nginx/tomcat.access.log;
    error_log   /var/log/nginx/tomcat.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/tomcat.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/tomcat.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  tomcat.example.com;
    return 301   https://$host$request_uri;
}

Speichere die Datei, indem du die Tastenkombination Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf und bearbeite sie.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte den Nginx-Dienst neu, um die neue Konfiguration zu aktivieren.

$ sudo systemctl restart nginx

Schritt 10 – TomCat starten

Starte https://tomcat.example.com in deinem Browser und es wird der folgende Bildschirm geöffnet.

Tomcat Web Management Home

Du kannst nun auf die Seiten Serverstatus, Manager App und Host Manager zugreifen, indem du die in Schritt 7 konfigurierten Anmeldedaten verwendest.

Fazit

Damit ist unser Tutorium zur Installation und Konfiguration von Tomcat Server auf einem Rocky Linux 8.5 basierten Server und zur Bereitstellung des Servers über Nginx Reverse Proxy und die Verwendung von SSL zum Schutz des Servers abgeschlossen. Wenn du Fragen hast, kannst du sie in den Kommentaren unten stellen.

Das könnte dich auch interessieren …