Aggiornamento di ThingWorx Flow
L'aggiornamento manuale di ThingWorx Flow è supportato per le versioni seguenti.
Da una versione meno recente di 8.4.x a una versione più recente di 8.4.x.
Da 8.4.x a 8.5.x.
Da una versione meno recente di 8.5.x a una versione più recente di 8.5.x.
* 
L'aggiornamento manuale da una nuova installazione di ThingWorx Flow 8.4.x - 9.x non è disponibile. Se si desidera eseguire l'aggiornamento da una nuova installazione di ThingWorx Flow 8.4.x - 9.x è necessario eseguire la migrazione di ThingWorx Flow.
* 
Se si desidera eseguire l'aggiornamento da una nuova installazione di ThingWorx Flow 8.5.x e versioni successive fino alla 9.x è necessario utilizzare il programma di installazione per l'aggiornamento automatico di ThingWorx Flow.
Per questa procedura supponiamo che attualmente si disponga di una versione <precedente 8.x.x> e che si desideri eseguire l'aggiornamento a una versione <più recente di 8.x.x>.
Prerequisiti
Prima di aggiornare ThingWorx Flow, assicurarsi che siano soddisfatti i prerequisiti seguenti.
Si dispone dei privilegi necessari per modificare tutti i file installati per i servizi.
Si è scaricata la versione <più recente di 8.x.x> dell'aggiornamento della patch ThingWorx Flow per il sistema operativo dal sito Web PTC Software Download.
I passi principali del processo sono i seguenti:
Passo 1: arrestare i servizi ThingWorx Foundation e ThingWorx Flow
A seconda del sistema operativo in uso, utilizzare gli strumenti di controllo dei servizi, sc o i servizi per Windows e sysctl per Linux per arrestare i servizi seguenti:
ThingWorxOrchestrationNginx o nginx
ThingWorx-Foundation
ThingWorx-Flow
RabbitMQ / rabbitmq.service
Assicurarsi che tutti i rispettivi processi siano completamente arrestati. Qualsiasi processo in esecuzione può causare problemi nelle fasi successive dell'aggiornamento delle cartelle.
Passo 2: eseguire il backup dell'installazione esistente
Eseguire il backup dell'installazione esistente, includendo tra le altre cose gli elementi indicati di seguito.
Le cartelle ThingworxPlatform e ThingworxStorage nella cartella di installazione di ThingWorx Foundation
La cartella ThingworxOrchestration in cui sono stati installati i componenti di ThingWorx Flow
I database ThingWorx Foundation e ThingWorx Flow
Si consiglia vivamente di utilizzare le funzionalità incorporate per creare i backup con la soluzione di database in uso.
In PostgreSQL utilizzare lo strumento pg_dump. In Microsoft SQL Server utilizzare SQL Server Management Studio.
Se sono stati installati ThingWorx Flow e/o ThingWorx Foundation su macchine virtuali, utilizzare la funzionalità di istantanea nativa per eseguire il rollback di un aggiornamento. Se si ripristina lo stato dell'istantanea è necessario ripristinare il backup del database, se il database è ospitato in un server separato o in una macchina virtuale.
Passo 3: aggiornare ThingWorx Foundation a una versione <più recente di 8.x.x>
Se si esegue l'aggiornamento da 8.4.x a 8.5.x, fare riferimento alla sezione appropriata per il sistema operativo e il tipo di database in uso nella guida Upgrading to ThingWorx 8.5.
Se si esegue l'aggiornamento da una versione precedente di 8.4.x a una versione più recente di 8.4.x o da una versione precedente di 8.5.x a una versione più recente di 8.5.x, potrebbe essere necessario sostituire solo il file Thingworx.war.
Passo 4: estrarre il contenuto del file tar di aggiornamento di ThingWorx Flow in una cartella temporanea
1. Creare una nuova cartella, modules-<più recente di 8.x.x> nella cartella /ThingworxOrchestration.
La cartella modules-<più recente di 8.x.x> deve essere parallela alla cartella modules esistente.
2. Estrarre i contenuti dell'aggiornamento della patch flow-upgrade-<più recente di 8.x.x>.tar.gz nella cartella modules-<più recente di 8.x.x>.
Dopo avere estratto i contenuti del file tar, nella cartella /ThingworxOrchestration/modules-<più recente di 8.x.x>/ devono essere presenti le cartelle seguenti:
configs
db_seed
engine
exchange
lookup
oauth
8.4.12 e versioni successive, 8.5.8 e versioni successive - ptc-flow-pm2 / pm2
README.pdf
static-ux
symphony-cli
symphony-connectors
symphony-deploy
symphony-sdk
symphony-test-helper
trigger
tw-security-common-nodejs
ux
(Solo Windows) 8.4.12 e versioni successive, 8.5.8 e versioni successive - nginx-1.18.0.zip
(Solo Windows) 8.4.12 e versioni successive, 8.5.8 e versioni successive - node-v12.16.3-win-x64.tar.gz
8.4.15 e versioni successive, 8.5.11 e versioni successive - node-v12.19.0-win-x64.tar.gz
Passo 5: sostituire i servizi ThingWorx Flow con le rispettive versioni con patch
1. Per unire l'impostazione di configurazione esistente di ThingWorx Flow con il software patch, copiare le cartelle o i file specifici seguenti dalla cartella ThingWorxOrchestration/modules/ esistente nella cartella /ThingWorxOrchestration/modules-<più recente di 8.x.x>:
Copiare da
Copiare in
/ThingworxOrchestration/modules/db_seed/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/db_seed/
/ThingworxOrchestration/modules/db_seed/migration_config.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/db_seed/
/ThingworxOrchestration/modules/db_seed/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/db_seed/
/ThingworxOrchestration/modules/engine/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/engine/
/ThingworxOrchestration/modules/engine/deploymentConfig.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/engine/
/ThingworxOrchestration/modules/engine/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/engine/
/ThingworxOrchestration/modules/exchange/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/Exchange/
/ThingworxOrchestration/modules/exchange/deploymentConfig.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/Exchange/
/ThingworxOrchestration/modules/exchange/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/Exchange/
/ThingworxOrchestration/modules/lookup/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/Lookup/
/ThingworxOrchestration/modules/lookup/deploymentConfig.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/Lookup/
/ThingworxOrchestration/modules/lookup/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/Lookup/
/ThingworxOrchestration/modules/oauth/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/OAuth/
/ThingworxOrchestration/modules/oauth/deploymentConfig.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/OAuth/
/ThingworxOrchestration/modules/oauth/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/OAuth/
/ThingworxOrchestration/modules/static-ux/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/static-UX/
/ThingworxOrchestration/modules/static-ux/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/static-UX/
/ThingworxOrchestration/modules/trigger/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/trigger/
/ThingworxOrchestration/modules/trigger/deploymentConfig.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/trigger/
/ThingworxOrchestration/modules/trigger/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/trigger/
/ThingworxOrchestration/modules/ux/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/UX/
/ThingworxOrchestration/modules/ux/deploymentConfig.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/UX/
/ThingworxOrchestration/modules/ux/SHA1
Facoltativo, solo se esiste.
/ThingworxOrchestration/modules-<più recente di 8.x.x>/UX/
/ThingworxOrchestration/modules/orchestration.pm2.json
/ThingworxOrchestration/modules-<più recente di 8.x.x>/
/ThingworxOrchestration/modules/cache
/ThingworxOrchestration/modules-<più recente di 8.x.x>/
/ThingworxOrchestration/modules/node_modules/config
/ThingworxOrchestration/modules-<più recente di 8.x.x>/symphony-connectors/node_modules/
2. Spostare le cartelle e i file seguenti da /ThingworxOrchestration/modules-<più recente di 8.x.x>/symphony-connectors/ in /ThingworxOrchestration/modules-<più recente di 8.x.x>/:
node_modules
package.json
package-lock.json
3. Da /ThingworxOrchestration/modules-<più recente di 8.x.x>/ eliminare la cartella symphony-connectors vuota.
4. Se si esegue l'aggiornamento da ThingWorx Flow 8.4.x a ThingWorx Flow 8.5.x, aggiungere le righe seguenti al file deploymentConfig.json nella cartella /ThingworxOrchestration/modules-<più recente di 8.x.x>/engine/:
"ENGINE_SIZE": "1802",
"KILL_WORKER_AFTER_RUN": "false",
"AVAILABLE_WORKER_CHECK_TRIES": "10",
"AVAILABLE_WORKER_CHECK_INTERVAL": "3000",
"WORKER_DISMISS_INTERVAL": "1800",
5. Se si esegue l'aggiornamento da ThingWorx Flow 8.4.x a ThingWorx Flow 8.5.x, aggiungere le righe seguenti al file deploymentConfig.json nella cartella /ThingworxOrchestration/modules-<più recente di 8.x.x>/ux/:
"EXCHANGE": {
"HOST": "localhost",
"PORT": "7822"
},
"lookup": {
"host": "http://localhost:8077"
},
6. Per aggiornare le utilità di Flow, attenersi alla procedura descritta di seguito.
a. Eliminare le cartelle seguenti da /ThingWorxOrchestration/Packages.
symphony-cli
symphony-deploy
symphony-sdk
symphony-test-helper
b. Spostare le cartelle seguenti da /ThingworxOrchestration/modules-<più recente di 8.x.x> in /ThingWorxOrchestration/packages:
symphony-cli
symphony-deploy
symphony-sdk
symphony-test-helper
c. Assicurarsi che l'utente che ha installatoThingWorx Flow disponga di proprietà e permessi completi per tutte le utilità di Flow.
Ad esempio passare alla cartella /ThingWorxOrchestration/packages ed eseguire il comando seguente:
chown -R flowuser:flowuser symphony-cli
Sostituire flowuser con l'utente che ha eseguito il programma di installazione di ThingWorx Flow.
7. (Solo Linux) Verificare che l'utente che ha installato ThingWorx Flow disponga della proprietà e dei permessi completi per la cartella modules-<più recente di 8.x.x>.
Passare alla cartella ThingWorxOrchestration ed eseguire il comando seguente:
chown -R flowuser:flowuser modules-<più recente di 8.x.x>
Sostituire flowuser con l'utente che ha eseguito il programma di installazione di ThingWorx Flow.
8. (Solo Windows) Copiare la cartella RabbitMQ dalla cartella modules nella cartella modules-<più recente di 8.x.x>.
9. Dopo avere copiato tutte le impostazioni di configurazione, è necessario rinominare le cartelle seguenti.
a. Rinominare la cartella modules esistente come modules-<precedente 8.x.x>.
b. Rinominare la cartella modules-<più recente di 8.x.x> come modules.
* 
In Windows, prima di procedere con la ridenominazione delle cartelle, è necessario arrestare il processo epmd.exe.
Ad esempio, per rinominare le cartelle in Linux, eseguire i comandi seguenti:
a. mv /ThingworxOrchestration/modules /ThingworxOrchestration/modules-<precedente 8.x.x>
b. mv /ThingworxOrchestration/modules-<più recente di 8.x.x> /ThingworxOrchestration/modules
10. (Solo Linux) Passare alla cartella ThingWorxOrchestration ed eseguire il comando seguente per impostare i permessi completi per la cartella modules:
chmod -R 777 modules
11. (Solo Linux) Passare alla cartella ThingWorxOrchestration/modules ed eseguire il comando seguente per impostare il contesto di protezione corretto per la cartella static-ux:
chcon -R -t httpd_sys_content_t static-ux
12. Rinominare e spostare le cartelle seguenti.
a. Rinominare la cartella tw-security-common-nodejs esistente nel percorso /ThingWorxOrchestration/cryptography come tw-security-common-nodejs_<precedente 8.x.x>.
b. Spostare la cartella tw-security-common-nodejs da /ThingworxOrchestration/modules/ a /ThingWorxOrchestration/cryptography.
c. Assicurarsi che l'utente che ha installato ThingWorx Flow disponga della proprietà e dei permessi completi per la cartella tw-security-common-nodejs.
Ad esempio passare alla cartella /ThingWorxOrchestration/cryptography ed eseguire il comando seguente:
chown -R flowuser:flowuser tw-security-common-nodejs
Sostituire flowuser con l'utente che ha eseguito il programma di installazione di ThingWorx Flow.
d. Se si esegue l'aggiornamento a 8.4.x, passare alla cartella /ThingWorxOrchestration/cryptography/tw-security-common-nodejs ed eseguire i comandi seguenti:
In Windows eseguire npm install
In Linux eseguire sudo npm install.
In Linux eseguire sudo chown -R flowuser:flowuser node_modules
Sostituire flowuser con l'utente che ha eseguito il programma di installazione di ThingWorx Flow.
Passo 6: aggiornare Nginx, PM2 e NodeJS, se non sono già stati aggiornati (8.4.12 e versioni successive, 8.5.8 e versioni successive)
Saltare questo passo se sono già installate le versioni seguenti:
Nginx - 1.18.0
PM2 - 4.4.0
NodeJS - 12.19.x
* 
Se si salta questo passo, eliminare le cartelle seguenti dalla cartella modules:
ptc-flow-pm2 / pm2
nginx-1.18.0.zip
node-v12.19.0-win-x64.tar.gz
Nginx
Windows
1. Rinominare C:\Programmi\nginx-1.13.12 in C:\Programmi\nginx-1.13.12_old.
2. In <directory di installazione di Flow>\modules, estrarre il file nginx-1.18.0.zip in C:\Programmi. Verificare che C:\Programmi\nginx-1.18.0\nginx.exe sia visibile.
3. Rinominare C:\Programmi\nginx-1.18.0 in C:\Programmi\nginx-1.13.12.
4. Sostituire il file C:\Programmi\nginx-1.13.12\conf\nginx.conf con il file C:\Programmi\nginx-1.13.12_old\conf\nginx.conf.
5. Copiare il file C:\Programmi\nginx-1.13.12_old\conf\conf.d in C:\Programmi\nginx-1.13.12\conf\.
6. In <directory di installazione di Flow>\modules, eliminare il file nginx-1.18.0.zip.
Linux
1. Creare il file /etc/yum.repos.d/nginx.repo con i seguenti contenuti:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2. Eseguire il comando sudo yum upgrade nginx.
PM2
Windows
1. Eseguire il backup della cartella <directory di installazione di Flow>\packages\ptc-flow-pm2\node_modules\pm2-windows-service-nosetup\src\daemon.
In ThingWorx Flow 8.4.x, la cartella ptc-flow-pm2 è denominata pm2.
2. Rinominare la cartella <directory di installazione di Flow>\packages\ptc-flow-pm2 in ptc-flow-pm2_old.
In ThingWorx Flow 8.4.x, rinominare pm2 in pm2_old.
3. Se si esegue l'aggiornamento dalla versione 8.4.x, eseguire le operazioni descritte di seguito.
a. Spostare la cartella pm2 da <directory di installazione di Flow>\modules a <directory di installazione di Flow>\packages e rinominarla in pm2.
b. Modificare il file <directory di installazione di Flow>\packages\pm2\node_modules\pm2-windows-service-nosetup\src\daemon\thingworxflow.xml in modo che il percorso seguente sia valido:
<argument>C:\ThingWorxOrchestration\packages\pm2\node_modules\node-windows\lib\wrapper.js</argument>
c. Aggiungere quanto segue alla variabile di ambiente PATH:
C:\ThingWorxOrchestration\packages\pm2\node_modules\.bin
d. Aggiungere la seguente variabile di ambiente:
PM2_SERVICE_PM2_DIR = C:\ThingWorxOrchestration\packages\pm2\node_modules\pm2
4. Se si sta eseguendo l'aggiornamento dalla versione 8.5.x, sostituire la cartella <directory di installazione di Flow>\packages\ptc-flow-pm2 con la cartella ptc-flow-pm2 in <directory di installazione di Flow>\modules.
5. Copiare la directory daemon di backup in <directory di installazione di Flow>\packages\ptc-flow-pm2\node_module\pm2-windows-service-nosetup\src.
In ThingWorx Flow 8.4.x, la cartella ptc-flow-pm2 è denominata pm2.
Linux
1. Sostituire la cartella <directory di installazione di Flow>/packages/ptc-flow-pm2 con la cartella ptc-flow-pm2 in <directory di installazione di Flow>\modules.
In ThingWorx Flow 8.4.x, la cartella ptc-flow-pm2 in packages è denominata pm2.
2. Se si esegue l'aggiornamento dalla versione 8.4.x, eseguire le operazioni descritte di seguito.
a. Rinominare la cartella <directory di installazione di Flow>/packages/pm2 in pm2_old.
b. Spostare la cartella ptc-flow-pm2 da <directory di installazione di Flow>/modules a <directory di installazione di Flow>/packages e rinominarla in pm2.
NodeJS
Windows
1. In <directory di installazione di Flow>\modules, estrarre node-v12.19.0-win-x64.tar.gz.
2. Sostituire la cartella <directory di installazione di Flow>\node con la cartella estratta.
3. In <directory di installazione di Flow>\modules, eliminare node-v12.19.0-win-x64.tar.gz.
Linux
Eseguire i comandi seguenti:
1. sudo su
2. sudo curl -sL https://rpm.nodesource.com/setup_12.x | bash
3. sudo yum install nodejs
4. sudo yum remove rh-nodejs8
5. sudo rm -R /opt/rh
Passo 7: limitare la dimensione di caricamento in Nginx a 1 GB (solo per l'aggiornamento da 8.4.x a 8.5.x)
1. Nel file <directory configurazione Nginx>\conf.d\vhost-flow.conf, trovare la riga seguente:
client_max_body_size 18M;
2. Aggiornare il valore da 18M a 1000M.
3. Verificare che il risultato sia conforme al seguente:
client_max_body_size 1000M;
Passo 8: crittografare la chiave privata Nginx (8.4.14 e versioni successive, 8.5.10 e versioni successive)
La sezione seguente descrive i passi da eseguire per crittografare il file di chiave predefinito. Se si utilizza un file .key diverso, sostituire tutti i riferimenti del file orchestration.key con il nome del file di chiave personale.
1. Nella cartella <directory di installazione di Flow>\SSL creare il file nginx-keyfile contenente la password per la chiave privata crittografata.
2. Utilizzare l'utilità openssl per eseguire il comando seguente:
<openssl_cmd> rsa -aes256 -passout pass:<stessa password definita in nginx-keyfile> -in "<directory di installazione di Flow>\SSL\orchestration.key" -out "<directory di installazione di Flow>\SSL\orchestration_enc.key"
Dove, in Windows, <openssl_cmd> - Eseguire cd C:/opscode/chef/embedded/bin, digitare openssl ed eseguire il comando precedente.
In Linux, <openssl_cmd> - Digitare openssl ed eseguire il comando precedente.
3. Eliminare orchestration.key e rinominare orchestration_enc.key in orchestration.key.
4. Nel file <directory configurazione Nginx>\conf.d\vhost-flow.conf, aggiungere la riga seguente dopo il parametro ssl_certificate_key:
ssl_password_file "<directory di installazione di Flow>\SSL\nginx-keyfile";
Dove <directory configurazione Nginx> è C:\Programmi\nginx-1.18.0\conf in Windows e /etc/nginx in Linux
5. (Solo Linux) Eseguire i comandi seguenti:
a. sudo chown flowuser:flowuser <directory di installazione di Flow>\SSL\orchestration.key, dove flowuser è l'utente che ha eseguito il programma di installazione di ThingWorx Flow.
b. sudo chcon -t httpd_sys_content_t <directory di installazione di Flow>\SSL\orchestration.key
c. sudo chown flowuser:flowuser <directory di installazione di Flow>\SSL\nginx-keyfile, dove flowuser è l'utente che ha eseguito il programma di installazione di ThingWorx Flow.
d. sudo chcon -t httpd_sys_content_t <directory di installazione di Flow>\SSL\nginx-keyfile
Passo 9: apportare modifiche alla protezione nella configurazione di Nginx (8.4.14 e versioni successive, 8.5.10 e versioni successive)
1. Aggiornare il file <directory configurazione Nginx>\nginx.conf per proteggere dall'attacco di forza bruta e attivare il meccanismo di limite di velocità in Nginx. In questo modo si limita il numero di richieste eseguite da un indirizzo IP specifico.
a. Trovare le righe seguenti:
# limit_req_zone $limit_key zone=by_ip:10m rate=100r/s;
# limit_req_zone $limit_method zone=post:10m rate=20r/s;
# limit_req_zone $request_uri zone=by_uri:10m rate=500r/m;
# # limit_req_zone "$binary_remote_addr$request_uri" zone=by_uri_ip:10m rate=2r/s;
# # limit_req_zone $http_authorization zone=by_oauth_token:100m rate=1r/m;
# limit_req_status 429;
b. Rimuovere il commento dalla prima e dall'ultima riga.
c. Nella prima riga, modificare la velocità in 500r/s.
* 
È possibile impostare la velocità (richieste al secondo) su un altro numero. Tuttavia, 500r/s è un numero ragionevole di richieste al secondo che i client illegittimi non possono raggiungere.
d. Verificare che il risultato sia conforme al seguente:
limit_req_zone $limit_key zone=by_ip:10m rate=500r/s;
# limit_req_zone $limit_method zone=post:10m rate=20r/s;
# limit_req_zone $request_uri zone=by_uri:10m rate=500r/m;
# # limit_req_zone "$binary_remote_addr$request_uri" zone=by_uri_ip:10m rate=2r/s;
# # limit_req_zone $http_authorization zone=by_oauth_token:100m rate=1r/m;
limit_req_status 429;
2. Aggiornare il file <directory configurazione Nginx>\nginx.conf per impostare l'intestazione cache-control su no-cache:
a. Trovare la riga seguente:
map $sent_http_content_type $expires {
b. Cambiare il valore di text/html in -1.
c. Verificare che il risultato sia conforme al seguente:
map $sent_http_content_type $expires {
default off;
text/html -1;
text/css 30d;
application/javascript 7d;
~image/ 30d;
}
3. Aggiornare il file <directory configurazione Nginx>\conf.d\vhost-flow.conf per bloccare il metodo HTTP HEAD:
a. Trovare le righe seguenti:
if ($scheme = "https") {
set $secure_var "secure";
}
b. Aggiungere le righe seguenti prima delle righe precedenti:
# block 'head' http method for security reasons
if ($request_method = 'HEAD') {
return 405;
}
c. Verificare che il risultato sia conforme al seguente:
set $proxy_scheme $scheme;
# block 'head' http method for security reasons
if ($request_method = 'HEAD') {
return 405;
}
if ($scheme = "https") {
set $secure_var "secure";
}
4. Aggiornare il file <directory configurazione Nginx>\conf.d\vhost-flow.conf per evitare reindirizzamenti esterni a location ~ ^(/config|/js|/locales|/resources):
a. Trovare le righe seguenti:
location /Thingworx/Flow {
rewrite /Thingworx/Flow/(.*) /$1 break;
try_files $uri $uri/ @flow_api;
}
b. Cambiare try_files $uri $uri/ @flow_api;in try_files $uri @flow_api;.
c. Aggiungere le righe seguenti dopo le righe precedenti:
# avoid external redirects for bellow locations
location ~ ^(/config|/js|/locales|/resources) {
internal;
}
d. Verificare che il risultato sia conforme al seguente:
location /Thingworx/Flow {
rewrite /Thingworx/Flow/(.*) /$1 break;
try_files $uri @flow_api;
}
# avoid external redirects for bellow locations
location ~ ^(/config|/js|/locales|/resources) {
internal;
}
location @flow_api {
5. Aggiornare il file <directory configurazione Nginx>\conf.d\vhost-flow.conf per bloccare il metodo HTTP options e aggiungere il limite di velocità per la protezione da forza bruta per le posizioni seguenti:
Posizione
Passo 1: trovare la posizione
Passo 2: aggiungere il contenuto specificato dopo la posizione
Passo 3: rimuovere il commento dalla riga specificata
Passo 4: aggiungere il contenuto specificato alla riga non commentata
Passo 5: verificare il risultato
location /Thingworx/Oauths
location /Thingworx/Oauths {
# limit_req zone=by_ip;
# limit_conn addr 500;
# block 'options' http method for security reasons
if ($request_method = 'OPTIONS') {
return 405;
}
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/Oauths {
# block 'options' http method for security reasons
if ($request_method = 'OPTIONS') {
return 405;
}
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location /Thingworx/Triggers
location /Thingworx/Triggers {
# limit_req zone=by_ip;
# limit_conn addr 500;
# block 'options' http method for security reasons
if ($request_method = 'OPTIONS') {
return 405;
}
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/Triggers {
# block 'options' http method for security reasons
if ($request_method = 'OPTIONS') {
return 405;
}
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location @flow_api
location @flow_api {
# limit_req zone=by_ip;
# limit_conn addr 500;
# block 'options' http method for security reasons
if ($request_method = 'OPTIONS') {
return 405;
}
# limit_req zone=by_ip;
burst=10 nodelay
location @flow_api {
# block 'options' http method for security reasons
if ($request_method = 'OPTIONS') {
return 405;
}
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
6. Aggiornare il file <directory configurazione Nginx>\conf.d\vhost-flow.conf per aggiungere il limite di velocità per la protezione da forza bruta per le posizioni seguenti:
Posizione
Passo 1: trovare la posizione
Passo 2: rimuovere il commento dalla riga specificata
Passo 3: aggiungere il contenuto specificato alla riga non commentata
Passo 4: verificare il risultato
location /Thingworx/Composer/apps/flow
location /Thingworx/Composer/apps/flow {
rewrite /Thingworx/Composer/apps/flow/(.*) /$1 break;
# limit_req zone=by_ip;
# limit_conn addr 500;
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/Composer/apps/flow {
rewrite /Thingworx/Composer/apps/flow/(.*) /$1 break;
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2?)$
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2?)$ {
rewrite /Thingworx/Composer/apps/flow/(.*) /$1 break;
# limit_req zone=by_ip burst=10 nodelay;
expires $expires;
# limit_req zone=by_ip burst=10 nodelay;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2?)$ {
rewrite /Thingworx/Composer/apps/flow/(.*) /$1 break;
limit_req zone=by_ip burst=10 nodelay;
expires $expires;
location /Thingworx/Lookups
location /Thingworx/Lookups {
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/Lookups {
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,DELETE,OPTIONS,HEAD';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Length, X-Requested-With, application_uid, application_id, application_api_key, authtoken, Content-Type';
add_header 'Access-Control-Max-Age' '1728000';
if ($request_method = 'OPTIONS') {
return 200;
}
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location /Thingworx/WS
location /Thingworx/WS {
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/WS {
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location /Thingworx/RemoteTunnel
location /Thingworx/RemoteTunnel {
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/RemoteTunnel {
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location /Thingworx/WSTunnelClient/
location /Thingworx/WSTunnelClient/ {
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/WSTunnelClient/ {
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location /Thingworx/WSTunnelServer/
location /Thingworx/WSTunnelServer/ {
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx/WSTunnelServer/ {
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
location /Thingworx
location /Thingworx {
# limit_req zone=by_ip;
burst=10 nodelay
location /Thingworx {
limit_req zone=by_ip burst=10 nodelay;
# limit_conn addr 500;
(Facoltativo) Passo 10: apportare modifiche di configurazione a ThingWorx Foundation e ThingWorx Flow
Se necessario, procedere alla configurazione delle modifiche apportate ai servizi ThingWorx Foundation e ThingWorx Flow.
Questo passo potrebbe essere necessario se una patch introduce nuove impostazioni di configurazione. Per informazioni dettagliate sulle nuove impostazioni di configurazione e sui file in cui è possibile utilizzarle, fare riferimento alle Note di rilascio.
Passo 11: eseguire il reseeding del database con gli aggiornamenti più recenti per ThingWorx Flow
Il reseeding del database ThingWorx Flow non influisce sulle entità di proprietà dell'utente esistenti, ad esempio workflow o trigger.
1. Avviare il prompt dei comandi e passare a /ThingWorxOrchestration/modules/db_seed.
2. Eseguire il comando seguente:
flow-deploy migrate -u <nomeutente DB Flow> -p <password DB Flow> -s <directory di installazione di Flow>
In Linux eseguire il comando flow-deploy come utente non root.
(Facoltativo) Passo 12: distribuire i connettori personalizzati
* 
Completare la procedura descritta in questa sezione solo se sono stati sviluppati connettori personalizzati utilizzando l'SDK ThingWorx Flow.
1. Assicurarsi che il codice sorgente sia disponibile nello stesso sistema.
2. Passare alla directory radice del connettore ed eseguire il comando flow-deploy connector.
Per ulteriori informazioni, vedere Distribuzione dei connettori.
3. Eseguire il comando seguente per inizializzare il connettore personalizzato nel database:
flow-deploy migrate -u <nomeutente DB Flow> -p <password DB Flow> -s <directory di installazione di Flow>
Passo 13: avviare i servizi e verificarne lo stato
1. Avviare i servizi arrestati al passo 1 nell'ordine seguente:
a. RabbitMQ / rabbitmq.service
* 
Controllare i log di RabbitMQ per verificare che il servizio RabbitMQ sia stato avviato completamente prima di avviare il servizio successivo.
Windows: /ThingworxOrchestration/modules/RabbitMQ/log/rabbit@{hostname}.log
Linux: /var/log/rabbitmq/rabbit@{hostname}.log
b. ThingWorx-Foundation
c. ThingWorx-Flow
d. ThingWorxOrchestrationNginx o nginx
2. Esaminare i log di ThingWorx Foundation e controllare che non si siano verificati errori o avvertenze imprevisti durante l'avvio.
3. Per verificare che ThingWorx Flow sia aggiornato correttamente, avviare il prompt dei comandi come amministratore ed eseguire il comando seguente:
pm2 ls
Lo stato dei seguenti componenti di ThingWorx Flow deve essere "online":
flow-api
flow-engine
flow-exchange
flow-lookup
flow-oauth-server
flow-trigger
Per visualizzare i log di un singolo servizio, eseguire il comando pm2 logs <nome servizio>.
Passo 14: riavviare il Sottosistema Workflow
1. Accedere a ThingWorx Foundation.
2. Passare a Sottosistema > Sottosistema Workflow.
3. Fare clic su Riavvia.
Passo 15: verificare che la funzionalità funzioni come previsto
Controllare la funzionalità in ThingWorx Foundation e ThingWorx Flow per verificare che sia come previsto. Verificare di poter creare workflow in ThingWorx Composer e nell'editor del workflow. Ad esempio è possibile eseguire i task seguenti.
Accedere al dashboard di ThingWorx Flow. Per scoprire come accedere a ThingWorx Flow e ThingWorx Composer, vedere Accesso a ThingWorx Flow e ThingWorx Composer.
Creare le autorizzazioni e le connessioni per ciascun connettore che si desidera utilizzare.
Passo 16: eliminare la cartella tw-security-common-nodejs_<precedente 8.x.x>.
Nella cartella /ThingWorxOrchestration/cryptography eliminare la cartella tw-security-common-nodejs_<precedente 8.x.x>.
(Facoltativo) Passo 17: eliminare la cartella modules-<precedente 8.x.x>.
Dopo avere convalidato l'aggiornamento e avere verificato il corretto funzionamento dell'aggiornamento e dei flussi (e la versione precedente non è più necessaria), eliminare la cartella modules-<precedente 8.x.x>.
ThingWorx Flow è stato aggiornato correttamente.
* 
Se l'esecuzione del flusso nel motore si arresta bruscamente, attenersi alla procedura descritta in Risoluzione dei problemi relativi all'installazione.