Apache Tomcat

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску

Руководство по установке Apache Tomcat

В данном документе представлена информация о базовой установке Apache Tomcat 7 на CentOS 7, первоначальной настройке и запуске приложений.

Общие сведения

Apache Tomcat – это серверное ПО для исполнения web-приложений, написанных на Java. Apache Tomcat - один из проектов организации Apache Software Foundation и является открытой реализацию таких технологий, как Java Servlet, JavaServer Pages, Java Expression Language и Java WebSocket. Он может быть использован в качестве самостоятельного веб-сервера, в качестве сервера контента в сочетании с веб-сервером Apache HTTP, а также в качестве контейнера сервлетов в некоторых серверах приложений.

Архитектура

Apache Tomcat сервер состоит из трех основных компонентов: Jasper (механизм JSP), Catalina (контейнер сервлетов) и Coyote (стек HTTP):

  • Jasper — механизм JSP Tomcat’а, который является реализацией спецификации JavaServer Pages 2.0 Sun Microsystems. Jasper анализирует JSP-файлы, чтобы компилировать их в Java код, как сервлеты (которые могут быть обработаны с помощью Catalina). Во время выполнения, Jasper может автоматически обнаруживать изменения JSP-файла и перекомпилировать его.
  • Catalina — контейнер сервлетов Tomcat’а, который реализует спецификацию Servlet API. Servlet API является основой для всех остальных технологий Java, касающихся Web и дает возможность динамически генерировать любой web-контент, используя любые библиотеки, доступные для java.
  • Coyote — компонент стека HTTP Tomcat’а, который поддерживает протокол HTTP для веб-серверов или контейнера приложений. Coyote прослушивает входящие соединения на определённом TCP порту сервера, пересылает запросы в механизм Tomcat для обработки запросов и отправляет ответ назад запрашивающему клиенту.

Установка

В этой главе описана информация о базовой установке Apache Tomcat сервер 7 при помощи менеджера пакетов yum и из файла дистрибутива (с сайта проекта) на сервер CentOS 7. Apache Tomcat сервер – это серверное ПО для исполнения web-приложений, написанных на Java. Поэтому, предполагается, что у вас уже установлена Java Runtime Environment (JRE).

Установка с помощью менеджера пакетов

Проверить, установлен ли уже Apache Tomcat через менеджер пакетов, можно командой:

[root@server]# yum list tomcat*

Установить Tomcat, используя менеджер пакетов, можно следующей командой:

[root@server]#  yum install tomcat

После выполнения этой команды будет установлен сервер Tomcat 7 и все его зависимости. Кроме того, команда создаст пользователя tomcat.

Данное руководство подразумевает установку нескольких дополнительных пакетов, которые помогут управлять web-приложениями. Чтобы установить стандартную root-страницу (tomcat-webapps), менеджер веб-приложений и виртуальных хостов Tomcat (tomcat-admin-webapps), выполните команду:

[root@server]#  sudo yum install tomcat-webapps tomcat-admin-webapps

После этого в каталоге tomcat/webapps появятся веб-приложения ROOT, examples, sample, manager и host-manager.

Установка из файла дистрибутива

В некоторых случаях установка ПО с помощью пакетного менеджера невозможна. Тогда используется способ установки из файла дистрибутива. Общий подход в работе Apache Tomcat остается таким же, но есть ряд отличий в установке и запуске.

Чтобы установить Apache Tomcat сервер, необходимо c сайта проекта (или дистрибутива ПО) взять файл apache-tomcat-7.0.67.zip и распаковать его в папку /home/user/tomcat, а потом перенести в /usr/share/tomcat7

[root@server]# cp apache-tomcat-7.0.67.zip  /home/user/tomcat
[root@server]# cd /home/user/tomcat
[root@server]# unzip apache-tomcat-7.0.67.zip
[root@server]# mv apache-tomcat-7.0.67 /usr/share/tomcat7
  1. Згрузите дистрибутив Apache Tomcat с сайта проекта http://tomcat.apache.org
  2. Распакуйте файл в нужный каталог (/usr/share/tomcat/).

Компиляция из исходного кода

Установка JDBC-драйвера

Неофициальным стандартом, которому следуют программы на языке Java, осуществляя доступ к реляционным базам данных, является JDBC. JDBC – это стандартный API-¬интерфейс, посредством которого Java-программы могут получать доступ к внешним менеджерам ресурсов, главным образом к реляционным базам данных, независящим от менеджера ресурсов способом. То есть Java-приложение, написанное с применением стандартных классов и интерфейсов JDBC, может переноситься на базы данных других производителей реляционных СУБД, если они поддерживают SQL, удовлетворяющий стандарту ANSI.


Драйвер JDBC для PostgreSQL можно скачать с сайта http://jdbc.postgresql.org/download.html Мы используем версию java 1.7, согласно документации, нам нужен файл с именем «postgresql-9.4-1205.jdbc42.jar» postgresql-9.4.1208.jre7.jar. Этот файл нам нужно разместить в каталоге /usr/shatre/tomcat7/lib. Убедитесь, что в каталоге нет других версий JDBC-драйвера для той же СУБД. Если есть, необходимо переместить их из этого каталога (или удалить), чтобы избежать путаницы и возможных проблемм при загрузке java-классов.

Далее, нужно добавить следующие строки внутри тега «Context» в файл /usr/shatre/tomcat/conf/context.xml:

<Resource name="jdbc/tomcatDB"
           auth="Container"
           type="javax.sql.DataSource"
           username="tomcat"
           password="newuserpassword"
           driverClassName="org.postgresql.Driver"
           url="jdbc:postgresql://localhost:5432/tomcat"
           maxTotal="8"
           maxIdle="4"/>

Теперь JNDI-ресурс настроен.

После того, как вы разместили jar-файл драйвера в нужном каталоге, и внесли необходимые изменения в файл «context.xml» необходимо перезапустить Apache Tomcat

Настройка

Каталоги и файлы

После установки, в системе будут созданы следующие файлы и каталоги:

  • /usr/share/tomcat/bin: содержит управляющие скрипты;
  • /etc/tomcat: конфигурационные файлы (server.xml, web.xml, context.xml, tomcat-users.xml);
  • /usr/share/java/tomcat: jar-файлы, используемые всеми расширениями Tomcat и веб-приложениями;
  • /var/log/tomcat: log-файлы;
  • /srv/tomcat/webapps: каталог, содержащий веб-приложения (сервлеты и JSP);
  • /var/cache/tomcat/work: рабочий каталог Tomcat, который используется, в первую очередь, при преобразовании JSP-страниц в сервлеты;
  • /var/cache/tomcat/temp: временные файлы.

В каталоге /usr/share/tomcat будут, также, размещены симлинки на указанные каталоги. Путь к основному каталогу Tomcat можно записать в переменную окружения $CATALINA_HOME (export CATALINA_HOME='/usr/share/tomcat/').

Для настройки сервера Tomcat используются следующие конфигурационные XML-файлы, размещенные в каталоге /usr/share/tomcat/conf/:

  • server.xml: Общие настройки сервера (порты, виртуальные хосты и проч.).
  • web.xml: Параметры, общие для ВСЕХ веб-приложений на текущем сервере. Настройки отдельных веб-приложений задаются в их собственных файлах /WEB-INF/web.xml (здесь можно провести аналогию с использованием файла .htaccess в Apache).
  • context.xml: Общие настройки управления контентом.
  • tomcat-users.xml: Список пользователей и групп (ролей).

Внимание: Прежде чем вносить какие-либо изменения в эти файлы, стоит сделать их резервные копии. Также следует обращать внимание на комментарии, которыми снабжены эти файлы

Настройка портов подключений и межсетевого экрана

Настройка портов подключений

Изначально Tomcat запускает HTTP-connector (для приема входящих подключений, TCP-порт) на порту 8080 и AJP соединитель на порту 8009. Вы можете захотеть изменить эти порты для исключения конфликтов с другими сервисами и ПО. Кроме того, используется порт 8005, убедиться в этом можно с помощью команды «netstat»:

[root@seкver]# netstat -tuaev --numeric-ports | grep tomcat
tcp6   0     0 localhost:8005    [::]:*     LISTEN      tomcat     33107
tcp6   0     0 [::]:8009         [::]:*     LISTEN      tomcat     29365
tcp6   0     0 [::]:8080         [::]:*     LISTEN      tomcat     29364
[root@server]#

Для того, чтобы сменить порт Apache Tomcat, отредактируйте файл конфигурации server.xml в каталоге /etc/tomcat/server.xml. Найдите строку "<Connector port="8080" protocol="HTTP/1.1"" и замените номер порта. Аналогично с портом 8009:

<Connector port="8080" protocol="HTTP/1.1" 
              connectionTimeout="20000" 
              redirectPort="8443" />
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

После этого перезапустите Tomcat для того, чтобы изменение настроек вступило в силу.

Настройка межсетевого экрана (firewall)

После установки Tomcat необходимо убедиться, что в файле конфигурации (/etc/firewalld/zones/public.xml) межсетевого экрана открыты порты, по которым будут обращения к серверу web-приложений из браузера. Чтобы открыть порт 8080 (который используется Tomcat по-умолчанию), выполните команду:

[root@server]# firewall-cmd --permanent --zone=public --add-port=8080/tcp

И перезагрузите сетевой экран

[root@server]# firewall-cmd --reload

В результате вышеописанных действий, файл конфигурации межсетевого экрана будет выглядеть следующим образом (добавилась предпоследняя строка):

[root@server]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
 <short>Public</short>
 <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
 <service name="postgresql"/>
 <service name="dhcpv6-client"/>
 <service name="http"/>
 <service name="ssh"/>
 <port protocol="tcp" port="8080"/>
</zone>
[root@server]#

Настройка ролей и прав доступа пользователей

Для управления пользователями и ролями Tomcat используется файл tomcat-users.xml, расположенный в каталоге /usr/share/tomcat/conf. Например, чтобы пользоваться ранее установленным менеджером веб-приложений, необходимо добавить соответствующего пользователя на сервер Tomcat. Для этого нужно отредактировать вышеупомянутый файл, добавив в него данные о пользователе, который получит доступ к manager-gui и admin-gui (ранее установленному интерфейсу). Для этого используйте следующий формат, указав имя и пароль пользователя:

[root@server]# nano /usr/share/tomcat/conf/tomcat-users.xml

Файл содержит подсказки по его настройке. Чтобы создать, например, пользователя manager, который сможет управлять веб-приложениями через графическую оболочку (предопределенная роль manager-gui), нужно добавить в этот файл запись вида:

<tomcat-users>
  <role rolename="manager-gui"/>
  <user username="manager" password="somepassword" roles="manager-gui"/>
</tomcat-users>

Сохраните и закройте файл tomcat-users.xml Обратите внимание, что в Tomcat 7 нет единой роли «manager», а существуют отдельные роли для администрирования:

  • manager-gui - позволяет администрировать через веб-интерфейс;
  • manager-script - позволяет администрировать через скрипты;
  • manager-jmx - позволяет администрировать через JMX прокси;
  • manager-status - дает доступ только к странице статуса сервера.

Например, для развертывания web-приложений через Maven необходимо присвоить пользователю роль «manager-script». В файле tomcat-users.xml описание этой роли будет выглядеть следующим образом:

 <role rolename="manager-gui"/>
 <role rolename="manager-script"/>
 <role rolename="manager-jmx"/>
 <role rolename="manager-status"/>
 <user username="admin" password="adminadmin" roles="manager-script"/>

Настройка переменных среды исполнения

Переменные среды окружения не используются Java-приложением Tomcat – вся настройка переменных происходит в стартовых скриптах. Но в некоторых случаях все же может понадобиться настройка некоторых переменных. Обратите внимание на то, что если у вас установлено несколько JVM, по умолчанию Tomcat попробует использовать OpenJDK, затем пробует JVM от Oracle, а затем иные JVM. Если у вас будут проблемы, связанные с переменными среды исполнения, выполните следующие шаги:

  1. Установите переменную среды CATALINA_HOME и CATALINA_BASE
  2. Установить переменную среды JRE_HOME или JAVA_HOME. Переменная среды используется для указания расположения JRE или JDK. Если определены обе переменные, то используется JRE_HOME.
  3. Остальные переменные среды опциональны: CATALINA_OPTS, JAVA_OPTS, CATALINA_PID, JSVC
  4. Использование скрипта setenv для установки переменных среды (рекомендуется)

Настройка сервера-разработки

Если вы используете Tomcat на сервере разработки и/или тестирования, вам могут быть полезны следующие опции:

Автоматическая перезагрузка страниц

Имеется возможность заставить Tomcat выполнять автоматическую перезагрузку после изменения кода. Нужно добавить атрибут reloadable со значением "true" в элемент <Context> файла conf/context.xml. Это весьма полезно в процессе разработки и отладки сервлетов, но не рекомендуется в процессе постоянной работы web-приложения.

<Context reloadable="true">
  ...
</Context>

Включение листинга каталогов

Для установки отображения списка файлов в каталогах (листинга), нужно поменять значение атрибута listings с ложного (false) на истинное (true) в блоке настроек сервлета по умолчанию ("default"-servlet) в файле conf/web.xml. Это бывает полезным при разработке и отладке веб-приложений, но не рекомендуется использовать на production-сервере по соображениям безопасности.

Запуск

Запуск и остановка Tomcat

Tomcat-01.png

Если вы установили Tomcat с помощью менеджера пакетов, то для запуска сервиса Tomcat введите следующую команду:

[root@server]# systemctl start tomcat

Для того, чтобы перезапустить сервис (например, после внесения изменений в настройки), используется следующая команда:

[root@server]# systemctl restart tomcat

Чтобы сервис Tomcat автоматически запускался на этапе загрузки сервера:

[root@server]# systemctl enable tomcat

Теперь в адресной строке web-браузера введите «http://IP-адрес_сервера:8080», на экране у вас должна появиться приветственная страница Tomcat:


Рисунок N. Приветственная страница Tomcat.

Запуск при установке без использования менеджера пакетов

Запуск Tomcat может быть осуществлен с использованием следующих команд:

$CATALINA_HOME/bin/startup.sh 

или

$CATALINA_HOME/bin/catalina.sh start


Скрипт catalina.sh используется для ручного запуска и остановки сервера Tomcat. Для автоматического запуска можно использовать скрипт:

CATALINA_BASE=$CATALINA_HOME
cd $CATALINA_HOME
./bin/jsvc \
   -classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \
   -outfile $CATALINA_BASE/logs/catalina.out \
   -errfile $CATALINA_BASE/logs/catalina.err \
   -Dcatalina.home=$CATALINA_HOME \
   -Dcatalina.base=$CATALINA_BASE \
   -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
   -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
   org.apache.catalina.startup.Bootstrap

Завершение работы Apache Tomcat:

$CATALINA_HOME/bin/shutdown.sh 

или

$CATALINA_HOME/bin/catalina.sh stop

Файлы вашего приложения нужно расположить в каталоге /usr/share/tomcat7/webapps, более подробная информация по развертыванию приложений в главе «Запуск приложений».

Менеджер Web-приложений

В Apache Tomcat есть встроенное приложение для управления сервером и другими приложениями, т.н. manager application. Доступ к нему можно получить по ссылке http://server_IP_address:8080/manager/html или со стартовой страницы по ссылке «Manager App» (на рисунке ниже выделена красной рамкой). Менеджер приложений является защищенным web-ресурсом, поэтому при первом его вызове появится диалоговое окно для аутентификации.

Tomcat-03.png

Рисунок N. Окно авторизации.

Для входа в менеджер web-приложений необходимо воспользоваться теми именем пользователя и паролем, которые были заданы при настройке пользователей и ролей. Web Application Manager используется для управления приложениями Java; он позволяет запускать, останавливать, перезапускать и удалять приложения. Также Web Application Manager позволяет выполнять диагностику приложений (например, обнаруживать утечки памяти). Кроме того, в самом низу этой страницы находится информация о сервере.

Tomcat-04.png

Рисунок N Основное окно менеджера web-приложений.

В разделе «Manager» есть ссылка «Server Status», для получения детального описания состояния сервера.

В разделе Applications перечислены веб-приложения, установленные на данном сервере, и есть кнопки для управления ими:

  • Start — запустить приложение;
  • Stop — остановить приложение, при этом сам сервер и остальные приложения продолжат работу;
  • Reload — перезапустить приложение;
  • Undeploy — удалить приложение;
  • Expire sessions with idle >= … minutes — считать веб-сессии пользователей истекшими по прошествии стольки-то минут без активности.

Раздел Deploy предназначен для инсталляции приложения из war-файла.

Diagnostics позволяет найти утечки памяти и принудительно запустить сборку мусора в JVM.

Web Application Manager сам является web-приложением, которое предварительно установлено в Tomcat. Следовательно, для того, чтобы Tomcat мог его использовать, это приложение должно быть запущено и присутствовать в списке приложений. Кроме менеджера web-приложенй (manager), в числе предустановленных часто бывает приложение для управления хостами (host-manager).

Установка и удаление web-приложений

Tomcat-06.png

Установка web-приложений

Существует два способа развертывания приложений.

Способ 1. Без использования менеджера приложений (Tomcat Web Application Manager):

  1. Скопировать war-файл в каталог <TOMCAT_HOME>\webapps
  2. Если Tomcat был запущен, то он сам развернет приложение из war-файла через несколько секунд (появится одноименный каталог). Либо самостоятельно перезапустите Tomcat, и он развернёт war.
  3. Проверьте работоспособность приложения, пройдя по соостветствующей ссылке.

Способ 2. С использованием менеджера приложений (Tomcat Web Application Manager):

  1. Убедитесь, что Tomcat запущен.
  2. Перейдите на стартовую страницу: http://IP-адрес_сервера:8080
  3. Откройте менеджер web-приложений
  4. Введите данные в аутентификации (Описано выше)
  5. В разделе «Deploy» нажмите кнопку возле «Select WAR file to upload» и выберете файл, которы вы хотите развернуть (выделено красной рамкой на рисунке ниже).
  6. Нажмите кнопку «Deploy» под этой надписью.

После этого Tomcat самостоятельно скопирует war-файл к себе в каталог \webapps и развернет его. Web-приложение появится в списке Applications и вы сможете перейти к нему, кликнув по ссылке с соответствующим названием.

Удаление web-приложений Существует два способа развертывания приложений.

Способ 1. Без использования менеджера приложений (Tomcat Web Application Manager):

  1. Выключите Apache Tomcat сервер командой «systemctl stop tomcat»
  2. В каталоге \webapps удалите war-файл и одноименный каталог.
  3. В каталоге \conf\Catalina\localhost удалите одноименный xml.
  4. В каталоге \work\Catalina\localhost удалите одноименный каталог.

Последний шаг необязателен: удаляются временные файлы которые создал Tomcat.

Способ 2. С использованием менеджера приложений (Tomcat Web Application Manager):

Структура каталогов web-приложений

Web-app.png

Все web-приложения размещаются в каталоге webapps (/usr/share/tomcat/webapps). Каждое приложение размещается в собственном, одноименном, каталоге с определенной вложенной структурой. Например, для приложения websample структура каталогов должны быть следующей: webapps/websample/WEB-INF/classes. Соответственно, создать эту структуру можно так:

[root@server]# mkdir -p /usr/share/tomcat/webapps/websample/WEB-INF/classes

Назначение созданных каталогов следующее:

websample Корневой каталог веб-приложения. Здесь размещаются HTML-страницы и прочие ресурсы (таблицы стилей (CSS), изображения, клиентские скрипты (javascript), JSP и т.п.), доступные веб-клиентам.
websample/WEB-INF Этот каталог, недоступный веб-пользователям, содержит описание веб-приложения и его параметры в файле web.xml. (WEB-INF - предопределенное и регистрозависимое имя каталога)
websample/WEB-INF/classes В этом каталоге размещаются все файлы Java-классов сервлетов.