Salta al contenuto principale

Installazione e configurazione di Apache Tomcat su Ubuntu

Profile picture for user luca77king

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

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