Apache Tomcat è un server web open source per l'esecuzione di applicazioni Java. È una parte cruciale della piattaforma Java Enterprise Edition (Java EE) e viene utilizzato per eseguire e gestire applicazioni Java, inclusi servlet, JavaServer Pages (JSP) e altri componenti Java EE. Tomcat fornisce un'infrastruttura affidabile e altamente configurabile per ospitare le tue applicazioni Java, rendendolo una scelta popolare per gli sviluppatori. In questa guida, ti mostreremo come installare e configurare Apache Tomcat su Ubuntu 22.04.
Prima di installare Apache Tomcat, è importante assicurarsi che sul sistema sia presente Java Development Kit (JDK). In questa guida, utilizzeremo OpenJDK, che è una versione open source di JDK. Se non l'hai già installato sul tuo sistema, ti consiglio di seguire la guida all'installazione di OpenJDK su Ubuntu prima di procedere con l'installazione di Apache Tomcat. Questo garantirà che il sistema sia pronto per eseguire le tue applicazioni Java.
Creazione dell'utente tomcat
Per garantire la sicurezza del tuo sistema, è consigliabile eseguire Apache Tomcat con un utente dedicato anziché con l'utente root o un altro utente con privilegi elevati. Per questo motivo, dovrai creare un nuovo utente chiamato "tomcat".
In primis creiamo il gruppo tomcat
sudo groupadd tomcat
E successivamente creiamo l'utente
sudo useradd -s /bin/false -g tomcat -d /home/tomcat tomcat
Di seguito una spiegazione dei vari parametri utilizzati:
-
-s /bin/false
: Imposta il shell dell'utente come "/bin/false", il che significa che l'utente non avrà una shell interattiva e non potrà accedere al sistema tramite login. -
-g tomcat
: Assegna l'utente al gruppo "tomcat". -
-d /home/tomcat
: Imposta la directory home dell'utente come "/home/tomcat".
Questi parametri sono utilizzati per creare un utente a scopo specifico per eseguire Apache Tomcat, che fornisce una separazione dei privilegi e una maggiore sicurezza per il tuo sistema. Inoltre, utilizzare un utente dedicato per Tomcat significa che i file e le risorse di Tomcat saranno isolati e protetti dalle altre parti del sistema.
Installazione di Apache Tomcat
Il passaggio successivo è visitare il sito web ufficiale dei pacchetti di distribuzione di Apache Tomcat all'indirizzo https://archive.apache.org/dist/tomcat/tomcat-10/. Questo sito ti permetterà di visualizzare tutte le versioni disponibili di Apache Tomcat 10 e di selezionare la versione più recente.
Una volta che hai identificato la versione più recente, puoi scaricarla sul tuo sistema Ubuntu utilizzando il comando wget
. Ad esempio, se la versione più recente è la 10.1.5, potresti scaricarla con i seguenti comandi:
VER="10.1.5"
wget https://archive.apache.org/dist/tomcat/tomcat-10/v${VER}/bin/apache-tomcat-${VER}.tar.gz
Per scompattare il pacchetto scaricato possiamo utilizzare il seguente comando:
tar -xvzf apache-tomcat-${VER}.tar.gz
In questo comando, -x
indica che vuoi estrarre i file dall'archivio, -v
indica che vuoi visualizzare i dettagli sul processo di estrazione e -z
indica che l'archivio è in formato gzip.
Dopo aver eseguito questo comando, i file di Apache Tomcat saranno estratti in una nuova directory con il nome apache-tomcat-${VER}
. Questa directory conterrà tutti i file e le sottodirectory necessari per l'esecuzione di Apache Tomcat.
Ad esempio, se la versione è 10.1.5, la directory estratta avrà il nome apache-tomcat-10.1.5
.
Ora dobbiamo rinominare la cartella estratta. Il comando per farlo è:
mv apache-tomcat-${VER} tomcat
Successivamente, dobbiamo spostare la cartella rinominata nella directory /opt
utilizzando il comando:
sudo mv tomcat /opt/tomcat
La directory /opt
è una directory speciale in Unix-based systems come Ubuntu che viene utilizzata per installare software non forniti dal sistema operativo. Il significato di /opt
è "optional", quindi in questa cartella vengono installate le applicazioni opzionali che non fanno parte del sistema operativo di base.
Installare Apache Tomcat in questa cartella ha diversi vantaggi, tra cui:
-
Mantenere i file di Tomcat separati dai file del sistema operativo e dai pacchetti forniti dal sistema operativo.
-
Facilitare l'aggiornamento e la rimozione di Tomcat in futuro.
-
Aumentare la sicurezza, poiché la cartella
/opt
è di solito protetta da permessi più rigidi rispetto alle altre directory del sistema.
Infine, dobbiamo modificare i permessi della cartella /opt/tomcat
per garantire che l'utente Tomcat abbia i permessi necessari per accedere e gestire i file. Puoi farlo con i seguenti comandi:
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 755 /opt/tomcat/
Creazione di una nuova unità di servizio in Systemd
Ora occupiamoci della configurazione, creando un file di unità per systemd. Systemd è il gestore dei processi per sistemi operativi basati su Linux. È stato sviluppato come sostituto di init, il sistema di gestione dei processi originale utilizzato in molte distribuzioni Linux.
Il file che andremo a creare, descrive come un servizio o un processo (in questo caso Tomcat) dovrebbe essere eseguito e gestito dal sistema operativo. Il file specifica le proprietà del servizio o del processo, come la descrizione del servizio, le dipendenze da altri servizi o risorse, le modalità di esecuzione del servizio, le opzioni di avvio e arresto, le proprietà di sicurezza e altro ancora. Queste informazioni vengono utilizzate da systemd per avviare, gestire e arrestare il servizio o il processo in modo controllato e affidabile.
Prima di creare il file, lanciamo questo comando per individuare la cartella dove è stato installato JDk
sudo update-java-alternatives -l
Nel mio caso, l'output è stato: /usr/lib/jvm/java-1.19.0-openjdk-amd64
Segniamoci questo output e andiamo avanti. Ora creiamo il nuovo file per systemd:
sudo nano /etc/systemd/system/tomcat.service
E incolliamo questa configurazione, avendo cura (eventualmente) di sostituire il valore di JAVA_HOME con l'ouput che abbiamo segnato in precedenza.
[Unit]
Description=Tomcat
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.19.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
Il file specifica come il servizio dovrebbe essere eseguito e gestito dal sistema operativo.
La sezione [Unit] descrive le proprietà generali del servizio, come la descrizione del servizio stesso e la dipendenza da un'altra risorsa, in questo caso la rete.
La sezione [Service] descrive come il servizio dovrebbe essere eseguito. In questo caso, il tipo di processo viene impostato su "forking", il che significa che il servizio viene avviato come un processo figlio separato dal processo padre. Inoltre, in questa sezione sono impostate diverse variabili d'ambiente, come la directory home di Java e Tomcat, le opzioni per l'esecuzione di Java e Tomcat e i comandi per avviare e arrestare il servizio.
La sezione [Install] specifica che il servizio deve essere avviato automaticamente all'avvio del sistema operativo e che è destinato a più utenti.
Infine, l'utente che eseguirà il servizio viene impostato come "tomcat" e il gruppo come "tomcat". La maschera di file viene impostata su 0007 per permettere l'accesso in sola lettura per gli utenti del gruppo e di tutti. La sezione RestartSec specifica il tempo in secondi che deve trascorrere tra due tentativi consecutivi di riavvio del servizio. La sezione Restart specifica che il servizio deve essere riavviato automaticamente in caso di arresto imprevisto.
Ora lanciamo il comando seguente per assicurarsi che le modifiche vengano effettivamente caricate e utilizzate da systemd.
sudo systemctl daemon-reload
Se nel sistema abbiamo installato il firewall, dobbiamo abilitare la porta 8080 (dove Tomcat gira di default)
sudo ufw allow 8080
E infine avviamo il processo
sudo systemctl start tomcat
Ora verifichiamo che Tomcat sia realmente in esecuzione, digitando il seguente comando
systemctl status tomcat
Dovremmo ricevere un output del genere
tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-01-24 15:55:32 UTC; 2 weeks ago
Main PID: 2666 (java)
Tasks: 50 (limit: 4663)
CGroup: /system.slice/tomcat.service
├─2666 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
└─2711 /usr/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -classpath /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/opt/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
Facciamo la prova definitiva, accedendo all'interfaccia web di Tomcat tramite un browser web utilizzando l'indirizzo IP del server.
Per accedere all'interfaccia web di Tomcat, apri un browser web e immetti l'URL http://<indirizzo_IP_del_server>:8080
, sostituendo <indirizzo_IP_del_server>
con l'indirizzo IP effettivo del server.
Se Tomcat è in esecuzione correttamente, dovresti visualizzare la pagina di benvenuto di Tomcat
Configurazione per l'accesso all'interfaccia di gestione di Tomcat
Per accedere all'interfaccia di gestione di Tomcat, è necessario disporre delle credenziali di accesso. Queste credenziali sono definite nel file tomcat-users.xml
, che si trova nella cartella di configurazione di Tomcat.
Digita il seguente comando per aprire il file tomcat-users.xml
con l'editor di testo nano
:
sudo nano /opt/tomcat/conf/tomcat-users.xml
All'interno del file, cerca la sezione <tomcat-users>
e aggiungi un nuovo utente utilizzando il seguente formato:
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="username" password="password" roles="manager-gui,admin-gui"/>
Sostituisci username
e password
con il nome utente e la password che desideri utilizzare per accedere all'interfaccia di gestione di Tomcat. Salva le modifiche al file e chiudi l'editor di testo.
Potrebbe essere necessario modificare anche il file context.xml
per risolvere l'errore 403 quando si cerca di accedere all'interfaccia di gestione di Tomcat.
Il file context.xml
si trova nella cartella /opt/tomcat/webapps/manager/META-INF/
ed è possibile che contenga una configurazione di sicurezza che impedisce l'accesso all'interfaccia di gestione di Tomcat da indirizzi IP diversi da quello locale (127.0.0.1).
Per rimuovere questa restrizione, è possibile commentare la sezione <Valve>
all'interno del file context.xml
aggiungendo <!--
prima della riga e -->
dopo la riga. In questo modo, la configurazione della valvola verrà ignorata e l'accesso all'interfaccia di gestione di Tomcat sarà possibile da qualsiasi indirizzo IP.
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
Salve il file e riavvia Tomcat eseguendo il seguente comando:
sudo systemctl restart tomcat
Una volta completati questi passaggi, dovresti essere in grado di accedere all'interfaccia di gestione di Tomcat utilizzando le credenziali di accesso che hai appena configurato. Per accedere all'interfaccia di gestione, apri un browser web e digita l'indirizzo IP del tuo server Ubuntu seguito dal numero di porta dell'interfaccia di gestione di Tomcat (di solito è 8080
). Ad esempio: http://indirizzo-ip-del-server:8080/manager
.