Introduzione

Apache Tomcat è un "contenitore" web che consente di servire Java Servlets e applicazioni web JSP (Java Server Pages).

Prerequisiti

Prima di iniziare con questa guida, dovresti avere un utente non root con i privilegi sudo impostati sul tuo server. Segui questa guida: Configurazione Iniziale su Ubuntu 18.04 LTS

Installare Java

Tomcat richiede l'installazione di Java sul server. Possiamo installare OpenJDK con apt-get.

Innanzitutto, aggiornare l'indice del pacchetto apt-get:

sudo apt update

Quindi installare il pacchetto Java Development Kit con apt-get:

sudo apt install default-jdk

Ora che Java è installato, possiamo creare un utente tomcat, che verrà utilizzato per eseguire Tomcat.

Creare Utente Tomcat

Per motivi di sicurezza, Tomcat deve essere eseguito come utente non privilegiato (ovvero non root). Creeremo un nuovo utente e gruppo che eseguirà il servizio Tomcat.

Innanzitutto, crea un nuovo gruppo di tomcat:

sudo groupadd tomcat

Creiamo un nuovo utente membro del gruppo tomcat, con una directory home di /opt/tomcat (dove installeremo Tomcat) e con shell /bin/false (in modo che nessuno possa accedere all'account):

sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

Ora che il nostro utente tomcat è configurato, scarichiamo e installiamo Tomcat.

Installare Tomcat

Il modo migliore per installare Tomcat 9 è scaricare l'ultima versione binaria e configurarla manualmente.

Trova l'ultima versione di Tomcat 9 nella pagina di download di Tomcat 9. Attualmente l'ultima versione è la 9.0.7. Sotto la sezione Distribuzioni binarie, quindi sotto l'elenco Core, copia il link in tar.gz.

Quindi, passare alla directory /tmp sul proprio server. Questa è una buona directory per scaricare elementi temporanei, come il tarball Tomcat, che non ci servirà dopo aver estratto il contenuto di Tomcat:

cd /tmp

Utilizziamo curl per scaricare Tomcat dal link copiato dal sito Web Tomcat:

Se curl non è installato, dare questo comando da terminale:

sudo apt install curl

Quindi per scaricare Tomcat:

curl -O http://it.apache.contactlab.it/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7.tar.gz

Installeremo Tomcat nella directory /opt/tomcat. Crea la directory ed estrai l'archivio con questi comandi:

sudo mkdir /opt/tomcat
sudo tar xzvf apache-tomcat-9.0.7.tar.gz -C /opt/tomcat --strip-components=1

Successivamente, possiamo impostare le autorizzazioni utente appropriate per la nostra installazione.

Impostare Permessi

L'utente tomcat che abbiamo configurato deve avere accesso all'installazione di Tomcat.

Passiamo alla directory in cui abbiamo decompresso l'installazione di Tomcat:

cd /opt/tomcat

Assegnamo la proprietà del gruppo tomcat all'intera directory di installazione:

sudo chgrp -R tomcat /opt/tomcat

Successivamente, diamo al gruppo di tomcat l'accesso in lettura alla directory conf e a tutti i suoi contenuti, ed eseguiamo l'accesso alla directory stessa:

sudo chmod -R g+r conf
sudo chmod g+x conf

Rendimo l'utente tomcat il proprietario delle directory webapps, work, temp e logs:

sudo chown -R tomcat webapps/ work/ temp/ logs/

Successivamente sarà possibile utilizzare l'utente root per effettuare l'upload di file .war nella cartella webapps di tomact.
Oppure assegnare il proprio utente con privilegi sudo al gruppo tomcat, nel seguente modo:

sudo usermod -a -G tomcat nome_utente

Cambiare i permessi della cartella webapps per effettuare l'upload del file .war con il proprio utente:

sudo chmod 770 /opt/tomcat/webapps

Adesso è possibile caricare i file interessati nella cartella webapps.

In produzione è consigliato ripristinare i permessi della cartella:

sudo chmod 750 /opt/tomcat/webapps

Ora che sono state impostate le autorizzazioni appropriate, possiamo creare un file di servizio systemd per gestire il processo Tomcat.

Servizio Systemd

Vogliamo eseguire Tomcat come servizio, quindi configureremo il file di servizio systemd.

Tomcat deve sapere dove è installato Java. Questo percorso è comunemente denominato JAVA_HOME. Il modo più semplice per cercare il percorso corretto è eseguendo questo comando:

sudo update-java-alternatives -l
Output
java-1.11.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.11.0-openjdk-amd64

La variabile JAVA_HOME corretta può essere impostata prendendo l'output della colonna destra. Dato l'esempio sopra, la JAVA_HOME corretta per questo server sarebbe:


JAVA_HOME
/usr/lib/jvm/java-1.11.0-openjdk-amd64

Il tuo JAVA_HOME potrebbe essere diverso.

Con questa informazione, possiamo creare il file di servizio systemd. Aprire un file chiamato tomcat.service nella directory /etc/systemd/system digitando:

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

Incolla il seguente contenuto nel file. Modificare il valore di JAVA_HOME se necessario per far corrispondere il valore trovato sul sistema:


[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

Salviamo e chiudiamo il file.

Ricaricare il daemon systemd:

sudo systemctl daemon-reload

Avviare il servizio Tomcat digitando:

sudo systemctl start tomcat

Controllare che non ci siano errori:

sudo systemctl status tomcat

Firewall per Tomcat

Ora che il servizio Tomcat è avviato, assicuriamoci che la pagina predefinita sia disponibile.

Prima di farlo, dobbiamo modificare le regole del firewall (se attivo). Se hai seguito i prerequisiti, al momento avrai un firewall ufw abilitato.

Tomcat utilizza la porta 8080. Per consentire il traffico su quella porta digitare:

sudo ufw allow 8080

Apri nel browser web

http://TUO_IP:8080

Per avviare Tomcat in automatico all'avvio del server dare questo comando:

sudo systemctl enable tomcat

Vedrai la pagina iniziale predefinita di Tomcat. Se proviamo ad entrare su alcuni collegamenti dell'app di gestione verrà negato l'accesso. Configuriamo nel passaggio successivo i parametri di accesso.

Gestione Tomcat

Per utilizzare l'app web manager fornita con Tomcat, è necessario aggiungere un accesso al nostro server Tomcat. Lo faremo modificando il file tomcat-users.xml:

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

Dovrai aggiungere un utente che potrà accedere a manager-gui e admin-gui (app Web fornite con Tomcat). È possibile farlo definendo un utente, simile all'esempio seguente. Assicurati di cambiare nome utente e password per qualcosa di sicuro:


<tomcat-users . . .>
    <user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

Salvare e chiudere il file.

Per impostazione predefinita, le versioni più recenti di Tomcat limitano l'accesso alle app Manager e Host Manager alle connessioni provenienti dal server stesso. Poiché stiamo installando su una macchina remota, probabilmente vorrai rimuovere o modificare questa restrizione. Per modificare le restrizioni relative all'indirizzo IP, aprire il file context.xml appropriati.

Per l'app Manager, digitare:

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

Per l'app Gestione host, digitare:

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

All'interno del file, commentare la restrizione dell'indirizzo IP per consentire le connessioni da qualsiasi luogo. In alternativa, se si desidera consentire l'accesso solo alle connessioni provenienti dal proprio indirizzo IP, è possibile aggiungere l'indirizzo IP pubblico all'elenco:


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

Salvare e chiudere il file.

Per rendere effettive le nostre modifiche, riavviare il servizio Tomcat:

sudo systemctl restart tomcat

Interfaccia Web

Ora che abbiamo creato un utente, possiamo accedere nuovamente all'interfaccia di gestione web. Ancora una volta, è possibile accedere all'interfaccia inserendo il nome dominio o l'indirizzo IP del server seguito dalla porta 8080 nel browser:

Aprire nel browser web:


http://TUO_IP:8080

L'app Manager è accessibile al seguente indirizzo:


http://TUO_IP:8080/manager/html

Dovrai inserire le credenziali dell'account che hai aggiunto precedentemente al file tomcat-users.xml.

Il Web Application Manager viene utilizzato per gestire le tue applicazioni Java.

Il Gestore host è accessibile al seguente indirizzo:


http://TUO_IP:8080/host-manager/html/

L'installazione di Apache Tomcat 9 su Ubuntu 18.04 LTS è terminata.