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.
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.