Introduzione

Apache Tomcat è un server Web open source e un contenitore servlet Java. È una delle scelte più popolari per la creazione di siti Web e applicazioni basati su Java. Tomcat è leggero, facile da usare e ha un solido ecosistema di componenti aggiuntivi.

Questo tutorial descrive come installare e configurare Tomcat 9 su Ubuntu 20.04 LTS Focal Fossa.

Se desideri installare Tomcat su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Installare Java

Tomcat 9 richiede l'installazione di Java SE 8 o versione successiva sul sistema. Ci installiamo OpenJDK 11, l'implementazione open source della piattaforma Java.

Eseguire i seguenti comandi come utente root o utente con privilegi sudo per aggiornare l'indice dei pacchetti e installare il pacchetto JDK OpenJDK 11:

sudo apt update
sudo apt install openjdk-11-jdk

Una volta completata l'installazione, verificala controllando la versione Java:

java -version

L'output dovrebbe assomigliare a questo:

openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

Creare un utente di sistema

L'esecuzione di Tomcat sotto l'utente root è un rischio per la sicurezza. Creare un nuovo utente di sistema e di gruppo con la home directory /opt/tomcat che eseguirà il servizio Tomcat. Per fare ciò, inserisci il seguente comando:

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

Download di Tomcat

La distribuzione binaria Tomcat è disponibile per il download dalla pagina dei download Tomcat.

Al momento in cui scrivo, è l'ultima versione di Tomcat 9.0.35. Prima di continuare con il passaggio successivo, controlla la pagina di download di Tomcat 9 per vedere se è disponibile una versione più recente.

Utilizzare wget per scaricare il file zip Tomcat nella directory /tmp:

VERSION=9.0.35
wget https://www-eu.apache.org/dist/tomcat/tomcat-9/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz -P /tmp

Una volta completato il download, estrarre il file tar nella directory /opt/tomcat:

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

Tomcat viene aggiornato regolarmente con patch di sicurezza e nuove funzionalità. Per avere un maggiore controllo su versioni e aggiornamenti, creeremo un collegamento simbolico chiamato latest, che punta alla directory di installazione di Tomcat:

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

Successivamente, durante l'aggiornamento di Tomcat, decomprimere la versione più recente e modificare il collegamento simbolico in modo che punti ad esso.

L'utente di sistema precedentemente creato deve avere accesso alla directory di installazione di Tomcat. Cambia la proprietà della directory in tomcat utente e gruppo:

sudo chown -R tomcat: /opt/tomcat

Gli script di shell all'interno della directory bin di Tomcat devono essere eseguibili:

sudo sh -c 'chmod +x /opt/tomcat/latest/bin/*.sh'

Questi script vengono utilizzati per avviare, arrestare e altrimenti gestire l'istanza Tomcat.

Creare un file di unità SystemD

Invece di utilizzare gli script della shell per avviare e arrestare il server Tomcat, lo imposteremo come servizio.

Apri il tuo editor di testo e crea un file tomcat.service di unità nella directory /etc/systemd/system/:

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

Incolla la seguente configurazione:

[Unit]
Description=Tomcat 9 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"

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

[Install]
WantedBy=multi-user.target
/etc/systemd/system/tomcat.service
Modificare la variabile JAVA_HOME se il percorso dell'installazione Java è diverso.

Salvare e chiudere il file e avvisare systemd che esiste un nuovo file di unità:

sudo systemctl daemon-reload

Abilita e avvia il servizio Tomcat:

sudo systemctl enable --now tomcat

Verifica lo stato del servizio:

sudo systemctl status tomcat

L'output dovrebbe mostrare che il server Tomcat è abilitato e in esecuzione:

● tomcat.service - Tomcat 9 servlet container
     Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-05-26 12:08:33 CEST; 2s ago
    Process: 13886 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 13906 (java)
      Tasks: 16 (limit: 2286)
     Memory: 67.1M
     CGroup: /system.slice/tomcat.service
             └─13906 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager>

Puoi avviare, arrestare e riavviare Tomcat come qualsiasi altro servizio systemd:

sudo systemctl start tomcat
sudo systemctl stop tomcat
sudo systemctl restart tomcat

Configurare il firewall

Se il tuo server è protetto da un firewall e desideri accedere a Tomcat dall'esterno della tua rete locale, devi aprire la porta 8080.

Utilizzare il comando seguente per aprire la porta necessaria:

sudo ufw allow 8080/tcp

In genere, quando si esegue Tomcat in un ambiente di produzione, è necessario utilizzare un bilanciamento del carico o un proxy inverso. È consigliabile consentire l'accesso alla porta 8080 solo dalla rete interna.

Configurare l'interfaccia di gestione Web Tomcat

A questo punto, dovresti essere in grado di accedere a Tomcat con un browser Web sulla porta 8080. L'interfaccia di gestione web non è accessibile perché non abbiamo ancora creato un utente.

Gli utenti e i ruoli Tomcat sono definiti nel file tomcat-users.xml. Questo file è un modello con commenti ed esempi che mostrano come creare un utente o un ruolo.

In questo esempio, creeremo un utente con ruoli "admin-gui" e "manager-gui". Il ruolo di "admin-gui" consente all'utente di accedere all'URL /host-manager/html e creare, eliminare e altrimenti gestire host virtuali. Il ruolo "manager-gui" consente all'utente di distribuire e annullare la distribuzione dell'applicazione Web senza dover riavviare l'intero contenitore tramite l'interfaccia /host-manager/html.

Apri il file tomcat-users.xml e crea un nuovo utente, come mostrato di seguito:

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

Aggiungi le seguenti righe di codice prima della chiusura del tag </tomcat-users>:

...
   <role rolename="admin-gui"/>
   <role rolename="manager-gui"/>
   <user username="admin" password="admin_password" roles="admin-gui,manager-gui"/>
...

Quindi il risultato sarà il seguente:

<tomcat-users>
<!--
    Comments
-->
   <role rolename="admin-gui"/>
   <role rolename="manager-gui"/>
   <user username="admin" password="admin_password" roles="admin-gui,manager-gui"/>
</tomcat-users>
Assicurati di cambiare il nome utente e la password in qualcosa di più sicuro.

Per impostazione predefinita, l'interfaccia di gestione Web Tomcat è configurata per consentire l'accesso alle app Manager e Host Manager solo dall'host locale. Per accedere all'interfaccia Web da un IP remoto, è necessario rimuovere queste restrizioni. Ciò può avere diverse implicazioni per la sicurezza e non è raccomandato per i sistemi di produzione.

Per abilitare l'accesso all'interfaccia Web da qualsiasi luogo, aprire i seguenti due file e commentare o rimuovere le linee evidenziate in giallo.

Per l'app Manager:

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

Per l'app Host Manager:

sudo nano /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
context.xml

Se vuoi accedere all'interfaccia web solo da un IP specifico, invece di commentare i blocchi aggiungi il tuo IP pubblico all'elenco.

Supponiamo che il tuo IP pubblico sia 41.41.41.41 e desideri consentire l'accesso solo da tale IP:

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" />
</Context>
context.xml

L'elenco degli indirizzi IP consentiti è un elenco separato da una barra verticale |. È possibile aggiungere singoli indirizzi IP o utilizzare espressioni regolari.

Al termine, riavviare il servizio Tomcat per rendere effettive le modifiche:

sudo systemctl restart tomcat

Prova l'installazione di Tomcat

Apri il tuo browser e digita: http://<your_domain_or_IP_address>:8080.

Supponendo che l'installazione abbia esito positivo, dovrebbe apparire la dashboard di Tomcat.

Tomcat Web Manager Applicationè disponibile all'indirizzo http://<your_domain_or_IP_address>:8080/manager/html.

Tomcat Manager Virtual Host è disponibile all'indirizzo http://<your_domain_or_IP_address>:8080/host-manager/html.

Conclusione

Ti abbiamo mostrato come installare Tomcat 9.0 su Ubuntu 20.04 LTS Focal Fossa e come accedere all'interfaccia di gestione Tomcat.

Per ulteriori informazioni su Apache Tomcat, visitare la pagina della documentazione ufficiale.