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) { appHome = '${app.home}' 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) { appHome = '${app.home}' 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