Apache Tomcat
Руководство по установке 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
- Згрузите дистрибутив Apache Tomcat с сайта проекта http://tomcat.apache.org
- Распакуйте файл в нужный каталог (/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. Если у вас будут проблемы, связанные с переменными среды исполнения, выполните следующие шаги:
- Установите переменную среды CATALINA_HOME и CATALINA_BASE
- Установить переменную среды JRE_HOME или JAVA_HOME. Переменная среды используется для указания расположения JRE или JDK. Если определены обе переменные, то используется JRE_HOME.
- Остальные переменные среды опциональны: CATALINA_OPTS, JAVA_OPTS, CATALINA_PID, JSVC
- Использование скрипта 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 с помощью менеджера пакетов, то для запуска сервиса 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-ресурсом, поэтому при первом его вызове появится диалоговое окно для аутентификации.
Рисунок N. Окно авторизации.
Для входа в менеджер web-приложений необходимо воспользоваться теми именем пользователя и паролем, которые были заданы при настройке пользователей и ролей. Web Application Manager используется для управления приложениями Java; он позволяет запускать, останавливать, перезапускать и удалять приложения. Также Web Application Manager позволяет выполнять диагностику приложений (например, обнаруживать утечки памяти). Кроме того, в самом низу этой страницы находится информация о сервере.
Рисунок 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-приложений
Установка web-приложений
Существует два способа развертывания приложений.
Способ 1. Без использования менеджера приложений (Tomcat Web Application Manager):
- Скопировать war-файл в каталог <TOMCAT_HOME>\webapps
- Если Tomcat был запущен, то он сам развернет приложение из war-файла через несколько секунд (появится одноименный каталог). Либо самостоятельно перезапустите Tomcat, и он развернёт war.
- Проверьте работоспособность приложения, пройдя по соостветствующей ссылке.
Способ 2. С использованием менеджера приложений (Tomcat Web Application Manager):
- Убедитесь, что Tomcat запущен.
- Перейдите на стартовую страницу: http://IP-адрес_сервера:8080
- Откройте менеджер web-приложений
- Введите данные в аутентификации (Описано выше)
- В разделе «Deploy» нажмите кнопку возле «Select WAR file to upload» и выберете файл, которы вы хотите развернуть (выделено красной рамкой на рисунке ниже).
- Нажмите кнопку «Deploy» под этой надписью.
После этого Tomcat самостоятельно скопирует war-файл к себе в каталог \webapps и развернет его. Web-приложение появится в списке Applications и вы сможете перейти к нему, кликнув по ссылке с соответствующим названием.
Удаление web-приложений Существует два способа развертывания приложений.
Способ 1. Без использования менеджера приложений (Tomcat Web Application Manager):
- Выключите Apache Tomcat сервер командой «systemctl stop tomcat»
- В каталоге \webapps удалите war-файл и одноименный каталог.
- В каталоге \conf\Catalina\localhost удалите одноименный xml.
- В каталоге \work\Catalina\localhost удалите одноименный каталог.
Последний шаг необязателен: удаляются временные файлы которые создал Tomcat.
Способ 2. С использованием менеджера приложений (Tomcat Web Application Manager):
Структура каталогов web-приложений
Все 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-классов сервлетов. |