Установка Java и Apache Tomcat (Ubuntu)
1. Если для базы данных используется AzureSQL, переходите к разделу Использование Azure SQL Server в качестве поставщика хранилища данных. Выполните шаги, описанные в этом разделе, чтобы настроить базу данных, и вы будете снова отсылаться к этому разделу.
2. Если используется база данных MSSQL, см. раздел Использование MSSQL в качестве поставщика хранилища данных. Выполните шаги, описанные в этом разделе, чтобы настроить базу данных, и вы будете снова отсылаться к этому разделу.
3. Обновление пакетов Ubuntu:
$ sudo apt-get update
4. Установка и конфигурирование настроек Network Time Protocol (NTP) для синхронизации времени:
$ sudo apt-get install ntp
* 
Конфигурация NTP по умолчанию является достаточной. Дополнительные сведения о конфигурации NTP (помимо этой документации) см. на следующих веб-станицах:
5. Отредактируйте свойства AUTHBIND, чтобы разрешить приложению Tomcat связываться с портами, для которых номер порта меньше 1024:
$ sudo apt-get install authbind
6. Загрузите tar-файл Java JDK с веб-сайта Oracle или выполните следующие команды:
wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
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
Эта команда должна возвратить код, аналогичный следующему (сборки (build) могут быть другими):
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 xx.xx-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. Следуйте инструкциям, чтобы выполнить процесс создания сертификата.
Задайте пароль для хранилища KeyStore.
Следуйте подсказкам, чтобы настроить сертификат безопасности.
Задайте пароль пользователя tomcat8.5, совпадающий с паролем KeyStore:
$ sudo chown root:tomcat8.5 $CATALINA_HOME/conf/.keystore
$ sudo chmod 640 $CATALINA_HOME/conf/.keystore
25. Раскомментируйте элемент Manager в файле $CATALINA_HOME/conf/context.xml, чтобы предотвратить сохранение сессий при перезапусках:
<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. Определите идентификатор пользователя (uid) Tomcat 8.5:
$ id -u tomcat8.5
29. Используя этот номер, создайте файл идентификатора в папке /etc/authbind/byuid/.
* 
Замените <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. Измените $CATALINA_HOME/bin/startup.sh, чтобы всегда использовать утилиту authbind:
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, если она еще не установлена в вашей системе. Если она уже установлена, пропустите этот шаг и перейдите к следующему:
$ 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 в текстовом редакторе (от имени пользователя root):
sudo vi /etc/systemd/system/tomcat8.5.service
a. Вставьте следующий код в service-файл Tomcat:
* 
В приведенном ниже примере задайте значения для -Xms и -Xmx как 75 % доступного объема памяти ОС (например, 12 ГБ для системы с ОЗУ 16 ГБ). Дополнительные сведения см. в разделе Настройка 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.
Тогда требуется следующий шаг:
Удалите файл tomcat8.5, расположенный в папке /etc/init.d, и выполните следующую команду:
sudo systemctl enable tomcat8.5.service
41. Создайте в файле 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"
42. В расположении установки Tomcat откройте файл CATALINA_HOME/conf/web.xml. Замените страницу с ошибками по умолчанию (значение по умолчанию: stacktrace), добавив в файл web.xml следующие данные. Поместите следующий код в тег 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>
43. В расположении установки Tomcat откройте файл CATALINA_HOME/conf/web.xml. Добавьте внутрь тегов <Host> </Host> следующее:
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
44. Удалите все веб-приложения Tomcat, расположенные в папке /<путь_к_tomcat>/webapps/. Удаление этих приложений предотвращает нежелательный доступ к Tomcat, особенно в контексте, который позволит пользователям просматривать файлы cookie других пользователей.
45. PTC настоятельно рекомендует использовать TLS при выполнении ThingWorx. Подробные инструкции по настройке TLS см. в статье технической поддержки (на английском языке).
46. Если для приложения требуется специальный набор шифров, обратитесь к следующей документации для получения информации о конфигурации:
47. (НЕОБЯЗАТЕЛЬНЫЙ ШАГ) Чтобы увеличить настройки кэша по умолчанию, влияющие на кэширование статических файлов, добавьте следующую строку, заключенную в теги <context></context> , в файл $CATALINA_HOME/conf/context.xml :
<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
48. H2 и Azure SQL: перейдите к разделу Установка ThingWorx.
49. PostgreSQL: перейдите в раздел Установка и конфигурирование PostgreSQL.