|
Manual upgrade from a fresh installation of ThingWorx Flow 8.4.x to 9.x is not available. If you want to upgrade from a fresh installation of ThingWorx Flow 8.4.x to 9.x, you must migrate ThingWorx Flow.
|
|
If you wish to upgrade from a fresh installation of ThingWorx Flow 8.5.x and later to 9.x, you must use the ThingWorx Flow automated upgrade installer.
|
Copy from
|
Copy to
|
---|---|
/ThingworxOrchestration/modules/db_seed/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/db_seed/
|
/ThingworxOrchestration/modules/db_seed/migration_config.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/db_seed/
|
/ThingworxOrchestration/modules/db_seed/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/db_seed/
|
/ThingworxOrchestration/modules/engine/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/engine/
|
/ThingworxOrchestration/modules/engine/deploymentConfig.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/engine/
|
/ThingworxOrchestration/modules/engine/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/engine/
|
/ThingworxOrchestration/modules/exchange/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/exchange/
|
/ThingworxOrchestration/modules/exchange/deploymentConfig.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/exchange/
|
/ThingworxOrchestration/modules/exchange/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/exchange/
|
/ThingworxOrchestration/modules/lookup/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/lookup/
|
/ThingworxOrchestration/modules/lookup/deploymentConfig.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/lookup/
|
/ThingworxOrchestration/modules/lookup/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/lookup/
|
/ThingworxOrchestration/modules/oauth/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/oauth/
|
/ThingworxOrchestration/modules/oauth/deploymentConfig.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/oauth/
|
/ThingworxOrchestration/modules/oauth/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/oauth/
|
/ThingworxOrchestration/modules/static-ux/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/static-ux/
|
/ThingworxOrchestration/modules/static-ux/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/static-ux/
|
/ThingworxOrchestration/modules/trigger/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/trigger/
|
/ThingworxOrchestration/modules/trigger/deploymentConfig.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/trigger/
|
/ThingworxOrchestration/modules/trigger/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/trigger/
|
/ThingworxOrchestration/modules/ux/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/ux/
|
/ThingworxOrchestration/modules/ux/deploymentConfig.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/ux/
|
/ThingworxOrchestration/modules/ux/SHA1
Optional, only if it exists.
|
/ThingworxOrchestration/modules-<newer-8.x.x>/ux/
|
/ThingworxOrchestration/modules/orchestration.pm2.json
|
/ThingworxOrchestration/modules-<newer-8.x.x>/
|
/ThingworxOrchestration/modules/cache
|
/ThingworxOrchestration/modules-<newer-8.x.x>/
|
/ThingworxOrchestration/modules/node_modules/config
|
/ThingworxOrchestration/modules-<newer-8.x.x>/symphony-connectors/node_modules/
|
|
On Windows, before you proceed with renaming the folders, you must stop the epmd.exe process.
|
|
If you skip this step, delete the following folders, from the modules folder:
• ptc-flow-pm2 / pm2
• nginx-1.18.0.zip
• node-v12.19.0-win-x64.tar.gz
|
|
If you see the following error, run dnf module enable -y perl command.
Dependency problem: Problem: conflicting requests nothing provides module(perl:5.26) needed by module perl...
|
|
This step is irrelevant if you are upgrading from NodeJS 12.x.
|
|
This step is irrelevant if you are upgrading from NodeJS 12.x.
|
|
You can set the rate (requests per second) to a different number. However, 500r/s is a reasonable number of requests per second that illegitimate clients cannot reach.
|
Location
|
Step 1: Find location
|
Step 2: Add the specified content after the location
|
Step 3: Uncomment the specified line
|
Step 4: Add the specified content to the uncommented line
|
Step 5: Verify the result
|
---|---|---|---|---|---|
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; |
Location
|
Step 1: Find location
|
Step 2: Uncomment the specified line
|
Step 3: Add the specified content to the uncommented line
|
Step 4: Verify the result
|
---|---|---|---|---|
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; |
|
Complete the steps in this section only if you have developed custom connectors using the ThingWorx Flow SDK.
|
|
If the connected application is configured with a single CA-signed certificate, then skip the steps described below. Users will be able to use ThingWorx Flow properly.
However, if the CA-signed certificate has certificate chains and one of its intermediate certificates is a self-signed certificate, follow the steps below for the intermediate self-signed certificate.
|
|
For Linux, self-signed certificates must be 2048 bit length.
|
|
You can use the Chrome browser to get the self-signed certificate in PEM format (Base 64 encoded), by exporting the self-signed certificate.
|
|
Check the RabbitMQ logs to verify that the RabbitMQ service has completely started before you start the next service.
Windows: /ThingworxOrchestration/modules/RabbitMQ/log/rabbit@{hostname}.log
Linux: /var/log/rabbitmq/rabbit@{hostname}.log
|
|
For Linux, perform an additional step to reset PM2_HOME variable.
Example:
export CONFIG_IMAGE=<CONFIG_IMAGE value>
export PM2_HOME=/opt/ThingWorxOrchestration/.pm2
|
Parameter
|
Value
|
Description
|
---|---|---|
MAX_LOG_SIZE
|
This must be number of bytes, kb, mb, or gb. When using the units, add 'K', 'M', or 'G' as a suffix, directly following the number. The default value is 10M.
There can be a deviation of about double MAX_LOG_SIZE.
|
This is to set log file size. This is the maximum size of the file after which the logs will rotate.
|
MAX_LOG_FILES
|
This value must be a number of days or number of files. The amount of the log files must be slight higher than what is configured. The default value is 10. Add suffix d if setting number of days.
There can be a deviation of about double MAX_LOG_FILES.
|
This is to set maximum number of logs to keep. If the value is not set, logs will not be deleted.
|
ROTATION_DATE_PATTERN
|
This must be a string representing the date format according to Moment.js Documentation to be used for rotating. The default value is set to YYYY-MM-DD which means that the log will rotate daily regardless of its size.
|
The meta-characters used in this string will dictate the frequency of the file rotation.
|
|
If flow execution in the engine stops abruptly, then follow the steps in Troubleshooting your ThingWorx Flow installation.
|