Tomcat è un server Web open source per applicazioni basate su Java. Viene utilizzato per la distribuzione di applicazioni Java Servlet e JSP. I servlet Java sono piccoli programmi che definiscono il modo in cui un server gestisce le richieste e le risposte. Tomcat funge da implementazione open source delle tecnologie Java Servlet, JavaServer Pages, Java Expression Language e Java WebSocket.
Sono disponibili più versioni di Tomcat. Discuteremo l'installazione di Tomcat 10 per il nostro tutorial. Se vuoi installare Tomcat 9, le istruzioni saranno le stesse. Eventuali modifiche verranno specificate nel tutorial.
Per il nostro tutorial, installeremo Tomcat 10 insieme al server Nginx per fungere da proxy inverso e proteggerlo utilizzando SSL. Esiste una versione Tomcat 10.1.x che è l'ultima versione alfa di Tomcat, ma non la installeremo.
Prerequisiti
-
Un server che esegue Rocky Linux 8.5
-
Un utente non sudo con privilegi di superutente.
-
Assicurati che tutto sia aggiornato.
$ sudo dnf update
-
Pacchetti necessari per l'installazione.
$ sudo dnf install wget tar
Passaggio 1 - Installa Java
Tomcat 9 e 10 richiedono Java 8 e versioni successive. Installeremo OpenJDK 11, l'implementazione open source della piattaforma Java.
Esegui il comando seguente per installare OpenJDK.
$ sudo dnf install java-11-openjdk-devel
Verifica l'installazione.
$ 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)
Fase 2:crea un utente di sistema
Creeremo un nuovo utente di sistema per ridurre al minimo qualsiasi rischio per la sicurezza eseguendo Tomcat come utente root. Per il nuovo utente, imposteremo /opt/tomcat
come directory principale.
Esegui il comando seguente per creare un nuovo utente di sistema per Tomcat.
$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat
Fase 3 - Scarica Tomcat
L'ultima versione di Tomcat v10 può essere scaricata dalla sua pagina di download. Al momento della stesura di questo tutorial, v10.0.14 è l'ultima versione disponibile. Controlla l'ultima versione prima di scaricare Tomcat.
Usa wget
per scaricare Tomcat.
$ VERSION=10.0.14 $ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
Estrai il file in /opt/tomcat
directory.
$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
Crea un collegamento simbolico all'ultima versione di Tomcat che punta alla directory di installazione di Tomcat.
$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
Modifica la proprietà della directory con l'utente creato in precedenza.
$ sudo chown -R tomcat:tomcat /opt/tomcat
Fase 4:crea un file di unità Systemd
Il passaggio successivo consiste nel creare un file di servizio per il server Tomcat in modo che possa essere avviato automaticamente.
Crea e apri il file /etc/systemd/system/tomcat.service
per la modifica.
$ sudo nano /etc/systemd/system/tomcat.service
Incolla il seguente codice.
[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
Salva il file premendo Ctrl + X e inserendo Y quando viene richiesto di salvare.
Passaggio 5 - Avvia e abilita il servizio Tomcat
Ricarica il demone del servizio per abilitare il servizio Tomcat.
$ sudo systemctl daemon-reload
Abilita e avvia il servizio Tomcat.
$ sudo systemctl enable tomcat --now
Controlla lo stato del servizio.
$ 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.
Passaggio 6:configurazione del firewall
Rocky Linux utilizza Firewalld Firewall. Controlla lo stato del firewall.
$ sudo firewall-cmd --state running
Consenti porte HTTP e HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Ricarica il firewall per abilitare le modifiche.
$ sudo firewall-cmd --reload
Passaggio 7:configurazione dell'interfaccia di gestione Web Tomcat
L'interfaccia di gestione web sarà accessibile solo dopo aver creato una credenziale utente per essa.
Gli utenti ei ruoli Tomcat sono definiti in /opt/tomcat/latest/conf/tomcat-users.xml
file. Apri il file per la modifica.
$ sudo nano /opt/tomcat/latest/conf/tomcat-users.xml
Aggiungi le seguenti righe prima di </tomcat-users
linea. Sostituisci nome utente e password con le tue credenziali.
Scegli credenziali diverse per i portali Tomcat Manager e 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>
Salva il file premendo Ctrl + X e inserendo Y quando viene richiesto di salvare.
Per impostazione predefinita, l'interfaccia Tomcat è accessibile solo da localhost. Se devi accedervi da qualsiasi luogo, devi configurarlo.
Apri il /opt/tomcat/latest/webapps/manager/META-INF/context.xml
per la modifica.
$ sudo nano /opt/tomcat/latest/webapps/manager/META-INF/context.xml
Rimuovi le seguenti righe o commentale come specificato di seguito racchiudendolo in <!--
e -->
.
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
Consentire l'accesso da qualsiasi indirizzo IP è un rischio per la sicurezza. Puoi limitarlo consentendo l'accesso solo dal tuo indirizzo IP pubblico. Se il tuo indirizzo IP pubblico è 22.22.22.22 , quindi modificare la riga come segue.
<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" />
L'elenco degli indirizzi IP consentiti è separato da una barra verticale (| ). Puoi aggiungere singoli indirizzi IP o utilizzare un'espressione regolare.
Salva il file premendo Ctrl + X e inserendo Y quando viene richiesto di salvare.
Esegui le stesse modifiche sul file /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
anche.
Al termine, riavvia il server Tomcat.
$ sudo systemctl restart tomcat
Passaggio 8 - Installa SSL
Per installare un certificato SSL utilizzando Let's Encrypt, è necessario installare lo strumento Certbot.
Innanzitutto, devi scaricare e installare il repository EPEL.
$ sudo dnf install epel-release
Esegui i seguenti comandi per installare Certbot.
$ sudo dnf install certbot
Genera il certificato SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d tomcat.example.com
Il comando precedente scaricherà un certificato in /etc/letsencrypt/live/tomcat.example.com
directory sul tuo server.
Genera un gruppo Diffie-Hellman certificato.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Crea una directory webroot di sfida per il rinnovo automatico di Let's Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Crea un Cron Job per rinnovare l'SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, prima crea il file /etc/cron.daily/certbot-renew
e aprilo per la modifica.
$ sudo nano /etc/cron.daily/certbot-renew
Incolla il seguente codice.
#!/bin/sh certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Modifica le autorizzazioni sul file dell'attività per renderlo eseguibile.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Passaggio 9:installa Nginx
Rocky Linux 8.5 viene fornito con l'ultima versione stabile di Nginx. Installalo usando il seguente comando.
$ sudo dnf module install nginx:1.20
Verifica l'installazione.
$ nginx -v nginx version: nginx/1.20.1
Abilita e avvia il servizio Nginx.
$ sudo systemctl enable nginx --now
Crea e apri il file /etc/nginx/conf.d/tomcat.conf
per la modifica.
$ sudo nano /etc/nginx/conf.d/tomcat.conf
Incolla il seguente codice al suo interno.
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; }
Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.
Apri il file /etc/nginx/nginx.conf
per la modifica.
$ sudo nano /etc/nginx/nginx.conf
Aggiungi la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;
.
server_names_hash_bucket_size 64;
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Verifica la sintassi del file di configurazione Nginx.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Riavvia il servizio Nginx per abilitare la nuova configurazione.
$ sudo systemctl restart nginx
Passaggio 10 - Esegui TomCat
Avvia https://tomcat.example.com
nel tuo browser e si aprirà la seguente schermata.
Ora puoi accedere alle pagine Server Status, Manager App e Host Manager utilizzando le credenziali di accesso che abbiamo configurato nel passaggio 7.
Conclusione
Questo conclude il nostro tutorial sull'installazione e la configurazione di Tomcat Server su un server basato su Rocky Linux 8.5 e sul suo servizio tramite proxy inverso Nginx e sull'utilizzo di SSL per proteggerlo. Se hai domande, pubblicale nei commenti qui sotto.