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