Instalación de Java, Apache Tomcat y ThingWorx
En los siguientes pasos, reemplace xx o xxx por el número de compilación que se utilice.
* 
Si se copian y pegan los comandos de este procedimiento, se pueden producir problemas de formato. Si fuera necesario, copie y pegue en un editor de texto para minimizar los problemas de formato.
1. Consulte la sección Requisitos del sistema de ThingWorx para conocer los requisitos de la versión.
2. Descargue e instale el fichero JavaRPM.
9.0: Java
9.1 y versiones posteriores: OpenJDK o Java 11.
3. Ejecute el instalador de Java:
* 
Para algunas compilaciones de JDK 8 (no soportadas en ThingWorx 9.2 y versiones posteriores), el nombre de fichero será similar a jdk1.8.0_xxx-amd64. En los siguientes ejemplos se utiliza jdk-11.x.x, pero se puede reemplazar por la versión que se está utilizando, si fuera necesario.
sudo rpm -i jdk-11.x.x_linux-x64_bin.rpm
4. Cree la carpeta y mueva el JDK:
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv /usr/java/jdk-11.x.x/ /usr/lib/jvm/
5. Defina las alternativas de 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. Cambie los permisos de acceso:
$ sudo chmod a+x /usr/bin/java
$ sudo chmod a+x /usr/bin/keytool
Si se recibe un error, utilice el siguiente comando:
$ sudo chmod -f a+x /usr/bin/keytool
7. Cambie el propietario:
$ sudo chown -R root:root /usr/lib/jvm/jdk-11.x.x/
8. Configure los vínculos maestros:
$ sudo alternatives --config java
Seleccione la opción que 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
Si se recibe un error de File Exists, desestímelo y continúe.
$ sudo alternatives --config keytool
9. Verifique la versión de Java. Es posible que la versión del usuario no sea la versión del ejemplo que se proporciona a continuación:
$ 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. Instale Tomcat. Descargue el instalador de Tomcat. En los pasos de este proceso se utiliza Tomcat 9.0.xx, donde xx se debe reemplazar por la versión que se utilice.
$ wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.xx/bin/apache-tomcat-9.0.xx.tar.gz
* 
Entre las prácticas recomendadas se incluye la verificación de la integridad del fichero de Tomcat mediante el uso de firmas o sumas de control para cada versión. Consulte la documentación de Apache para obtener más información.
11. Extraiga el contenido:
$ tar -xf apache-tomcat-9.0.xx.tar.gz
12. Mueva Tomcat a /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. Defina las variables de entorno en el fichero /etc/environment (como usuario raíz):
export JAVA_HOME=/usr/lib/jvm/jdk-11.x.x_xxx
export CATALINA_HOME=/usr/share/tomcat9.0/9.0.xx
14. Ejecute lo siguiente (como usuario raíz):
source /etc/environment
15. Cambie la carpeta a /usr/share/tomcat9.0/9.0.xx:
$ cd /usr/share/tomcat9.0/9.0.xx
16. Añada el usuario y el grupo 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. Cambie los permisos de acceso y el propietario de bin/, lib/ y webapps/:
$ sudo chown -Rh tomcat9.0:tomcat9.0 bin/ lib/ webapps/
$ sudo chmod 775 bin/ lib/ webapps/
18. Cambie los permisos de acceso y el propietario de 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. Cambie los permisos de acceso y el propietario de 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
Se deben revisar los permisos y la propiedad para un sistema de producción a fin de aumentar la seguridad en un nivel de sistema operativo.
20. Cambie los permisos de acceso de logs/, temp/ y work/:
$ sudo chown -R tomcat9.0:adm logs/ temp/ work/
$ sudo chmod 760 logs/ temp/ work/
21. Cree el certificado autofirmado:
$ /usr/lib/jvm/jdk-11.x.x_xxx/jre/bin/keytool -genkey -alias tomcat9.0 -keyalg RSA
22. Siga las instrucciones para completar el proceso de creación del certificado.
Defina la contraseña de keystore.
Siga las instrucciones para configurar el certificado de seguridad.
Defina la contraseña del usuario tomcat9.0 en la misma contraseña que la de 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. Quite la marca de comentario del elemento Manager en context.xml para evitar que las sesiones persistan después de los reinicios. Abra /usr/share/tomcat9.0/9.0.xx/conf/context.xml en un editor de texto (como usuario raíz) y quite ‘<!—‘ de delante de ‘<Manager pathname="" />’ y ‘-->’ de después.
24. Guarde el fichero.
25. Defina un usuario administrador de Apache en tomcat-users.xml. Abra /usr/share/tomcat9.0/9.0.xx/conf/tomcat-users.xml en un editor de texto (como usuario raíz). Justo encima de la línea final (</tomcat-users>), añada la siguiente línea:
<user username="<Tomcat username> " password="<Tomcat password> " roles="manager,manager-gui"/>
26. Guarde el fichero.
* 
Los roles incluidos son para facilitar las pruebas. Se pueden quitar si la seguridad es un problema.
27. Configure Tomcat como servicio que se inicia en el arranque. En primer lugar, cree JSVC si aún no está instalado en el sistema (como usuario raíz):
$ 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. Cree el fichero de servicio Tomcat:
$ sudo touch /usr/lib/systemd/system/tomcat.service
29. Abra /usr/lib/systemd/system/tomcat.service en un editor de texto (como usuario raíz) y pegue lo siguiente:
* 
En el siguiente ejemplo, defina los valores -Xms y -Xmxen el 75 % de la memoria del sistema operativo disponible (por ejemplo, 12 GB para un sistema de 16 GB de RAM). Consulte la sección Ajuste de JVM para obtener información adicional.
[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. Si se instala ThingWorx Platform por primera vez, se debe añadir la opción Java -Duser.timezone=UTC al bloque ExecStart block anterior, inmediatamente después de la línea que empieza por -Djava.library.path. La zona horaria UTC no reconoce el horario de verano. La definición de esta opción impide sobrescribir datos cuando se producen cambios en el horario de verano.
31. Cree un nuevo fichero en el fichero Tomcat usr/share/tomcat9.0/9.0.xx/bin denominado setenv.sh y añada el siguiente contenido al fichero:
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/share/tomcat9.0/9.0.xx/webapps/Thingworx/WEB-INF/extensions"
32. Defina Tomcat para que se ejecute en el arranque del sistema:
$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat.service
* 
Si se producen errores de permisos al ejecutar los comandos anteriores, ejecute lo siguiente (como usuario raíz):
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
De este modo, el usuario podrá controlar el servicio Tomcat con los siguientes comandos:
sudo systemctl start tomcat
sudo systemctl stop tomcat
sudo systemctl restart tomcat
sudo systemctl status tomcat
33. En la ubicación de la instalación de Tomcat, abra CATALINA_HOME/conf/web.xml para reemplazar la página de errores por defecto (stacktrace). Coloque lo siguiente en la etiqueta web-app (después de la etiqueta welcome-file-list):
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
Una aplicación web bien configurada sustituirá este valor por defecto en CATALINA_HOME/webapps/APP_NAME/WEB-INF/web.xml, por lo que no producirá problemas.
34. En la ubicación de la instalación de Tomcat, abra CATALINA_HOME/conf/server.xml. Añada lo siguiente dentro de las etiquetas <Host> </Host>:
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
* 
Por razones de seguridad, es fundamental desactivar el conector de AJP, si no lo está por defecto, realizando el siguiente paso.
35. En la ubicación de la instalación de Tomcat, abra conf/server.xml y busque la siguiente línea. Si se encuentra, coméntelo y guarde el fichero:
<Connector port ="8009" protocol="AJP/1.3" redirectPort="8443"/>
* 
En Apache Tomcat 9.0 y versiones posteriores, el atributo rejectIllegalHeader está definido en verdadero por defecto. PTC no soporta ni recomienda la modificación manual del fichero conf/web.xml para definir este atributo en falso.
36. Quite todas las webapps de ejemplo de Tomcat (docs, examples, host-manager, manager, ROOT) que se encuentran en /<ruta_a_tomcat>/webapps/. Al quitar estas aplicaciones, se impide el acceso innecesario a Tomcat, específicamente en el contexto que puede permitir a los usuarios ver cookies de otros usuarios.
37. PTC recomienda encarecidamente utilizar TLS al ejecutar ThingWorx. Para obtener instrucciones detalladas sobre la configuración de TLS, consulte este artículo de soporte técnico.
38. Si la aplicación requiere un conjunto de cifrado específico, consulte la siguiente documentación para obtener información de configuración:
Configuración de las opciones de Ulimit
La ejecución de los procesos del servidor de aplicaciones Tomcat como usuario "raíz" compromete la seguridad general del sistema e infringe las prácticas recomendadas del sector. Para evitarlo, PTC recomienda modificar el fichero /etc/security/limits.d/80-nofiles.conf para incluir la configuración específica del usuario que ejecutará los servidores de aplicaciones.
Ejemplo de fichero de configuración
La siguiente configuración es un ejemplo de la configuración por defecto del sistema operativo Redhat ubicado en /etc/security/limits.d/80-nofiles.conf con los cambios necesarios. En el siguiente ejemplo, thingworx es el nombre del usuario para el servidor de aplicaciones.

thingworx soft nofile 30720
thingworx hard nofile 30720
Para confirmar este cambio, cierre la sesión y, a continuación, inicie sesión en el sistema.
Instalación de ThingWorx
1. Cree los directorios /ThingworxStorage , /ThingworxBackupStorage y /ThingworxPlatform.
$ sudo mkdir /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
2. Cambie los permisos de acceso y el propietario de /ThingworxPlatform, /ThingworxStorage y /ThingworxBackupStorage. Sin estos permisos, no se podrá iniciar el servidor.
$ sudo chown tomcat9.0:tomcat9.0 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
$ sudo chmod 775 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
3. Obtenga el fichero Thingworx.war apropiado para la base de datos que se está utilizando. Las descargas más recientes de ThingWorx se publican en support.ptc.com, en Descargar software > Pedir o descargar actualizaciones de software > ThingWorx Foundation > Versión X.X > ThingWorx PostgreSQL, ThingWorx MSSQL, ThingWorx H2 o ThingWorx Azure SQL > Código de fecha más reciente > ThingWorx-Platform-<tipo de base de datos><versión>.
4. Mueva Thingworx.war a $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. Coloque platform-settings.json en la carpeta ThingworxPlatform.
* 
Si se utiliza H2, se debe crear el fichero platform-settings.json, ya que no se incluye en la descarga.
6. Si se utiliza H2 como base de datos, realice este paso. Si no se utiliza H2 como base de datos, vaya al paso siguiente. Añada un nombre de usuario y contraseña para H2 en el fichero platform-settings.json. Para obtener más información, consulte el tema Detalles de configuración de platform-settings.json.
* 
Las conexiones de ThingWorx a la base de datos H2 requieren un nombre de usuario y una contraseña definidos por el usuario, o el servidor no se iniciará. Este diseño mitiga completamente cualquier vulnerabilidad potencial representada por CVE-2018-10054.
},
"PersistenceProviderPackageConfigs":{
"H2PersistenceProviderPackage":{
"ConnectionInformation":
{
"password": "<addsecurepassword>",
"username": "twadmin"
}
},
7. Configure la contraseña del administrador.
Añada la siguiente sección AdministratorUserSettings (en PlatformSettingsConfig) al fichero platform-settings.json con una contraseña que tenga al menos 14 caracteres. Para obtener más información sobre la colocación, consulte Detalles de la configuración de platform-settings.json. Consulte Contraseñas para obtener información adicional sobre la definición de contraseñas.
* 
No se debe copiar y pegar el siguiente ejemplo, ya que puede generar un formato incorrecto en platform-settings.json. En su lugar, pulse aquí y cópielo del fichero.

{
"PlatformSettingsConfig": {
"AdministratorUserSettings": {
"InitialPassword": "changeme"
}
}
}
* 
Si Tomcat no se inicia y emite el mensaje de error: Check the InitialPassword setting in the AdministratorUserPassword section in platform-settings.json..., verifique lo siguiente:
La configuración de la contraseña existe en platform-settings.json.
La contraseña es válida (14 o más caracteres por defecto).
El fichero platform-settings.json tiene el formato correcto. El formato incorrecto podría provocar errores.
8. Active la importación de extensión. Por defecto, la importación de extensión está desactivada para todos los usuarios.
Añada lo siguiente al fichero platform-settings.json en PlatformSettingsConfig. Actualice los siguientes parámetros de ExtensionPackageImportPolicy a true para permitir la importación de las extensiones. Consulte Importación de extensiones para conocer las prácticas recomendadas sobre la configuración.
"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. Si no se utiliza H2 para la base de datos, vaya a Instalación y configuración de la base de datos para configurar la base de datos. Vuelva al siguiente paso una vez configurada la base de datos. Si se utiliza H2, continúe en el paso siguiente.
10. Configure la gestión de licencias:
Abra el fichero platform-settings.json y añada lo siguiente a la sección PlatformSettingsConfig. Para obtener más información sobre la colocación, consulte Detalles de la configuración de platform-settings.json.
* 
Si se realiza una instalación desconectada (sin acceso a Internet), no es necesario editar el fichero platform-settings.json. Consulte Licencias de ThingWorx Platform para sitios desconectados y omita este paso.
{
"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>"
}
}
}
* 
Si la configuración se rellena incorrectamente o si el servidor no se puede conectar, se crea un fichero de texto de solicitud de licencia (licenseRequestFile.txt) en la carpeta ThingworxPlatform. En este escenario, se debe crear manualmente una licencia. Si no se crea la licencia, ThingWorx se iniciará en modo limitado. El modo limitado no permite almacenar entidades con licencia en la base de datos. Las entidades con licencia son las cosas, los mashups, los maestros, los gadgets, los usuarios y los proveedores de persistencia.
Para obtener más información sobre cómo obtener una licencia de sitio desconectado de ThingWorx a través del sitio de gestión de licencias, consulte Licencias de ThingWorx Platform para sitios desconectados (sin conexión al portal de soporte técnico de PTC). En esta situación, si el fichero de licencias se genera manualmente, se debe cambiar su nombre a license_capability_response.bin y colocarse en la carpeta ThingworxPlatform.
* 
Para la resolución de problemas de licencias, consulte este artículo de soporte.
11. Cifre la contraseña del servidor de licencias siguiendo los pasos descritos en el tema Cifrado de contraseñas.
12. Si se utiliza Azure SQL como base de datos, siga estos pasos para descargar el controlador JDBC. Si no se utiliza Azure SQL, omita este paso.
a. Vaya a Azure Portal y navegue hasta la base de datos de ThingWorx.
b. Seleccione Cadenas de conexión.
c. Seleccione la ficha JDBC.
d. Seleccione Descargar Microsoft JDBC Driver para SQL Server.
e. Seleccione Microsoft JDBC Driver 6.0 para SQL Server.
f. Extraiga y copie el binario descargado en la máquina virtual de ThingWorx en el directorio lib de Tomcat.
13. Inicie Tomcat.

$ sudo systemctl start tomcat
Verifique que se crea un fichero de licencias (successful_license_capability_response.bin) en la carpeta ThingworxPlatform.
14. Para iniciar ThingWorx, vaya a http://<nombre_servidor>:<puerto>/Thingworx en un explorador Web.
15. Cambie la contraseña por defecto:
a. En Composer, seleccione Administrador > Cambiar contraseña.
b. En la ventana Cambiar contraseña, introduzca Contraseña actual, Contraseña nueva y Confirmar la contraseña.
* 
Se recomienda que la contraseña, que no se debe poder averiguar fácilmente ni ser una contraseña común conocida, tenga al menos 14 caracteres e incluya una combinación de mayúsculas y minúsculas, números y caracteres especiales.
c. Borre la contraseña inicial del fichero platform-settings.json.
16. Seleccione Terminado.
17. (PASO OPCIONAL) Para determinar el estado de la licencia, abra Supervisión>Subsistema>Configuración del subsistema de licencias en Composer para confirmar la lista de las funciones (entidades con licencia) incluida con la licencia. Si no hay entidades con licencia presentes, se está en modo limitado.
¿Fue esto útil?