Installare Java, Apache Tomcat e ThingWorx
Nella procedura descritta di seguito sostituire xx o xxx con il numero di build che si sta utilizzando.
* 
Copiare e incollare i comandi in questa procedura può causare problemi di formattazione. Se necessario, copiare e incollare in un editor di testo per ridurre al minimo i problemi di formattazione.
1. Per i requisiti di versione, fare riferimento ai Requisiti di sistema.
2. Scaricare e installare il file JavaRPM.
9.0: Java
9.1 e versioni successive: OpenJDK o Java 11.
3. Eseguire il programma di installazione di Java:
* 
Per alcune build JDK 8 (non supportate in ThingWorx 9.2 e versioni successive), il nome file è simile a jdk1.8.0_xxx-amd64. Gli esempi riportati di seguito utilizzano jdk-11.x.x, ma la sostituiscono con la versione in uso se necessario.
sudo rpm -i jdk-11.x.x_linux-x64_bin.rpm
4. Creare la cartella e spostare il JDK:
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv /usr/java/jdk-11.x.x/ /usr/lib/jvm/
5. Impostare le alternative Java:
$ sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11.x.x/bin/java 1
$ sudo alternatives --install /usr/bin/keytool keytool /usr/lib/jvm/jdk-11.x.x/bin/keytool 1
6. Modificare i permessi di accesso:
$ sudo chmod a+x /usr/bin/java
$ sudo chmod a+x /usr/bin/keytool
Se viene visualizzato un errore, utilizzare il comando seguente:
$ sudo chmod -f a+x /usr/bin/keytool
7. Modificare il proprietario:
$ sudo chown -R root:root /usr/lib/jvm/jdk-11.x.x/
8. Configurare i link master:
$ sudo alternatives --config java
Selezionare l'opzione che contiene /usr/lib/jvm/jdk-11.x.x/bin/java
$ sudo rm /usr/java/latest
$ sudo ln -s /usr/lib/jvm/jdk-11.x.x /usr/java/latest
$ sudo ln -s /usr/lib/jvm/jdk-11.x.x/bin/keytool /usr/bin/keytool
Se viene visualizzato un errore File Exists, ignorarlo e continuare.
$ sudo alternatives --config keytool
9. Verificare la versione di Java. La versione in uso potrebbe essere diversa dalla versione nell'esempio seguente:
$ java -version
java version "11.0.9" 2020-10-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.9+7-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.9+7-LTS, mixed mode)
10. Installare Tomcat. Scaricare il programma di installazione di Tomcat. I passi di questa procedura utilizzano Tomcat 9.0.xx, dove xx viene sostituito con la versione in uso.
$ wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.xx/bin/apache-tomcat-9.0.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.
11. Estrarre il contenuto:
$ tar -xf apache-tomcat-9.0.xx.tar.gz
12. Spostare Tomcat in /usr/share/tomcat9.0:
$ sudo mkdir -p /usr/share/tomcat9.0
$ sudo mv apache-tomcat-9.0.xx /usr/share/tomcat9.0/9.0.xx
13. Definire le variabili di ambiente nel file /etc/environment (come utente root):
export JAVA_HOME=/usr/lib/jvm/jdk-11.x.x_xxx
export CATALINA_HOME=/usr/share/tomcat9.0/9.0.xx
14. Effettuare le operazioni descritte di seguito (come utente root):
source /etc/environment
15. Modificare la cartella e impostarla su /usr/share/tomcat9.0/9.0.xx:
$ cd /usr/share/tomcat9.0/9.0.xx
16. Aggiungere utente e gruppo al sistema:
$ sudo groupadd -r tomcat9.0
$ sudo useradd -r -d /usr/share/tomcat9.0 -g tomcat9.0 -s /bin/false tomcat9.0
$ sudo chown -R tomcat9.0:tomcat9.0 /usr/share/tomcat9.0
17. Modificare il proprietario e i permessi di accesso di bin/, lib/ e webapps/:
$ sudo chown -Rh tomcat9.0:tomcat9.0 bin/ lib/ webapps/
$ sudo chmod 775 bin/ lib/ webapps/
18. Modificare il proprietario e i permessi di accesso di usr/share/tomcat9.0/9.0.xx:
$ sudo chown -R tomcat9.0:tomcat9.0 /usr/share/tomcat9.0/9.0.xx
$ sudo chmod -R 775 /usr/share/tomcat9.0/9.0.xx
19. Modificare il proprietario e i permessi di accesso di conf/:
$ sudo chown -Rh root:tomcat9.0 conf/
$ sudo chmod -R 640 conf
$ sudo chown -R tomcat9.0:tomcat9.0 /usr/share/tomcat9.0/9.0.xx
$ sudo chmod -R 777 /usr/share/tomcat9.0/9.0.xx
Per un sistema di produzione è consigliabile rivedere i permessi e la proprietà per aumentare la protezione a livello di sistema operativo.
20. Modificare i permessi di accesso di logs/, temp/ e work/:
$ sudo chown -R tomcat9.0:adm logs/ temp/ work/
$ sudo chmod 760 logs/ temp/ work/
21. Creare un certificato autofirmato:
$ /usr/lib/jvm/jdk-11.x.x_xxx/jre/bin/keytool -genkey -alias tomcat9.0 -keyalg RSA
22. 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 come password utente di tomcat9.0 la stessa password del keystore.
$ sudo cp ~/.keystore /usr/share/tomcat9.0/9.0.xx/conf/
$ sudo chown root:tomcat9.0 /usr/share/tomcat9.0/9.0.xx/conf/.keystore
$ sudo chmod 640 /usr/share/tomcat9.0/9.0.xx/conf/.keystore
23. Eliminare il commento dell'elemento Manager in context.xml per impedire la persistenza delle sessioni tra gli avvii. Aprire il file /usr/share/tomcat9.0/9.0.xx/conf/context.xml in un editor di testo (come radice) e rimuovere ‘<!—‘ prima di ‘<Manager pathname="" />’ e ‘-->’ dopo.
24. Salvare il file.
25. Definire un utente di Apache Manager nel file tomcat-users.xml. Aprire il file /usr/share/tomcat9.0/9.0.xx/conf/tomcat-users.xml in un editor di testo (come radice). Appena sopra la riga finale (</tomcat-users>) aggiungere la riga seguente:
<user username="<Tomcat username> " password="<Tomcat password> " roles="manager,manager-gui"/>
26. Salvare il file.
* 
I ruoli inclusi consentono di agevolare il test. Possono essere rimossi se la protezione è un problema.
27. Configurare Tomcat come servizio da inizializzare all'avvio. Innanzitutto compilare JSVC se non è già installato sul sistema (come radice):
$ sudo yum install gcc
$ cd /usr/share/tomcat9.0/9.0.xx/bin/
$ sudo tar xvfz commons-daemon-native.tar.gz
$ cd commons-daemon-*-native-src/unix
$ sudo ./configure --with-java=$JAVA_HOME
$ sudo yum install make
$ sudo make
$ sudo cp jsvc ../..
28. Creare il file del servizio Tomcat:
$ sudo touch /usr/lib/systemd/system/tomcat.service
29. Aprire il file /usr/lib/systemd/system/tomcat.service in un editor di testo (come radice) e incollare il codice riportato di seguito.
* 
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 all'argomento 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/jdk-11.x.x_xxx
Environment=CATALINA_HOME=/usr/share/tomcat9.0/9.0.xx
Environment=CATALINA_BASE=/usr/share/tomcat9.0/9.0.xx
Environment=CATALINA_OPTS=

ExecStart=/usr/share/tomcat9.0/9.0.xx/bin/jsvc \
-Dcatalina.home=${CATALINA_HOME} \
-Dcatalina.base=${CATALINA_BASE} \
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dserver -XX:+UseNUMA \
-XX:+UseG1GC -Dfile.encoding=UTF-8 -Dlog4j2.formatMsgNoLookups=true\
-Xms=<75% of available OS memory> \
-Xmx=<75% of available OS memory> \
-Djava.library.path=${CATALINA_BASE}/webapps/Thingworx/WEB-INF/extensions \
-cp ${CATALINA_HOME}/bin/commons-daemon.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
-user tomcat9.0 \
-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
30. Se si installa ThingWorx Platform per la prima volta, è necessario aggiungere l'opzione Java -Duser.timezone=UTC al blocco ExecStart sopra riportato, immediatamente dopo la riga che inizia con -Djava.library.path. Il fuso orario UTC non riconosce l'ora legale. L'impostazione di questa opzione impedisce la sovrascrittura dei dati quando si verificano cambiamenti dell'ora legale.
31. Creare un nuovo file nel file usr/share/tomcat9.0/9.0.xx/bin di Tomcat denominato setenv.sh e aggiungere il contenuto seguente al file:
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/share/tomcat9.0/9.0.xx/webapps/Thingworx/WEB-INF/extensions"
32. Impostare Tomcat in modo che venga eseguito all'avvio del sistema:
$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat.service
* 
Se si verificano errori di permesso durante l'esecuzione dei comandi riportati sopra, effettuare le operazioni seguenti (come radice):
ausearch -c '(jsvc)' --raw | audit2allow -M my-jsvc
semodule -i my-jsvc.pp
/sbin/restorecon -v /usr/share/tomcat9.0/9.x.xx/bin/jsvc
In questo modo l'utente può controllare il servizio Tomcat utilizzando i comandi seguenti:
sudo systemctl start tomcat
sudo systemctl stop tomcat
sudo systemctl restart tomcat
sudo systemctl status tomcat
33. Nel percorso di installazione di Tomcat aprire CATALINA_HOME/conf/web.xml per sostituire la pagina di errore di default (per default è l'analisi dello stack). Inserire quanto specificato di seguito all'interno del tag web-app (dopo il tag welcome-file-list):
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
Un'applicazione Web configurata correttamente sovrascrive questa impostazione di default in CATALINA_HOME/webapps/APP_NAME/WEB-INF/web.xml, pertanto non causerà problemi.
34. 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" />
* 
Per motivi di sicurezza è fondamentale disattivare il connettore AJP, se non è già stato disattivato per default, effettuando l'operazione seguente.
35. 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.
36. Rimuovere tutte le app Web di esempio di Tomcat (docs, examples, host-manager, manager, ROOT) situate in /<percorso_tomcat>/webapps/. La rimozione di queste app impedisce l'accesso non necessario a Tomcat, in particolare nel contesto che consente agli utenti di visualizzare i cookie di altri utenti.
37. 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.
38. Se l'applicazione richiede una suite di crittografia specifica, fare riferimento alla documentazione riportata di seguito per le informazioni di configurazione.
Configurazione delle impostazioni di Ulimit
L'esecuzione dei processi del server applicazioni Tomcat come utente "root" compromette la sicurezza del sistema generale e viola le best practice standard del settore. Per ovviare a questi problemi, PTC consiglia di modificare il file /etc/security/limits.d/80-nofiles.conf in modo da includere le impostazioni specifiche dell'utente che eseguirà i server applicazioni.
Esempio di file di configurazione
Di seguito è riportato un esempio della configurazione di default del sistema operativo Redhat 80 disponibile all'indirizzo /etc/security/limits.d-nofiles.conf con le dovute modifiche. Nell'esempio seguente, thingworx è il nome dell'utente per il server applicazioni.

thingworx soft nofile 30720
thingworx hard nofile 30720
Per confermare questa modifica, disconnettersi e accedere nuovamente al sistema.
Installazione di ThingWorx
1. Creare le directory /ThingworxStorage, /ThingworxBackupStorage e /ThingworxPlatform.
$ sudo mkdir /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
2. Modificare il proprietario e i permessi di accesso di /ThingworxPlatform, /ThingworxStorage e /ThingworxBackupStorage. Senza questi permessi, il server non viene avviato.
$ sudo chown tomcat9.0:tomcat9.0 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
$ sudo chmod 775 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
3. Ottenere il file Thingworx.war appropriato per il database in uso. I download di ThingWorx più recenti vengono pubblicati sul sito support.ptc.com in Scarica il software > Order or Download Software Updates > ThingWorx Foundation > Release X.X > ThingWorx PostgreSQL, ThingWorx Mssql, ThingWorx H2 o ThingWorx AzureSql > Most Recent Datecode > ThingWorx-Platform-<tipo database>-<versione>.
4. Spostare il file Thingworx.war in $CATALINA_HOME/webapps.
$ sudo mv Thingworx.war $CATALINA_HOME/webapps
$ sudo chown tomcat9.0:tomcat9.0 $CATALINA_HOME/webapps/Thingworx.war
$ sudo chmod 775 $CATALINA_HOME/webapps/Thingworx.war
5. Posizionare il file platform-settings.json nella cartella ThingworxPlatform.
* 
Se si utilizza H2, è necessario creare il file platform-settings.json perché non è incluso nel download.
6. Effettuare questa operazione se si utilizza H2 come database. In caso contrario andare al passo successivo. Aggiungere un nome utente e una password per H2 nel file platform-settings.json. Per ulteriori informazioni, vedere Dettagli di configurazione di platform-settings.json.
* 
Le connessioni di ThingWorx al database H2 richiedono un nome utente e una password definiti dall'utente. In caso contrario, il server non viene avviato. Questa progettazione riduce completamente eventuali vulnerabilità potenziali rappresentate da CVE-2018-10054.
},
"PersistenceProviderPackageConfigs":{
"H2PersistenceProviderPackage":{
"ConnectionInformation":
{
"password": "<addsecurepassword>",
"username": "twadmin"
}
},
7. Configurare la password di amministratore.
Aggiungere la sezione AdministratorUserSettings seguente (in PlatformSettingsConfig) al file platform-settings.json, nonché una password di almeno 14 caratteri. Per ulteriori informazioni sul posizionamento, fare riferimento a Dettagli di configurazione di platform-settings.json. Per ulteriori informazioni sull'impostazione delle password, fare riferimento a Password.
* 
Non copiare e incollare l'esempio riportato di seguito, poiché potrebbe causare un problema di formattazione errata nel file platform-settings.json. Fare invece clic qui e copiarlo dal file.

{
"PlatformSettingsConfig": {
"AdministratorUserSettings": {
"InitialPassword": "changeme"
}
}
}
* 
Se Tomcat non si avvia e viene visualizzato il messaggio di errore "Check the InitialPassword setting in the AdministratorUserPassword section in platform-settings.json...", controllare gli elementi seguenti.
Presenza dell'impostazione della password nel file platform-settings.json.
Validità della password (per default deve includere almeno 14 caratteri).
Il file platform-settings.json deve essere formattato correttamente. Una formattazione non valida può causare errori.
8. Attivare l'importazione delle estensioni. Per default, l'importazione di estensioni è disattivata per tutti gli utenti.
Aggiungere quanto segue al file platform-settings.json in PlatformSettingsConfig. Aggiornare i parametri ExtensionPackageImportPolicy seguenti impostandoli su true per consentire l'importazione delle estensioni. Per le best practice sulla configurazione, fare riferimento a Importazione di estensioni.
"ExtensionPackageImportPolicy": {
"importEnabled": <true or false>,
"allowJarResources": <true or false>,
"allowJavascriptResources": <true or false>,
"allowCSSResources": <true or false>,
"allowJSONResources": <true or false>,
"allowWebAppResources": <true or false>,
"allowEntities": <true or false>,
"allowExtensibleEntities": <true or false>
},
9. Se non si utilizza H2 per il database, vedere Installazione e configurazione del database per configurare il database. Dopo avere configurato il database, andare al passo successivo. Se si utilizza H2, andare al passo successivo.
10. Configurare la licenza come descritto di seguito.
Aprire il file platform-settings.json e aggiungere quanto segue alla sezione PlatformSettingsConfig. Per ulteriori informazioni sul posizionamento, fare riferimento a Dettagli di configurazione di platform-settings.json.
* 
Se si intende eseguire un'installazione disconnessa (senza accesso a Internet), non è necessario modificare il file platform-settings.json. Fare riferimento a Licenze per ThingWorx Platform per i siti disconnessi e ignorare questo passo.
{
"PersistenceProviderPackageConfigs": {
"PostgresPersistenceProviderPackage": {
"ConnectionInformation": {
"jdbcUrl": "jdbc:postgresql://localhost:5432/thingworx",
"password": "<password>",
"username": "<username>"
}
}
},
"PlatformSettingsConfig": {
"LicensingConnectionSettings": {
"username":"<PTC_support_portal_username>",
"password":"<PTC_support_portal_password>"
}
}
}
* 
Se le impostazioni non sono corrette o il server non riesce a connettersi, viene creato un file di testo di richiesta di licenza (licenseRequestFile.txt) nella cartella ThingworxPlatform. In questo caso è necessario creare una licenza manualmente. Se la licenza non viene creata, ThingWorx viene avviato nella modalità limitata. In questa modalità, le entità con licenza non possono essere persistenti nel database. Le entità con licenza sono oggetti, mashup, master, gadget, utenti e provider di persistenza.
Per ulteriori informazioni sull'ottenimento di una licenza per siti disconnessi di ThingWorx tramite il sito di gestione delle licenze, fare riferimento a Licenze per ThingWorx Platform per siti disconnessi (nessuna connessione al portale Supporto PTC). In questo caso, se il file di licenza viene generato manualmente, deve essere rinominato in license_capability_response.bin e posizionato nella cartella ThingworxPlatform.
* 
Per la risoluzione dei problemi relativi alle licenze, fare riferimento a questo articolo del supporto.
11. Crittografare la password del server licenze eseguendo i passi descritti in Crittografia delle password.
12. Se si utilizza Azure SQL come database, attenersi alla procedura descritta di seguito per scaricare il driver JDBC. Ignorare questo passo se non si utilizza Azure SQL.
a. Accedere al portale di Azure e passare al database ThingWorx.
b. Selezionare Stringhe di connessione.
c. Selezionare la scheda JDBC.
d. Selezionare Scarica Microsoft JDBC Driver per SQL Server.
e. Selezionare Microsoft JDBC Driver 6.0 per SQL Server.
f. Estrarre e copiare il file binario scaricato nella directory Tomcat lib della VM ThingWorx.
13. Avviare Tomcat.

$ sudo systemctl start tomcat
Verificare che venga creato un file di licenza (successful_license_capability_response.bin) nella cartella ThingworxPlatform.
14. Per avviare ThingWorx, passare a http://<nomeserver>:<porta>/Thingworx in un browser Web.
15. Cambiare la password di default come descritto di seguito.
a. In Composer selezionare Amministratore >Cambia password.
b. Nella finestra Cambia password compilare i campi Password corrente, Nuova password e Conferma password.
* 
È consigliabile che la password, che dovrebbe essere difficile da indovinare, segreta e non comune, sia costituita da almeno 14 caratteri e includa una combinazione di lettere maiuscole e minuscole, numeri e caratteri speciali.
c. Eliminare la password iniziale dal file platform-settings.json.
16. Selezionare Fine.
17. (PASSO OPZIONALE) Per determinare lo stato della licenza, in Composer aprire Monitoraggio>Sottosistema>Impostazioni sottosistema Licenze per confermare l'elenco di funzionalità (entità con licenza) incluse con la licenza. Se non sono presenti entità con licenza significa che l'ambiente è nella modalità limitata.
È stato utile?