5.3.5. Развертывание WAR в Tomcat Linux Service
Инструкция ниже разработана и проверена для Ubuntu 18.04, для пакетов tomcat9 и tomcat8.
-
Откройте диалог в Studio: дерево проектов CUBA > Project > Deployment > WAR Settings, или просто вручную добавьте задачу buildWar в конец скрипта сборки build.gradle. Вы можете указать отдельный файл проекта
war-context.xmlдля указания настроек подключения к базе данных, или предоставить этот файл позже на сервере:task buildWar(type: CubaWarBuilding) { singleWar = true includeContextXml = true includeJdbcDriver = true appProperties = ['cuba.automaticDatabaseUpdate': true] webXmlPath = 'modules/web/web/WEB-INF/single-war-web.xml' coreContextXmlPath = 'modules/core/web/META-INF/war-context.xml' }Если параметры конечного сервера отличаются от тех, что установлены на локальном Tomcat, используемом для быстрого развертывания, укажите соответствующие свойства приложения. Например, если конечный сервер запущен на порту 9999 и вы используете сборку раздельных WAR файлов, то определение задачи должно выглядеть следующим образом:
task buildWar(type: CubaWarBuilding) { singleWar = false includeContextXml = true includeJdbcDriver = true appProperties = [ 'cuba.automaticDatabaseUpdate': true, 'cuba.webPort': 9999, 'cuba.connectionUrlList': 'http://localhost:9999/app-core' ] } -
Запустите Gradle задачу
buildWar. В результате, файлapp.war(или несколько файлов, если вы настроили сборку раздельных WAR) будет собран в каталогеbuild/distributionsвашего проекта.gradlew buildWar -
Установите пакет Tomcat 9:
sudo apt install tomcat9 -
Скопируйте сборку
app.warв каталог/var/lib/tomcat9/webappsсервера. Вы также можете удалить каталог/var/lib/tomcat9/webapps/ROOTс примером веб-приложения, если он существует.Служба Tomcat 9 по умолчанию работает от пользователя
tomcat. Владелец каталогаwebapps- такжеtomcat. -
Создайте домашний каталог приложения, например
/opt/app_homeи сделайте пользователя, под которым работает Tomcat (tomcat), владельцем этого каталога:sudo mkdir /opt/app_home sudo chown tomcat:tomcat /opt/app_home -
Сервис Tomcat 9 (в отличие от предыдущих версий Debian-пакета Tomcat) работает в "песочнице" systemd и имеет ограниченный доступ к файловой системе. Дополнительную информацию об этом см. в файле
/usr/share/doc/tomcat9/README.Debian. Необходимо поменять настройки systemd, чтобы разрешить сервису Tomcat доступ на запись к домашнему каталогу приложения:-
Создайте файл
override.confв каталоге/etc/systemd/system/tomcat9.service.d/sudo mkdir /etc/systemd/system/tomcat9.service.d/ sudo nano /etc/systemd/system/tomcat9.service.d/override.conf -
Содержимое файла
override.conf:[Service] ReadWritePaths=/opt/app_home/ -
Обновите конфигурацию systemd, выполнив:
sudo systemctl daemon-reload
-
-
Создайте конфигурационный файл
/usr/share/tomcat9/bin/setenv.shсо следующим содержимым:CATALINA_OPTS="$CATALINA_OPTS -Xmx1024m" CATALINA_OPTS="$CATALINA_OPTS -Dapp.home=/opt/app_home"Если вы наблюдаете медленный запуск Tomcat, установленного на виртуальной машине (VPS), добавьте дополнительную строчку в скрипт
setenv.sh:CATALINA_OPTS="$CATALINA_OPTS -Djava.security.egd=file:/dev/./urandom" -
Если вы хотите предоставить параметры подключения к БД через локальный файл на сервере, создайте файл в каталоге
/var/lib/tomcat9/conf/Catalina/localhost/. Название файла зависит от названия WAR-сборки, напримерapp.xmlдля single WAR, илиapp-core.xml, если собираются раздельные WAR-файлы. Скопируйте содержимоеcontext.xmlв этот файл. -
При использовании настроек по умолчанию, все журнальные сообщения приложения попадают в системный журнал
/var/log/syslog. У вас есть два варианта, как кастомизировать настройки журналов:-
Создать файл конфигурации logback в вашем проекте. Укажите путь к этому файлу в параметре
logbackConfigurationFileзадачи buildWar (вручную или с помощью диалога Studio WAR Settings). -
Создать файл с настройками журналирования на конечном сервере.
Скопируйте файл
logback.xmlиз локального Tomcat (под-папкаdeploy/tomcat/confпроекта) в домашний каталог приложения и поменяйте свойствоlogDirв этом файле:<property name="logDir" value="${app.home}/logs"/>Добавьте следующую строчку в скрипт
setenv.sh, чтобы указать путь к настройкам журналирования:CATALINA_OPTS="$CATALINA_OPTS -Dlogback.configurationFile=/opt/app_home/logback.xml"
-
-
Перезапустите службу Tomcat:
sudo systemctl restart tomcat9 -
Откройте
http://localhost:8080/appв вашем веб-браузере.
- Изменения в случае использования пакета tomcat8
-
CUBA поддерживает развертывание и в Tomcat 9, и в Tomcat 8.5. Примите во внимание следующие различия процедуры развертывания приложения в Tomcat 8.5:
-
Tomcat 8.5 предоставляется пакетом
tomcat8 -
Имя пользователя -
tomcat8 -
Base каталог Tomcat -
/var/lib/tomcat8 -
Home каталог Tomcat -
/usr/share/tomcat8 -
Сервис Tomcat не использует "песочницу" systemd, поэтому нет необходимости менять настройки systemd.
-
Стандартные потоки вывода и ошибок пишутся в файл
/var/lib/tomcat8/logs/catalina.out.
-
- Решение проблем интеграции аддона Reporting с LibreOffice при использовании пакета tomcat9
-
При развертывании приложения через пакет tomcat9 и использовании интеграции аддона Reporting с LibreOffice вы можете столкнуться с проблемами запуска процессов LibreOffice. Ошибку можно диагностировать по этому сообщению в журнале:
2019-12-04 09:52:37.015 DEBUG [OOServer: ERR] com.haulmont.yarg.formatters.impl.doc.connector.OOServer - ERR: (process:10403): dconf-CRITICAL **: 09:52:37.014: unable to create directory '/.cache/dconf': Read-only file system. dconf will not work properly.Эта ошибка вызывана тем, что домашний каталог пользователя
tomcatуказывает на каталог, недоступный для записи. Это можно исправить, поменяв домашнюю папку пользователяtomcatна значение/var/lib/tomcat9/work:# проблемное значение echo ~tomcat / # исправить sudo systemctl stop tomcat9 sudo usermod -d /var/lib/tomcat9/work tomcat sudo systemctl start tomcat9