Installare Java e Apache Tomcat (Ubuntu)
1. Se si utilizza Azure SQL per il database, passare a Utilizzo di Azure SQL Server come provider di persistenza. Attenersi alla procedura descritta in tale sezione per impostare il database. Si verrà quindi reindirizzati alla presente sezione.
2. Se si utilizza MSSQL per il database, passare a Utilizzo di MSSQL come provider di persistenza . Attenersi alla procedura descritta in tale sezione per impostare il database. Si verrà quindi reindirizzati alla presente sezione.
3. Aggiornare i package di Ubuntu:
$ sudo apt-get update
4. Installare e configurare le impostazioni del protocollo NTP (Network Time Protocol) per la sincronizzazione temporale:
$ sudo apt-get install ntp
* 
La configurazione di default per il protocollo NTP è sufficiente. Per ulteriori informazioni sulla configurazione del protocollo NTP (al di là delle finalità di questa documentazione), consultare le risorse riportate di seguito.
5. Modificare le proprietà AUTHBIND per consentire l'associazione tra Tomcat e le porte inferiori a 1024:
$ sudo apt-get install authbind
6. Scaricare il file tar JDK Java dal sito Web di Oracle o eseguire il comando riportato di seguito.
wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
7. Estrarre il file tar:
$ tar -xf jdk-8uxxx-linux-x64.tar.gz
8. Creare la directory spostando il JDK in /usr/lib/jvm:
* 
Se la directory non è vuota, viene visualizzato un messaggio di avvertenza.
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv jdk1.8.0_xxx/ /usr/lib/jvm/
9. Aggiungere le alternative al sistema:
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_xxx/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/keytool" "keytool" "/usr/lib/jvm/jdk1.8.0_xxx/bin/keytool" 1
10. Modificare i permessi di accesso:
$ sudo chmod a+x /usr/bin/java
$ sudo chmod a+x /usr/bin/keytool
11. Modificare il proprietario:
$ sudo chown -R root:root /usr/lib/jvm/jdk1.8.0_xxx/
12. Configurare i link master:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config keytool
* 
Nothing to configure è una risposta normale a questo comando e non è un errore. È possibile installare eseguibili aggiuntivi in /usr/lib/jvm/jdk1.8.0_xxx/bin/, attenendosi ai passi precedenti.
13. Verificare la versione di Java:
$ java -version
Questo comando dovrebbe restituire un risultato simile al seguente (le specifiche della build potrebbero differire):
java version "1.8.0_xxx"
Java(TM) SE Runtime Environment (build 1.8.0_xxx-bxx)
Java HotSpot(TM) 64-Bit Server VM (build xx.xx-bxx, mixed mode)
14. Scaricare Apache Tomcat. I passi di questa procedura utilizzano Tomcat 8.5.xx, in cui xx viene sostituito con la versione in uso.
$ wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.xx/bin/apache-tomcat-8.5.xx.tar.gz
* 
Le best practice includono la verifica dell'integrità del file di Tomcat tramite l'utilizzo delle firme o dei checksum per ogni release. Per ulteriori informazioni, fare riferimento alla documentazione di Apache.
15. Estrarre il file tar:
$ tar -xf apache-tomcat-8.5.xx.tar.gz
16. Creare e modificare il proprietario per /usr/share/tomcat8.5 e spostare Tomcat nella posizione indicata di seguito. Aggiungere utente e gruppo al sistema:
$ sudo mkdir -p /usr/share/tomcat8.5
$ sudo mv apache-tomcat-8.5.xx /usr/share/tomcat8.5/8.5.xx
$ sudo addgroup --system tomcat8.5 --quiet -force-badname
$ sudo adduser --system --home /usr/share/tomcat8.5/ --no-create-home --ingroup tomcat8.5 --disabled-password --force-badname --shell /bin/false tomcat8.5
$ sudo chown -R tomcat8.5:tomcat8.5 /usr/share/tomcat8.5
17. Definire le variabili di ambiente in /etc/environment:
$ export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_xxx
$ export CATALINA_HOME=/usr/share/tomcat8.5/8.5.xx
18. Modificare la directory in $CATALINA_HOME:
$ cd $CATALINA_HOME
19. Modificare il proprietario e i permessi di accesso di bin/, lib/ e webapps/:
$ sudo chown -Rh tomcat8.5:tomcat8.5 bin/ lib/ webapps/
$ sudo chmod 775 bin/ lib/ webapps/
20. Modificare il proprietario e i permessi di accesso di usr/share/tomcat8.5/8.5.xx:
sudo chown -R tomcat8.5:tomcat8.5 /usr/share/tomcat8.5/8.5.xx
sudo chmod -R 775 /usr/share/tomcat8.5/8.5.xx
21. Modificare il proprietario e i permessi di accesso di conf/:
$ sudo chown -Rh root:tomcat8.5 conf/
$ sudo chmod -R 650 conf/
22. Modificare i permessi di accesso di logs/, temp/ e work/:
$ sudo chown -R tomcat8.5:adm logs/ temp/ work/
$ sudo chmod 760 logs/ temp/ work/
23. Creare un certificato autofirmato:
$ sudo $JAVA_HOME/bin/keytool -genkey -alias tomcat8.5 -keyalg RSA -keystore $CATALINA_HOME/conf/.keystore
24. Seguire le istruzioni per completare il processo di creazione del certificato.
Impostare la password del file keystore.
Seguire le istruzioni per configurare il certificato di protezione.
Impostare la password utente di tomcat8.5 sulla stessa password del keystore:
$ sudo chown root:tomcat8.5 $CATALINA_HOME/conf/.keystore
$ sudo chmod 640 $CATALINA_HOME/conf/.keystore
25. Eliminare il commento dell'elemento Manager in $CATALINA_HOME/conf/context.xml per impedire la persistenza delle sessioni tra gli avvii:
<Manager pathname="" />
* 
Per motivi di sicurezza è fondamentale disattivare il connettore AJP, se non è già stato disattivato per default, effettuando l'operazione seguente.
26. Nel percorso di installazione di Tomcat aprire conf/server.xml e cercare la riga riportata di seguito. Se la si trova, commentarla e salvare il file:
<Connector port ="8009" protocol="AJP/1.3" redirectPort="8443"/>
* 
In Apache Tomcat 9.0 e versioni successive, il valore di default dell'attributo rejectIllegalHeader è true. La modifica manuale del file conf/web.xml per impostare questo attributo su false non è consigliata o supportata da PTC.
Se viene visualizzato un errore indicante l'assenza della directory, utilizzare i comandi seguenti per assicurarsi che la porta 443 funzioni:
sudo touch /etc/authbind/byport/443
sudo chmod 700 /etc/authbind/byport/443
sudo chown tomcat8.5:tomcat8.5 /etc/authbind/byport/443
27. Definire un utente in $CATALINA_HOME/conf/tomcat-users.xml:
sudo vi $CATALINA_HOME/conf/tomcat-users.xml
<user username="<Tomcat user name> " password="<Tomcat password> " roles="manager"/>
28. Determinare l'uid dell'utente di tomcat8.5:
$ id -u tomcat8.5
29. Con questo numero creare un file ID in /etc/authbind/byuid/:
* 
Sostituire <uid> con il numero restituito nel passo precedente.
$ sudo touch /etc/authbind/byuid/<uid>
sudo vi /etc/authbind/byuid/<uid>
30. Modificare il file dal passo precedente e incollarlo nel seguente:
0.0.0.0/0:1,1023
31. Modificare il proprietario e i permessi di accesso di /etc/authbind/byuid/<uid>:
$ sudo chown tomcat8.5:tomcat8.5 /etc/authbind/byuid/<uid>
$ sudo chmod 700 /etc/authbind/byuid/<uid>
32. Modificare $CATALINA_HOME/bin/startup.sh in modo da utilizzare sempre authbind:
sudo vi $CATALINA_HOME/bin/startup.sh
Commentare nel file la riga seguente:
#exec "$PRGDIR"/"$EXECUTABLE" start "$@"
33. Aggiungere la riga riportata di seguito alla fine del file:
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
34. In /etc/init.d, creare il file tomcat8.5:
$ sudo touch /etc/init.d/tomcat8.5
35. Modificare il file e immettere i seguenti contenuti:
$ sudo vi /etc/init.d/tomcat8.5

CATALINA_HOME=/usr/share/tomcat8.5/8.5.xx
case $1 in
start)
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/startup.sh
;;
stop)
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/shutdown.sh
;;
restart)
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/shutdown.sh
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
36. Modificare i permessi di accesso di etc/init.d/tomcat8.5 e creare link simbolici:
$ sudo chmod 755 /etc/init.d/tomcat8.5
$ sudo ln -s /etc/init.d/tomcat8.5 /etc/rc1.d/K99tomcat
$ sudo ln -s /etc/init.d/tomcat8.5 /etc/rc2.d/S99tomcat
37. Configurare Tomcat come servizio da inizializzare all'avvio. Compilare JSVC, se non è già installato nel sistema. Se è già installato, ignorare questo passo e andare al successivo:
$ sudo apt-get install gcc
38. Configurare il servizio Tomcat per l'inizializzazione all'avvio:
$ cd /usr/share/tomcat8.5/8.5.xx/bin/
$ sudo tar xvfz commons-daemon-native.tar.gz
$ cd commons-daemon-*-native-src/unix
$ sudo ./configure --with-java=$JAVA_HOME
$ sudo apt-get install make
$ sudo make
$ sudo cp jsvc ../..
39. Creare il file del servizio Tomcat:
sudo touch /etc/systemd/system/tomcat8.5.service
40. Aprire /etc/systemd/system/tomcat8.5.service in un editor di testo (come radice):
sudo vi /etc/systemd/system/tomcat8.5.service
a. Incollare il frammento di codice riportato di seguito nel file del servizio Tomcat:
* 
Nell'esempio che segue, impostare i valori di -Xms e -Xmx sul 75% della memoria del sistema operativo disponibile (ad esempio, 12 GB per un sistema con 16 GB di RAM). Per ulteriori informazioni, fare riferimento a Ottimizzazione di JVM.
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking
PIDFile=/var/run/tomcat.pid
Environment=CATALINA_PID=/var/run/tomcat.pid
Environment=JAVA_HOME=/usr/lib/jvm/jdk1.8.0_xxx
Environment=CATALINA_HOME=/usr/share/tomcat8.5/8.5.xx
Environment=CATALINA_BASE=/usr/share/tomcat8.5/8.5.xx
Environment=CATALINA_OPTS=

ExecStart=/usr/share/tomcat8.5/8.5.xx/bin/jsvc \
-Dcatalina.home=${CATALINA_HOME} \
-Dcatalina.base=${CATALINA_BASE} \
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dserver -Dd64 -XX:+UseNUMA \
-XX:+UseG1GC -Dfile.encoding=UTF-8 \
-Djava.library.path=${CATALINA_BASE}/webapps/Thingworx/WEB-INF/extensions \
-Xms=<75% of available OS memory> \
-Xmx=<75% of available OS memory> \
-cp ${CATALINA_HOME}/bin/commons-daemon.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
-user tomcat8.5 \
-java-home ${JAVA_HOME} \
-pidfile /var/run/tomcat.pid \
-errfile ${CATALINA_HOME}/logs/catalina.out \
-outfile ${CATALINA_HOME}/logs/catalina.out \
$CATALINA_OPTS \
org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target
b. Se il servizio Tomcat non viene avviato automaticamente dopo il riavvio e, durante l'esecuzione di sudo systemctl enable tomcat8.5.service, viene restituito l'errore seguente:
update-rc.d: error: tomcatx.x Default-Start contains no runlevels, aborting.
è necessario effettuare l'operazione riportata di seguito.
Rimuovere il file tomcat8.5 situato in /etc/init.d e rieseguire il comando seguente:
sudo systemctl enable tomcat8.5.service
41. Creare un nuovo file denominato setenv.sh nella directory /bin di Tomcat:
cd $CATALINA_HOME/bin
sudo touch setenv.sh
sudo vi setenv.sh
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/share/tomcat8.5/8.5.xx/webapps/Thingworx/WEB-INF/extensions"
42. Nel percorso di installazione di Tomcat aprire CATALINA_HOME/conf/web.xml. Sostituire la pagina di errore di default (per default è l'analisi dello stack) aggiungendo quanto segue nel file web.xml. Inserire quanto specificato di seguito all'interno del tag web-app (dopo il tag welcome-file-list). Un'applicazione Web configurata correttamente sovrascrive questa impostazione di default in CATALINA_HOME/webapps/APP_NAME/WEB-INF/web.xml, pertanto non causerà problemi.
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
43. Nel percorso di installazione di Tomcat aprire CATALINA_HOME/conf/server.xml. Aggiungere la stringa seguente all'interno dei tag <Host> </Host>:
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
44. Rimuovere tutte le app Web Tomcat situate in /<parcorso_tomcat>/webapps/. La rimozione di queste app impedisce l'accesso non necessario a Tomcat, in particolare nel contesto che consentirebbe agli utenti di visualizzare i cookie di altri utenti.
45. PTC consiglia vivamente di utilizzare TLS quando si esegue ThingWorx. Per istruzioni dettagliate sull'impostazione di TLS, fare riferimento a questo articolo del supporto tecnico.
46. Se l'applicazione richiede una suite di crittografia specifica, fare riferimento alla documentazione riportata di seguito per le informazioni di configurazione.
47. (PASSO FACOLTATIVO) Per incrementare le impostazioni di default della cache che influiscono sulla memorizzazione nella cache dei file statici, aggiungere la riga riportata di seguito nei tag <context></context> nel file $CATALINA_HOME/conf/context.xml.
<Resources cacheMaxSize="501200" cacheObjectMaxSize="2048" cacheTtl="60000"/>
L'incremento di questa impostazione migliora le prestazioni ed evita che in Tomcat venga visualizzato il messaggio seguente:
WARNING: Unable to add the resource at [/Common/jquery/jquery-ui.js] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
48. Per H2 e Azure SQL, passare a Installare ThingWorx.
49. Per PostgreSQL, passare a Installare e configurare PostgreSQL.