설치 및 구성 > ThingWorx 설치 > Ubuntu 설치 > H2/Azure SQL > Java 및 Apache Tomcat 설치(Ubuntu)
Java 및 Apache Tomcat 설치(Ubuntu)
아래 단계에서 xx 또는 xxx를 사용하는 빌드 번호로 대체하십시오.
1. 데이터베이스에 AzureSQL을 사용하는 경우 Azure SQL Server를 지속성 공급자로 사용으로 이동합니다. 해당 단원의 단계를 수행하여 데이터베이스를 설정하면 이 단원으로 돌아갑니다.
2. 데이터베이스에 대해 MSSQL을 사용하는 경우 MSSQL을 지속성 공급자로 사용 으로 이동합니다. 해당 단원의 단계를 수행하여 데이터베이스를 설정하면 이 단원으로 돌아갑니다.
3. Ubuntu 패키지를 업데이트합니다.
$ sudo apt-get update
4. 시간 동기화를 위해 NTP(Network Time Protocol) 설정을 설치하고 구성합니다. NTP의 기본 구성이면 충분합니다. NTP에 대한 추가 구성 정보(이 설명서의 범위를 벗어남)는 다음 리소스를 참조하십시오.
$ sudo apt-get install ntp
5. Tomcat이 1024 이하의 포트에 바인딩할 수 있도록 AUTHBIND 속성을 편집합니다.
$ sudo apt-get install authbind
6. 버전 요구사항은 ThingWorx 시스템 요구사항을 참조하십시오. Oracle 웹 사이트에서 적절한 Java JDK tar 파일을 다운로드합니다.
7. tar 파일을 추출합니다.
$ tar -xf jdk-8uxxx-linux-x64.tar.gz
8. JDK를 /usr/lib/jvm으로 이동하여 디렉터리를 만듭니다. 디렉터리가 비어 있지 않으면 경고 메시지가 표시됩니다.
$ sudo mkdir -p /usr/lib/jvm
$ sudo mv jdk1.8.0_xxx/ /usr/lib/jvm/
9. 시스템에 대체를 추가합니다.
$ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_xxx/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/keytool" "keytool" "/usr/lib/jvm/jdk1.8.0_xxx/bin/keytool" 1
10. 액세스 권한을 변경합니다.
$ sudo chmod a+x /usr/bin/java
$ sudo chmod a+x /usr/bin/keytool
11. 소유자를 변경합니다.
$ sudo chown -R root:root /usr/lib/jvm/jdk1.8.0_xxx/
12. 마스터 링크를 구성합니다.
$ sudo update-alternatives --config java
$ sudo update-alternatives --config keytool
Nothing to configure는 이 명령에 대한 정상 응답이며 오류가 아닙니다. 이전 단계 집합을 사용하여 /usr/lib/jvm/jdk1.8.0_xxx/bin/에 있는 추가 실행 파일을 설치할 수 있습니다.
13. Java 버전을 확인합니다.
$ java -version
이렇게 하면 다음과 유사한 결과가 반환되어야 합니다(빌드 세부 사항은 다를 수 있음).
java version "1.8.0_xxx"
Java(TM) SE Runtime Environment (build 1.8.0_xxx-bxx)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-bxx, mixed mode)
14. Apache Tomcat을 다운로드합니다. 이 프로세스의 단계에서는 Tomcat 8.5.xx를 사용합니다. 여기서 xx는 사용하는 버전으로 대체됩니다.
$ wget http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.xx/bin/apache-tomcat-8.5.xx.tar.gz
* 
가장 좋은 방법은 각 릴리즈에 대한 서명 또는 체크섬을 사용하여 Tomcat 파일의 무결성을 확인하는 작업을 포함하는 것입니다. 자세한 내용은 Apache 설명서를 참조하십시오.
15. tar 파일을 추출합니다.
$ tar -xf apache-tomcat-8.5.xx.tar.gz
16. /usr/share/tomcat8.5에 대한 소유자를 생성 및 변경하고 Tomcat을 다음 위치로 이동합니다. 시스템에 사용자와 그룹을 추가합니다.
$ sudo mkdir -p /usr/share/tomcat8.5
$ sudo mv apache-tomcat-8.5.xx /usr/share/tomcat8.5/8.5.xx
$ sudo addgroup --system tomcat8.5 --quiet -force-badname
$ sudo adduser --system --home /usr/share/tomcat8.5/ --no-create-home --ingroup tomcat8.5 --disabled-password --force-badname --shell /bin/false tomcat8.5
$ sudo chown -R tomcat8.5:tomcat8.5 /usr/share/tomcat8.5
17. /etc/environment에서 환경 변수를 정의합니다.
$ export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_xxx
$ export CATALINA_HOME=/usr/share/tomcat8.5/8.5.xx
18. 디렉터리를 $CATALINA_HOME으로 변경합니다.
$ cd $CATALINA_HOME
19. bin/, lib/webapps/의 소유자와 액세스 권한을 변경합니다.
$ sudo chown -Rh tomcat8.5:tomcat8.5 bin/ lib/ webapps/
$ sudo chmod 775 bin/ lib/ webapps/
20. usr/share/tomcat8.5/8.5xx의 소유자 및 액세스 권한을 변경합니다.
sudo chown -R tomcat8.5:tomcat8.5 /usr/share/tomcat8.5/8.5.xx
sudo chmod -R 775 /usr/share/tomcat8.5/8.5.xx
21. conf/의 소유자와 액세스 권한을 변경합니다.
$ sudo chown -Rh root:tomcat8.5 conf/
$ sudo chmod -R 650 conf/
22. logs/, temp/work/의 액세스 권한을 변경합니다.
$ sudo chown -R tomcat8.5:adm logs/ temp/ work/
$ sudo chmod 760 logs/ temp/ work/
23. 자체 서명된 인증서를 만듭니다.
$ sudo $JAVA_HOME/bin/keytool -genkey -alias tomcat8.5 -keyalg RSA -keystore $CATALINA_HOME/conf/.keystore
24. 지침에 따라 인증서 생성 프로세스를 완료합니다.
키 저장소 암호를 설정합니다.
프롬프트에 따라 보안 인증서를 설정합니다.
tomcat8.5 사용자 암호를 키 저장소 암호와 동일하게 설정합니다.
$ sudo chown root:tomcat8.5 $CATALINA_HOME/conf/.keystore
$ sudo chmod 640 $CATALINA_HOME/conf/.keystore
25. 재시작 시 세션이 지속되지 않도록 $CATALINA_HOME/conf/context.xmlManager 요소에서 의견을 삭제합니다.
<Manager pathname="" />
* 
아직 수행하지 않은 경우 보안을 위해 다음 단계를 수행하여 기본적으로 AJP 커넥터를 비활성화하는 것이 중요합니다.
26. Tomcat 설치 위치에서 conf/server.xml을 열고 다음 줄을 검색합니다. 줄을 찾으면 주석으로 처리하고 파일을 저장합니다.
<Connector port ="8009" protocol="AJP/1.3" redirectPort="8443"/>
* 
Apache Tomcat 9.0 이상에서 rejectIllegalHeader 속성의 기본값은 true입니다. conf/web.xml 파일을 수동으로 편집하여 이 속성을 false로 설정하는 것은 권장되지 않거나 PTC에서 지원되지 않습니다.
* 
디렉터리가 없다는 오류가 발생하면 다음 명령을 사용하여 포트 443이 작동하는지 확인하십시오.
sudo touch /etc/authbind/byport/443
sudo chmod 700 /etc/authbind/byport/443
sudo chown tomcat8.5:tomcat8.5 /etc/authbind/byport/443
27. $CATALINA_HOME/conf/tomcat-users.xml에서 사용자를 정의합니다.
sudo vi $CATALINA_HOME/conf/tomcat-users.xml
<user username="<Tomcat user name> " password="<Tomcat password> " roles="manager"/>
28. tomcat8.5 사용자의 UID를 결정합니다.
$ id -u tomcat8.5
29. 이 번호를 사용하려면 /etc/authbind/byuid/에 ID 파일을 만듭니다. <uid>를 이전 단계에서 반환된 번호로 변경합니다.
$ sudo touch /etc/authbind/byuid/<uid>
sudo vi /etc/authbind/byuid/<uid>
30. 위 단계에서 파일을 편집하고 다음 위치에 붙여넣습니다.
0.0.0.0/0:1,1023
31. /etc/authbind/byuid/<uid>의 소유자와 액세스 권한을 변경합니다.
$ sudo chown tomcat8.5:tomcat8.5 /etc/authbind/byuid/<uid>
$ sudo chmod 700 /etc/authbind/byuid/<uid>
32. 항상 authbind를 사용하도록 $CATALINA_HOME/bin/startup.sh를 수정합니다.
sudo vi $CATALINA_HOME/bin/startup.sh
파일의 다음에 의견을 작성합니다.
#exec "$PRGDIR"/"$EXECUTABLE" start "$@"
33. 파일 끝에 다음을 추가합니다.
exec authbind --deep "$PRGDIR"/"$EXECUTABLE" start "$@"
34. /etc/init.d에서 tomcat8.5 파일을 생성합니다.
$ sudo touch /etc/init.d/tomcat8.5
35. 파일을 편집하고 다음 콘텐츠를 입력합니다.
$ sudo vi /etc/init.d/tomcat8.5

CATALINA_HOME=/usr/share/tomcat8.5/8.5.xx
case $1 in
start)
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/startup.sh
;;
stop)
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/shutdown.sh
;;
restart)
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/shutdown.sh
/bin/su -p -s /bin/sh tomcat8.5 $CATALINA_HOME/bin/startup.sh
;;
esac
exit 0
36. etc/init.d/tomcat8.5의 액세스 권한을 변경하고 기호 링크를 생성합니다.
$ sudo chmod 755 /etc/init.d/tomcat8.5
$ sudo ln -s /etc/init.d/tomcat8.5 /etc/rc1.d/K99tomcat
$ sudo ln -s /etc/init.d/tomcat8.5 /etc/rc2.d/S99tomcat
37. 부팅 시 시작되는 서비스로 Tomcat을 설정합니다. 먼저 JSVC를 빌드합니다. 시스템에 JSVC가 이미 설치된 경우 다음 단계로 이동합니다.
$ sudo apt-get install gcc
38. 부팅 시 Tomcat 서비스를 설정합니다.
$ cd /usr/share/tomcat8.5/8.5.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 ../..
39. Tomcat 서비스 파일을 생성합니다.
sudo touch /etc/systemd/system/tomcat8.5.service
40. 텍스트 편집기에서 루트로 /etc/systemd/system/tomcat8.5.service를 엽니다.
sudo vi /etc/systemd/system/tomcat8.5.service
a. 다음을 Tomcat 서비스 파일에 붙여넣습니다.
* 
아래 예에서 -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/jdk1.8.0_xxx
Environment=CATALINA_HOME=/usr/share/tomcat8.5/8.5.xx
Environment=CATALINA_BASE=/usr/share/tomcat8.5/8.5.xx
Environment=CATALINA_OPTS=

ExecStart=/usr/share/tomcat8.5/8.5.xx/bin/jsvc \
-Dcatalina.home=${CATALINA_HOME} \
-Dcatalina.base=${CATALINA_BASE} \
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dserver -Dd64 -XX:+UseNUMA \
-XX:+UseG1GC -Dfile.encoding=UTF-8 \
-Djava.library.path=${CATALINA_BASE}/webapps/Thingworx/WEB-INF/extensions \
-Xms=<75% of available OS memory> \
-Xmx=<75% of available OS memory> \
-cp ${CATALINA_HOME}/bin/commons-daemon.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
-user tomcat8.5 \
-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 enable tomcat8.5.service 실행 시 다음 오류가 나타나는 경우:
update-rc.d: error: tomcatx.x Default-Start contains no runlevels, aborting.
다음 단계를 수행해야 합니다.
/etc/init.d에 있는 tomcat8.5 파일을 제거하고 다음 명령을 다시 실행합니다.
sudo systemctl enable tomcat8.5.service
c. 다음 오류가 나타나는 경우:
insserv: warning: script 'tomcat8.5' missing LSB tags and override
/etc/systemd/system/tomcat8.5.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 tomcat8.5 start
41. ThingWorx Platform을 처음으로 설치하는 경우 위의 ExecStart 블록에서 -Djava.library.path로 시작하는 줄 바로 다음에 Java 옵션 -Duser.timezone=UTC를 추가해야 합니다. UTC 표준 시간대는 일광 절약 시간을 인식하지 않습니다. 이 옵션을 설정하면 일광 절약 시간 변경이 발생할 때 데이터를 덮어쓰는 것이 방지됩니다.
* 
기존 고객은 지금 이 설정을 업데이트하지 않아야 합니다.
42. 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/tomcat8.5/8.5.xx/webapps/Thingworx/WEB-INF/extensions"
43. Tomcat 설치 위치에서 CATALINA_HOME/conf/web.xml을 엽니다. 다음을 web.xml 파일에 추가하여 기본 오류 페이지(기본값: stacktrace)를 바꿉니다. 다음을 web-app 태그(welcome-file-list 태그 뒤) 내에 배치합니다. 제대로 구성된 웹 응용 프로그램은 CATALINA_HOME/webapps/APP_NAME/WEB-INF/web.xml에서 이 기본값을 재정의하므로 문제가 발생하지 않습니다.
<error-page><exception-type>java.lang.Throwable</exception-type><location>/error.jsp</location></error-page>
44. Tomcat 설치 위치에서 CATALINA_HOME/conf/server.xml을 엽니다. <Host> </Host> 태그 내부에 다음을 추가합니다.
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
45. /<path_to_tomcat>/webapps/에 있는 모든 Tomcat WebApp을 제거합니다. 이러한 앱을 제거하면 특히 사용자가 다른 사용자의 쿠키를 볼 수 있도록 허용할 컨텍스트에서 Tomcat에 대한 불필요한 액세스를 방지할 수 있습니다.
46. PTC에서는 ThingWorx 실행 시 TLS를 사용할 것을 강력히 권장합니다. TLS 설정에 대한 자세한 내용은 이 기술 지원 문서를 참조하십시오.
47. 응용 프로그램에 특정 암호화 제품군이 필요한 경우 구성 정보는 다음 설명서를 참조하십시오.
48. (선택적 단계) 정적 파일 캐싱에 영향을 주는 기본 캐시 설정을 늘리려면 $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
49. H2 및 Azure SQL: ThingWorx 설치로 이동합니다.
50. PostgreSQL: PostgreSQL 설치 및 구성으로 이동합니다.