설치 및 업그레이드 > ThingWorx 설치 > 수동 설치 > RHEL 설치 > Java, Apache Tomcat 및 ThingWorx 설치
Java, Apache Tomcat 및 ThingWorx 설치
아래 단계에서 xx 또는 xxx를 사용하는 빌드 번호로 대체하십시오.
* 
이 절차에 나오는 명령을 복사하여 붙여넣을 경우 서식 적용 문제가 발생할 수 있습니다. 필요한 경우 텍스트 편집기에 복사하여 붙여넣는 방식을 사용하여 서식 적용 문제를 최소화하십시오.
1. 버전 요구 사항은 ThingWorx 시스템 요구 사항을 참조하십시오.
2. JavaRPM 파일을 다운로드하고 설치합니다.
9.0: Java
9.1 이상: OpenJDK 또는 Java 11.
3. Java 설치 관리자를 실행합니다.
* 
일부 JDK 8 빌드(ThingWorx 9.2 이상에서는 지원되지 않음)의 경우 파일 이름은 jdk1.8.0_xxx-amd64와 유사합니다. 아래의 예에서는 jdk-11.x.x를 사용하지만 필요하면 사용 중인 버전으로 대체하십시오.
sudo rpm -i jdk-11.x.x_linux-x64_bin.rpm
4. 폴더를 만들고 JDK를 이동합니다.
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv /usr/java/jdk-11.x.x/ /usr/lib/jvm/
5. 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. 액세스 권한을 변경합니다.
$ sudo chmod a+x /usr/bin/java
$ sudo chmod a+x /usr/bin/keytool
오류가 발생하면 다음 명령을 사용하십시오.
$ sudo chmod -f a+x /usr/bin/keytool
7. 소유자를 변경합니다.
$ sudo chown -R root:root /usr/lib/jvm/jdk-11.x.x/
8. 마스터 링크를 구성합니다.
$ sudo alternatives --config java
/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
File Exists 오류가 발생하면 무시하고 계속 진행합니다.
$ sudo alternatives --config keytool
9. 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)
10. Tomcat을 설치합니다. Tomcat 설치 관리자를 다운로드합니다. 이 프로세스의 단계에서는 Tomcat 9.0.xx를 사용합니다. 여기서 xx는 사용하는 버전으로 대체됩니다.
$ wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.xx/bin/apache-tomcat-9.0.xx.tar.gz
* 
가장 좋은 방법은 각 릴리즈에 대한 서명 또는 체크섬을 사용하여 Tomcat 파일의 무결성을 확인하는 작업을 포함하는 것입니다. 자세한 내용은 Apache 설명서를 참조하십시오.
11. 콘텐츠를 추출합니다.
$ tar -xf apache-tomcat-9.0.xx.tar.gz
12. Tomcat을 /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. 루트 사용자로 /etc/environment 파일에 환경 변수를 정의합니다.
export JAVA_HOME=/usr/lib/jvm/jdk-11.x.x_xxx
export CATALINA_HOME=/usr/share/tomcat9.0/9.0.xx
14. 루트 사용자로 다음을 실행합니다.
source /etc/environment
15. 폴더를 /usr/share/tomcat9.0/9.0.xx로 변경합니다.
$ cd /usr/share/tomcat9.0/9.0.xx
16. 시스템에 사용자와 그룹을 추가합니다.
$ 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. bin/, lib/webapps/의 소유자와 액세스 권한을 변경합니다.
$ sudo chown -Rh tomcat9.0:tomcat9.0 bin/ lib/ webapps/
$ sudo chmod 775 bin/ lib/ webapps/
18. 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. 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
운영 체제 수준의 보안 향상을 위해 생산 시스템에 대한 권한 및 소유권을 다시 논의해야 합니다.
20. logs/, temp/work/의 액세스 권한을 변경합니다.
$ sudo chown -R tomcat9.0:adm logs/ temp/ work/
$ sudo chmod 760 logs/ temp/ work/
21. 자체 서명된 인증서를 생성합니다.
$ /usr/lib/jvm/jdk-11.x.x_xxx/jre/bin/keytool -genkey -alias tomcat9.0 -keyalg RSA
22. 지침에 따라 인증서 생성 프로세스를 완료합니다.
키 저장소 암호를 설정합니다.
프롬프트에 따라 보안 인증서를 설정합니다.
tomcat9.0 사용자 암호를 키 저장소 암호와 동일하게 설정합니다.
$ 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. 재시작 시 세션이 지속되지 않도록 context.xmlManager 요소에서 의견을 삭제합니다. 텍스트 편집기에서 루트로 /usr/share/tomcat9.0/9.0.xx/conf/context.xml을 열고 ‘<Manager pathname="" />’ 앞에 있는 ‘<!—‘ 및 뒤에 있는 ‘-->’를 제거합니다.
24. 파일을 저장합니다.
25. tomcat-users.xml에서 Apache Manager 사용자를 정의합니다. 텍스트 편집기에서 루트로 /usr/share/tomcat9.0/9.0.xx/conf/tomcat-users.xml을 엽니다. 마지막 행 (</tomcat-users>) 바로 위에 다음 줄을 추가합니다.
<user username="<Tomcat username> " password="<Tomcat password> " roles="manager,manager-gui"/>
26. 파일을 저장합니다.
* 
포함된 역할은 쉽게 테스트하기 위한 용도이며, 보안이 우려되는 경우 제거할 수 있습니다.
27. 부팅 시 시작되는 서비스로 Tomcat을 설정합니다. 먼저 루트로 JSVC를 빌드합니다(시스템에 아직 설치되지 않은 경우).
$ 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. Tomcat 서비스 파일을 생성합니다.
$ sudo touch /usr/lib/systemd/system/tomcat.service
29. 텍스트 편집기에서 루트로 /usr/lib/systemd/system/tomcat.service를 열고 다음을 붙여넣습니다.
* 
아래 예에서 -Xms-Xmx에 대한 값을 가용 OS 메모리의 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 \
-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. ThingWorx Platform을 처음으로 설치하는 경우 위의 ExecStart 블록에서 -Djava.library.path로 시작하는 줄 바로 다음에 Java 옵션 -Duser.timezone=UTC를 추가해야 합니다. UTC 표준 시간대는 일광 절약 시간을 인식하지 않습니다. 이 옵션을 설정하면 일광 절약 시간 변경이 발생할 때 데이터를 덮어쓰는 것이 방지됩니다.
31. Tomcat usr/share/tomcat9.0/9.0.xx/bin 파일에 setenv.sh라는 새 파일을 만들고 파일에 다음 콘텐츠를 추가합니다.
CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/share/tomcat9.0/9.0.xx/webapps/Thingworx/WEB-INF/extensions"
32. 시스템 시작 시 실행되도록 Tomcat을 설정합니다.
$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat.service
* 
위 명령을 실행할 때 권한 오류가 발생하면 루트로 다음을 실행합니다.
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
이렇게 하면 사용자가 다음 명령으로 Tomcat 서비스를 제어할 수 있습니다.
sudo systemctl start tomcat
sudo systemctl stop tomcat
sudo systemctl restart tomcat
sudo systemctl status tomcat
33. Tomcat 설치 위치에서 CATALINA_HOME/conf/web.xml을 열어 기본 오류 페이지(기본값: 스택 추적)를 바꿉니다. 다음을 web-app 태그(welcome-file-list 태그 뒤) 내에 배치합니다.
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
제대로 구성된 웹 응용 프로그램은 CATALINA_HOME/webapps/APP_NAME/WEB-INF/web.xml에서 이 기본값을 재정의하므로 문제가 발생하지 않습니다.
34. Tomcat 설치 위치에서 CATALINA_HOME/conf/server.xml을 엽니다. <Host> </Host> 태그 내부에 다음을 추가합니다.
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
* 
아직 수행하지 않은 경우 보안을 위해 다음 단계를 수행하여 기본적으로 AJP 커넥터를 비활성화하는 것이 중요합니다.
35. Tomcat 설치 위치에서 conf/server.xml을 열고 다음 줄을 검색합니다. 줄을 찾으면 주석으로 처리하고 파일을 저장합니다.
<Connector port ="8009" protocol="AJP/1.3" redirectPort="8443"/>
* 
Apache Tomcat 9.0 이상에서 rejectIllegalHeader 속성의 기본값은 true입니다. conf/web.xml 파일을 수동으로 편집하여 이 속성을 false로 설정하는 것은 권장되지 않거나 PTC에서 지원되지 않습니다.
36. /<tomcat의 경로>/webapps/에 있는 모든 Tomcat 예제 웹 앱(docs, examples, host-manager, manager, ROOT)을 제거합니다. 이러한 앱을 제거하면 특히 사용자가 다른 사용자 쿠키를 볼 수 있도록 허용할 컨텍스트에서 Tomcat에 대한 불필요한 액세스를 방지할 수 있습니다.
37. PTC에서는 ThingWorx 실행 시 TLS를 사용할 것을 강력히 권장합니다. TLS 설정에 대한 자세한 내용은 이 기술 지원 문서를 참조하십시오.
38. 응용 프로그램에 특정 암호화 제품군이 필요한 경우 구성 정보는 다음 설명서를 참조하십시오.
Ulimit 설정 구성
Tomcat 응용 프로그램 서버 프로세스를 "루트" 사용자로 실행하면 전반적인 시스템 보안이 손상되고 산업 모범 사례를 위반하게 됩니다. 이를 방지하기 위해 응용 프로그램 서버를 실행하는 사용자와 관련된 설정을 포함하도록 /etc/security/limits.d/80-nofiles.conf 파일을 수정하는 것이 좋습니다.
구성 파일의 예
다음 구성은 필요한 변경 사항이 포함된 /etc/security/limits.d/80-nofiles.conf에 있는 기본 Redhat OS 구성의 예입니다. 다음 예에서 thingworx는 응용 프로그램 서버에 대한 사용자의 이름입니다.

thingworx soft nofile 30720
thingworx hard nofile 30720
이 변경 사항을 커밋하려면 로그아웃한 다음 시스템에 로그인하십시오.
ThingWorx 설치
1. /ThingworxStorage, /ThingworxBackupStorage/ThingworxPlatform 디렉터리를 만듭니다.
$ sudo mkdir /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
2. /ThingworxPlatform, /ThingworxStorage /ThingworxBackupStorage의 소유자와 액세스 권한을 변경합니다. 이러한 권한이 없으면 서버가 시작하지 않습니다.
$ sudo chown tomcat9.0:tomcat9.0 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
$ sudo chmod 775 /ThingworxStorage /ThingworxBackupStorage /ThingworxPlatform
3. 사용하는 데이터베이스에 대한 적절한 Thingworx 파일을 가져옵니다. 최신 ThingWorx 다운로드는 support.ptc.com소프트웨어 다운로드 > 소프트웨어 업데이트 주문 또는 다운로드 > ThingWorx Foundation > Release X.X > ThingWorx PostgreSQL, ThingWorx Mssql, ThingWorx H2 또는 ThingWorx 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. ThingworxPlatform 폴더에 platform-settings.json을 배치합니다.
* 
H2를 사용하는 경우 platform-settings.json 파일을 만들어야 합니다. 이 파일은 다운로드에 포함되지 않습니다.
6. H2를 데이터베이스로 사용하는 경우 이 단계를 수행합니다. H2를 데이터베이스로 사용하지 않는 경우 다음 단계로 이동합니다. platform-settings.json 파일에 H2에 대한 사용자 이름 및 암호를 추가합니다. 자세한 정보는 platform-settings.json 구성 세부 정보를 참조하십시오.
* 
H2 데이터베이스에 ThingWorx를 연결하려면 사용자가 정의한 사용자 이름 및 암호가 필요합니다. 없으면 서버가 시작되지 않습니다. 이 설계로 인해 CVE-2018-10054에서 나타날 수 있는 잠재적 취약점이 완전하게 완화됩니다.
},
"PersistenceProviderPackageConfigs":{
"H2PersistenceProviderPackage":{
"ConnectionInformation":
{
"password": "<addsecurepassword>",
"username": "twadmin"
}
},
7. 관리자 암호를 구성합니다.
다음 AdministratorUserSettings 섹션(PlatformSettingsConfig에 위치)을 14자 이상의 암호가 포함된 platform-settings.json 파일에 추가합니다. 배치에 대한 자세한 내용은 platform-settings.json 구성 옵션을 참조하십시오. 암호 설정에 대한 자세한 내용은 암호를 참조하십시오.
* 
아래의 샘플을 복사하여 붙여넣지 마십시오. platform-settings.json에 잘못된 서식이 적용될 수 있습니다. 대신 여기를 클릭하고 파일에서 복사합니다.

{
"PlatformSettingsConfig": {
"AdministratorUserSettings": {
"InitialPassword": "changeme"
}
}
}
* 
Tomcat이 시작하지 않고 Check the InitialPassword setting in the AdministratorUserPassword section in platform-settings.json... 오류 메시지가 보고되면 다음을 확인하십시오.
암호 설정이 platform-settings.json에 있는지 여부
암호가 유효한지 여부(기본값으로 14자 이상)
platform-settings.json 파일이 올바르게 서식 적용되었는지 여부. 잘못된 서식을 적용하면 오류가 발생할 수 있습니다.
8. 확장 가져오기를 사용합니다. 기본적으로 모든 사용자에 대해 확장 가져오기가 비활성화됩니다.
다음을 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>
},
9. 데이터베이스에 대해 H2를 사용하지 않는 경우 데이터베이스 설치 및 구성으로 이동하여 데이터베이스를 설정합니다. 데이터베이스가 구성되면 다음 단계로 돌아갑니다. H2를 사용하고 있는 경우 다음 단계로 진행합니다.
10. 라이선스를 구성합니다.
platform-settings.json 파일을 열고 PlatformSettingsConfig 섹션에 다음을 추가합니다. 배치에 대한 자세한 내용은 platform-settings.json 구성 옵션을 참조하십시오.
* 
연결 해제된 설치(인터넷 액세스 없음)를 수행할 경우 platform-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>"
}
}
}
* 
설정이 잘못 작성되거나 서버가 연결할 수 없는 경우 라이선스 요청 텍스트 파일(licenseRequestFile.txt)이 ThingworxPlatform 폴더에 생성됩니다. 이 시나리오에서는 라이선스를 수동으로 생성해야 합니다. 라이선스를 만들지 않은 경우 ThingWorx가 제한된 모드에서 시작됩니다. 제한된 모드에서는 라이선스가 허여된 엔티티를 데이터베이스에 지속할 수 없습니다. 라이선스가 부여된 엔티티는 사물, 매쉬업, 마스터, 가젯, 사용자 및 지속성 공급자입니다.
라이선스 관리 사이트를 통해 ThingWorx 연결이 끊긴 사이트 라이선스를 얻는 방법에 대한 자세한 내용은 연결이 끊긴 사이트에 대한 ThingWorx Platform용 라이선스를 참조하십시오(PTC 지원 포털에 연결되지 않음). 이 경우 라이선스 파일을 수동으로 생성하면 해당 파일의 이름을 license_capability_response.bin으로 변경하고 해당 파일을 ThingworxPlatform 폴더에 배치해야 합니다.
* 
라이선스 문제 해결에 대한 자세한 내용은 이 지원 문서를 참조하십시오.
11. 암호 암호화에서 다음 단계를 수행하여 라이선스 서버 암호를 암호화합니다.
12. Azure SQL을 데이터베이스로 사용하는 경우 다음 단계에 따라 JDBC 드라이버를 다운로드합니다. Azure SQL을 사용하지 않는 경우 이 단계를 건너뜁니다.
a. Azure 포털로 이동하여 ThingWorx 데이터베이스로 이동합니다.
b. 연결 문자열을 선택합니다.
c. JDBC 탭을 선택합니다.
d. SQL Server용 Microsoft JDBC 드라이버 다운로드를 선택합니다.
e. SQL Server용 Microsoft JDBC Driver 6.0을 선택합니다.
f. ThingWorx VM에서 다운로드한 바이너리를 추출하여 Tomcat lib 디렉터리로 복사합니다.
13. Tomcat을 시작합니다.

$ sudo systemctl start tomcat
라이선스 파일(successful_license_capability_response.bin)이 ThingworxPlatform 폴더에서 생성되었는지 확인합니다.
14. ThingWorx를시작하려면 웹 브라우저에서 http://<서버 이름>:<포트>/Thingworx로 이동합니다.
15. 기본 암호를 변경합니다.
a. Composer에서 관리자 > 암호 변경을 선택합니다.
b. 암호 변경 창에서 현재 암호, 새 암호암호 확인을 입력합니다.
* 
암호는 쉽게 추측할 수 없고, 알 수 없어야 하며, 공통 암호가 아니어야 합니다. 길이는 14자 이상이 권장되며 대문자, 소문자, 숫자 및 특수 문자가 조합되어야 합니다.
c. platform-settings.json 파일에서 초기 암호를 삭제합니다.
16. 완료를 선택합니다.
17. (선택적 단계) 라이선스 상태를 확인하려면 Composer에서 모니터링>하위 시스템>라이선싱 하위 시스템 설정을 열어 라이선스가 포함된 기능(라이선스가 허여된 엔티티)의 목록을 확인합니다. 라이선스가 허여된 엔티티가 없으면 제한된 모드 상태입니다.
도움이 되셨나요?