安装和升级 > 安装 ThingWorx > 手动安装 > Ubuntu 安装 > 安装 Java、Apache Tomcat 和 ThingWorx
安装 Java、Apache Tomcat 和 ThingWorx
在以下步骤中,将 xxxxx 替换为您正在使用的构建编号。
* 
在上述过程中复制和粘贴命令可能会导致格式化问题。如有必要,可复制并粘贴到文本编辑器中以尽可能减少格式化问题。
安装 Java 和 Apache Tomcat
1. 更新 Ubuntu 包:
$ sudo apt-get update
2. 安装和配置网络时间协议 (NTP) 设置以进行时间同步。NTP 的默认配置即足够。有关 NTP 的其他配置 (超出本文档范围),请参阅以下资源:
$ sudo apt-get install ntp
3. 编辑 AUTHBIND 属性,以允许 Tomcat 绑定低于 1024 的端口:
$ sudo apt-get install authbind
4. 有关版本要求的信息,请参阅 ThingWorx 系统要求
5. 下载并安装所需的 Java 版本。
9.0:Java
9.1 及更高版本:OpenJDKJava 11
6. 提取 tar 文件:
* 
下面的示例使用 jdk-11.x.x,但如有必要,请替换为您所使用的版本。
tar -xf jdk-11.x.x_linux-x64_bin.tar.gz
7. 通过将 JDK 移至 /usr/lib/jvm 创建目录。如果目录不为空,则随即显示一条警告消息。
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv jdk-11.x.x/ /usr/lib/jvm/
8. 将备选项添加到系统:
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk-11.x.x/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/keytool" "keytool" "/usr/lib/jvm/jdk-11.x.x/bin/keytool" 1
9. 更改访问权限:
$ sudo chmod a+x /usr/bin/java
$ sudo chmod a+x /usr/bin/keytool
10. 更改所有者:
$ sudo chown -R root:root /usr/lib/jvm/jdk-11.x.x/
11. 配置主链接:
$ sudo update-alternatives --config java
$ sudo update-alternatives --config keytool
Nothing to configure 是对此命令的正常响应,并不是错误。可以使用上一组步骤安装 /usr/lib/jvm/jdk-11.x.x/bin/ 中的其他可执行文件。
12. 验证 Java 版本:
$ 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)
13. 下载 Apache Tomcat。此过程中的步骤使用 Tomcat 9.0.xx,其中 xx 将替换为正在使用的版本。
$ wget http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.xx/bin/apache-tomcat-9.0.xx.tar.gz
* 
最佳做法包括通过使用每个版本的签名或校验和来验证 Tomcat 文件的完整性。有关详细信息,请参阅 Apache 的文档
14. 提取 TAR 文件:
$ tar -xf apache-tomcat-9.0.xx.tar.gz
15. 创建和更改 /usr/share/tomcat9.0 的所有者并将 Tomcat 移至以下位置。向系统中添加用户和组:
$ sudo mkdir -p /usr/share/tomcat9.0
$ sudo mv apache-tomcat-9.0.xx /usr/share/tomcat9.0/9.0.xx
$ sudo addgroup --system tomcat9.0 --quiet -force-badname
$ sudo adduser --system --home /usr/share/tomcat9.0/ --no-create-home --ingroup tomcat9.0 --disabled-password --force-badname --shell /bin/false tomcat9.0
$ sudo chown -R tomcat9.0:tomcat9.0 /usr/share/tomcat9.0
16. 创建和更改 usr/share/tomcat9.0/ignite 的访问权限:
* 
如果要部署 ThingWorx HA 服务器,请执行此步骤。
cd /usr/share/tomcat9.0
mkdir ignite
chown -Rh tomcat9.0:tomcat9.0 ignite
17. /etc/environment 中 (以 root 用户身份) 定义环境变量:
export JAVA_HOME=/usr/lib/jvm/jdk-11.x.x_xxx
export CATALINA_HOME=/usr/share/tomcat9.0/9.0.xx
18. 反应环境变量:
source /etc/environment
19. 将目录更改到 $CATALINA_HOME
$ cd $CATALINA_HOME
20. 更改 bin/lib/webapps/ 的所有者和访问权限:
$ sudo chown -Rh tomcat9.0:tomcat9.0 bin/ lib/ webapps/
$ sudo chmod 775 bin/ lib/ webapps/
21. 更改 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
22. 更改 conf/ 的所有者和访问权限:
$ sudo chown -Rh root:tomcat9.0 conf/
$ sudo chmod -R 650 conf/
23. 更改 logs/temp/work/ 的访问权限:
$ sudo chown -R tomcat9.0:adm logs/ temp/ work/
$ sudo chmod 760 logs/ temp/ work/
24. 创建自签名证书:
$ sudo $JAVA_HOME/bin/keytool -genkey -alias tomcat9.0 -keyalg RSA -keystore $CATALINA_HOME/conf/.keystore
25. 按照说明完成证书创建过程。
设置 KeyStore 密码。
按提示设置您的安全证书。
将 tomcat9.0 的用户密码设置为与 KeyStore 密码相同:
$ sudo chown root:tomcat9.0 $CATALINA_HOME/conf/.keystore
$ sudo chmod 640 $CATALINA_HOME/conf/.keystore
26. 取消 $CATALINA_HOME/conf/context.xmlManager 元素的备注,以防止在重新启动后保留会话:
<Manager pathname="" />
* 
出于安全方面的原因,禁用 AJP 连接器至关重要,如果默认情况下未禁用此连接器,则需要执行以下步骤。
27. 在 Tomcat 的安装位置,打开 $CATALINA_HOME/conf/server.xml,然后搜索以下行。找到后,对其进行备注并保存文件:

<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
* 
在 Apache Tomcat 9.0 及更高版本中,rejectIllegalHeader 属性的默认值为 true。PTC 不建议且不支持通过手动修改 conf/web.xml 文件将此属性设置为 false。
* 
如果您收到指示目录不存在的错误,使用以下命令确保端口 443 正常运行:
$ sudo touch /etc/authbind/byport/443
$ sudo chmod 700 /etc/authbind/byport/443
$ sudo chown tomcat9.0:tomcat9.0 /etc/authbind/byport/443
28. $CATALINA_HOME/conf/tomcat-users.xml 中定义用户:
$ sudo vi $CATALINA_HOME/conf/tomcat-users.xml
<user username="<Tomcat user name> " password="<Tomcat password> " roles="manager"/>
29. 确定 tomcat9.0 用户的 uid:
$ id -u tomcat9.0
30. 使用此编号,在 /etc/authbind/byuid/ 中创建 ID 文件。将 <uid> 更改为上一步中返回的数字:
$ sudo touch /etc/authbind/byuid/<uid>
$ sudo vi /etc/authbind/byuid/<uid>
31. 编辑上一步中的文件,然后在其中粘贴以下内容:
0.0.0.0/0:1,1023
32. 更改 /etc/authbind/byuid/</uid> 的所有者和访问权限:
$ sudo chown tomcat9.0:tomcat9.0 /etc/authbind/byuid/<uid>
$ sudo chmod 700 /etc/authbind/byuid/<uid>
33. 修改 $CATALINA_HOME/bin/startup.sh 以获取 authbind 永久使用权:
sudo vi $CATALINA_HOME/bin/startup.sh
在以下文件中添加注释:
#exec "$PRGDIR"/"$EXECUTABLE" start "$@"
34. 向文件末尾添加以下内容:
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
35. /etc/init.d 中,创建 tomcat9.0 文件:
$ sudo touch /etc/init.d/tomcat9.0
36. 编辑文件,然后输入以下内容:
$ sudo vi /etc/init.d/tomcat9.0

CATALINA_HOME=/usr/share/tomcat9.0/9.0.xx
case $1 in
start)
/bin/su -p -s /bin/sh tomcat9.0 $CATALINA_HOME/bin/startup.sh
;;
stop)
/bin/su -p -s /bin/sh tomcat9.0 $CATALINA_HOME/bin/shutdown.sh
;;
restart)
/bin/su -p -s /bin/sh tomcat9.0 $CATALINA_HOME/bin/shutdown.sh
/bin/su -p -s /bin/sh tomcat9.0 $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
37. 更改 etc/init.d/tomcat9.0 的访问权限,然后创建符号链接:
$ sudo chmod 755 /etc/init.d/tomcat9.0
$ sudo ln -s /etc/init.d/tomcat9.0 /etc/rc1.d/K99tomcat
$ sudo ln -s /etc/init.d/tomcat9.0 /etc/rc2.d/S99tomcat
38. 将 Tomcat 设置为开机自动启动服务。首先,构建 JSVC。如果您的系统上已安装 JSVC,请转至下一步。
$ sudo apt-get install gcc
39. 在启动 Tomcat 服务时进行设置:
$ 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 apt-get install make
$ sudo make
$ sudo cp jsvc ../..
40. 创建 Tomcat 服务文件:
$ sudo touch /etc/systemd/system/tomcat9.0.service
41. 在文本编辑器中 (以 root 用户身份) 打开 /etc/systemd/system/tomcat9.0.service
$ sudo vi /etc/systemd/system/tomcat9.0.service
a. 在 Tomcat 服务文件中粘贴以下内容:
* 
在以下示例中,将 -Xms-Xmx 值设置为可用操作系统内存的 75% (例如 16GB RAM 系统则设置为 12GB)。有关其他信息,请参阅 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 \
-DIGNITE_HOME=/usr/share/tomcat9.0/ignite \”
-Dcatalina.home=${CATALINA_HOME} \
-Dcatalina.base=${CATALINA_BASE} \
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dserver -Dd64 -XX:+UseNUMA -Dlog4j2.formatMsgNoLookups=true \
-XX:+UseG1GC -Dfile.encoding=UTF-8 \
-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
b. 将 Tomcat 设置为在系统启动时自动运行:
$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat9.0.service
c. 如果 Tomcat 服务在重新启动后未自动启动,且在执行 sudo systemctl enable tomcat9.0.service 时收到以下错误消息:
update-rc.d: error: tomcatx.x Default-Start contains no runlevels, aborting.
则需要执行以下步骤:
移除位于 /etc/init.dtomcat9.0.service 文件,然后重新运行以下命令:
$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat9.0.service
d. 如果收到以下错误消息:
insserv: warning: script 'tomcat9.0' missing LSB tags and override
请将以下内容添加到 /etc/systemd/system/tomcat9.0.service
#!/bin/sh
### BEGIN INIT INFO
# Provides: tomcat8.5
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat8.5
# Description: tomcat8 service
### END INIT INFO
运行
sudo service tomcat9.0 start
42. 如果您是第一次安装 ThingWorx Platform,则应将 Java 选项 -Duser.timezone=UTC 添加到上面的 ExecStart 块中,紧跟在以 -Djava.library.path 开头的行之后。UTC 时区不识别夏时制。设置此选项可防止在夏时制发生更改时覆盖数据。
43. 如果安装于 Apache Ignite 2.14.0 或更新版本以及 Ubuntu 22.04,请设置 -Djava.net.preferIPv4Stack=true var in setEnv.sh
44. 在 tomcat /bin 目录中创建名为 setenv.sh 的新文件:
$ cd $CATALINA_HOME/bin
$ sudo touch setenv.sh
$ sudo vi setenv.sh
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/share/tomcat9.0/9.0.xx/webapps/Thingworx/WEB-INF/extensions"
45. 在 Tomcat 的安装位置,打开 $CATALINA_HOME/conf/web.xml。通过将以下内容添加至 web.xml 文件来替换默认错误页面 (默认值为 stacktrace)。将以下内容置于 web-app 标记内 (在 welcome-file-list 标记后)。正确配置的 Web 应用程序将覆盖位于 $CATALINA_HOME/webapps/APP_NAME/WEB-INF/web.xml 中的此默认值,以免产生问题。
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
46. 在 Tomcat 的安装位置,打开 $CATALINA_HOME/conf/server.xml。在 <Host> </Host> 标记内添加以下内容:
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
47. 移除位于 /<path_to_tomcat>/webapps/ 中的所有 Tomcat 示例 webapps (docsexampleshost-managermanagerROOT)。移除这些应用程序可防止对 Tomcat 进行不必要的访问,特别是在允许用户查看其他用户 cookie 的情况下。
48. PTC 强烈建议在运行 ThingWorx 时使用 TLS。有关设置 TLS 的详细说明,请参阅本技术支持文章
49. 如果您的应用程序需要特定的密码套件,请参阅以下文档以了解配置信息:
50. (可选步骤) 要增加影响静态文件缓存的默认缓存设置,请在 $CATALINA_HOME/conf/context.xml 文件的 <Context></Context> 标记中添加以下行:
<Resources cacheMaxSize="501200" cacheObjectMaxSize="2048" cacheTtl="60000"/>
增加此设置可提高性能并避免 Tomcat 中出现以下消息:
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
安装 ThingWorx
1. 创建 /ThingworxStorage/ThingworxBackupStorage 目录。如果您尚未执行此操作,则还需创建 /ThingworxPlatform 目录:
$ sudo mkdir /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
2. 更改 /ThingworxPlatform、/ThingworxStorage/ThingworxBackupStorage 的所有者和访问权限。如果没有这些权限,服务器将无法启动。
* 
这两个文件夹必须具有相应的所有权和访问权限。它们应归运行 Tomcat 服务的同一用户所有,并且应该为此用户分配完全控制权限。此用户通常为 NETWORK_SERVICE,但在您的环境中可能会有所不同。如果没有这些权限,服务器将无法启动。
$ sudo chown tomcat9.0:tomcat9.0 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
$ sudo chmod 775 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
3. 获取所使用数据库的相应 Thingworx.war 文件。最新的 ThingWorx 下载已发布在以下位置:support.ptc.com“下载软件”>“订购或下载软件更新”> ThingWorx Foundation >“版本 X.X”> ThingWorx PostgreSQLThingWorx MssqlThingWorx H2ThingWorx AzureSql >“最近的日期代码” > ThingWorx-Platform-<数据库类型>-<版本> 下。
4. Thingworx.war 移至 $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. platform-settings.json 放置到 ThingworxPlatform 文件夹中。
* 
如果您使用的是 H2,则必须创建 platform-settings.json 文件,因为下载内容中不包括此文件。

$ sudo cp platform-settings.json /ThingworxPlatform/
6. 如果使用 H2 作为数据库,请执行此步骤。如果未使用 H2 作为数据库,请转至下一步。在 platform-settings.json 文件中添加 H2 的用户名和密码。有关详细信息,请参阅 platform-settings.json 配置详细信息
* 
ThingWorx 与 H2 数据库的连接需要用户定义的用户名和密码,否则服务器不会启动。此设计充分减少了 CVE-2018-10054 所表示的任何潜在漏洞。
},
"PersistenceProviderPackageConfigs":{
"H2PersistenceProviderPackage":{
"ConnectionInformation":
{
"password": "<addsecurepassword>",
"username": "twadmin"
}
},
7. 如果使用 Azure SQL 作为数据库,请执行此步骤。如果未使用 Azure SQL 作为数据库,请转至下一步。打开 platform-settings.json 文件并添加 Azure SQL 持久化方案提供工具参数:
"PersistenceProviderPackageConfigs": {
"AzuresqlPersistenceProviderPackage": {
"ConnectionInformation": {
"driverClass": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"jdbcUrl": "jdbc:sqlserver://<server name>:<port>;databaseName=thingworx;applicationName=Thingworx;",
"password": "<database password>",
"username": "twadmin"
}
}
}
8. 配置管理员密码。
将以下 AdministratorUserSettings 部分 (在 PlatformSettingsConfig 中) 添加至 platform-settings.json 文件,并设置至少 14 个字符的密码。有关放置的详细信息,请参阅 platform-settings.json 配置详细信息。有关设置密码的其他信息,请参阅密码
* 
请勿复制和粘贴以下示例,由此可能导致 plateform-settings.json 中的格式出错。请转而单击此处并从文件复制。

{
"PlatformSettingsConfig": {
"AdministratorUserSettings": {
"InitialPassword": "changeme"
}
}
}
* 
如果 Tomcat 无法启动,并报告错误消息:Check the InitialPassword setting in the AdministratorUserPassword section in platform-settings.json...,请检查以下内容:
plateform-settings.json 中是否存在密码设置
密码是否有效 (默认 14 个或以上字符)
plateform-settings.json 文件格式是否正确 - 错误格式可能导致错误
9. 启用扩展导入。默认情况下,所有用户的扩展导入均处于禁用状态。
将以下内容添加至 PlatformSettingsConfig 下的 platform-settings.json 文件。将以下 ExtensionPackageImportPolicy 参数更新为 true,以允许导入扩展。有关配置的最佳做法,请参阅导入扩展
"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>
},
10. 如果数据库未使用 H2,请转至数据库安装和配置,对数据库进行设置。数据库配置完成后,返回到下一步。如果正在使用 H2,请继续执行下一步。
11. 配置许可:
打开 platform-settings.json 文件,然后将以下内容添加到 PlatformSettingsConfig 部分。请参阅 platform-settings.json 配置详细信息
* 
如果您正在执行离线安装 (无 internet 访问权限),则无需将许可信息添加到 plateform-settings.json 文件。有关未连接站点的信息,请参阅 ThingWorx Platform 许可,然后跳过此步骤。
{
"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>"
}
}
}
* 
如果设置填写错误或服务器无法连接,则将在 ThingworxPlatform 文件夹中创建许可请求文本文件 (licenseRequestFile.txt)。在这种情况下,必须手动创建许可。如果未创建许可,ThingWorx 将在限时模式下启动。在限时模式下,获得许可的实体无法持久保存到数据库。获得许可的实体包括事物、混搭、主数据、小工具、用户和持久化方案提供工具)
有关通过我们的许可管理网站获取 ThingWorx 未连接站点许可证的详细信息,请参阅未连接站点 (未连接到 PTC 支持门户) 的 ThingWorx Platform 许可。在这种情况下,如果手动生成了许可证文件,则必须将其重命名为 license_capability_response.bin 并将其放置在 ThingworxPlatform 文件夹中。
* 
有关许可故障排除的信息,请参阅此支持文章
12. 按照加密密码中的步骤加密许可证服务器密码。
13. 如果使用 Azure SQL 作为数据库,请按照以下步骤下载 JDBC 驱动程序。如果不使用 Azure SQL,请跳过此步骤。
a. 转至 Azure 门户并导航至您的 ThingWorx 数据库。
b. 选择连接字符串
c. 选择 JDBC 选项卡。
d. 选择下载 Microsoft JDBC Driver for SQL Server
e. 选择 Microsoft JDBC Driver 6.0 for SQL Server
f. 提取 ThingWorx VM 中下载的二进制文件并将其复制到 Tomcat lib 目录中。
14. 启动 Tomcat。
sudo service tomcat9.0 start
请验证是否已在 ThingworxPlatform 文件夹中创建许可文件 (successful_license_capability_response.bin)。
15. 要启动 ThingWorx,请在 Web 浏览器中转至 http://<servername>:<port>/Thingworx
16. 更改初始管理员密码:
a. 在 Composer 中,选择“管理员”>“更改密码”
b. “更改密码”窗口中,输入“当前密码”“新密码”以及“确认密码”
* 
设置的密码应不易猜到,不应是已知的通用密码,建议密码长度至少为 14 个字符,并应同时包含大小写字母、数字和特殊字符。
c. 删除 plateform-settings.json 文件中的初始密码。
17. 选择“完成”
18. (可选步骤) 要确定您的许可状态,请在 Composer 中打开“监控”>“子系统”> “许可子系统设置”来确认许可中包括的功能列表 (获得许可的实体)。如果未出现获得许可的实体,则您正处于限时模式下。
这对您有帮助吗?