Установка Apache Tomcat 9 в Debian 9

Apache Tomcat – это сервер приложений, который используется для обслуживания приложений Java. Tomcat – это открытая реализация технологий Java Servlet и JavaServer Pages, выпущенная Apache Software Foundation. Этот мануал поможет установить и настроить Tomcat 9 на сервере Debian 9.

Требования

Для работы вам нужен сервер Debian 9, настроенный по этому мануалу.

1: Установка Java

Для работы Tomcat необходимо установить Java, иначе код Java не будет выполняться. Установите OpenJDK при помощи стандартного пакетного менеджера apt.

Сначала нужно обновить индекс пакетов.

sudo apt update

Чтобы установить JDK (Java Development Kit), введите:

sudo apt install default-jdk

После установки Java создайте специального пользователя tomcat для запуска сервиса Tomcat.

2: Создание пользователя Tomcat

В целях безопасности сервер Tomcat следует запускать с правами обычного пользователя (т.е. не root). Для этого создайте нового пользователя и группу.

Примечание: В некоторых средах по умолчанию установлен пакет unscd, предназначенный для ускорения работы серверов имен типа LDAP. Его последняя версия в репозитории Debian содержит баг, из-за которого некоторые команды (например, adduser, которую мы используем ниже) выводят такие дополнительные строки:

sent invalidate(passwd) request, exiting
sent invalidate(group) request, exiting

Эти сообщения безвредны, но если вы хотите от них избавиться и не планируете использовать LDAP и подобные серверы, удалите пакет unscd.

apt remove unscd

Чтобы создать группу tomcat, введите:

sudo groupadd tomcat

После этого нужно создать пользователя tomcat, который должен состоять в одноименной группе. Домашний каталог пользователя – /opt/tomcat (в него будет установлен Tomcat); оболочка – /bin/false (чтобы никто не смог войти в учётную запись):

sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat

3: Установка Tomcat

Tomcat 9 проще всего установить вручную из бинарного релиза.

На сайте проекта найдите последнюю версию Tomcat. На данный момент такой версией является 9.0.11. В разделе Binary Distributions найдите список Core и скопируйте ссылку на tar.gz.

На сервере перейдите в каталог /tmp, который предназначен для временных пакетов.

cd /tmp

Для дальнейшей работы нужно установить curl:

sudo apt install curl

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

curl -O http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.11/bin/apache-tomcat-9.0.11.tar.gz

Установите Tomcat в каталог /opt/tomcat. Создайте этот каталог и извлеките в него архив:

sudo mkdir /opt/tomcat
sudo tar xzvf apache-tomcat-9*tar.gz -C /opt/tomcat --strip-components=1

После этого нужно установить соответствующие права на каталог.

4: Настройка доступа

Пользователь tomcat должен иметь доступ к установке Tomcat.

Откройте каталог Tomcat:

cd /opt/tomcat

Передайте пользователю tomcat права на каталог:

sudo chgrp -R tomcat /opt/tomcat

Затем дайте пользователю tomcat право на изменение каталога conf и право на чтение файлов в нём:

sudo chmod -R g+r conf
sudo chmod g+x conf

После этого сделайте пользователя tomcat владельцем каталогов webapps, work, temp и logs.

sudo chown -R tomcat webapps/ work/ temp/ logs/

5: Создание сервиса systemd

Чтобы запустить Tomcat как сервис, нужно создать service-файл systemd.

Серверу Tomcat нужно знать, где находится установка Java. Этот путь называется JAVA_HOME. Чтобы узнать расположение установки, используйте команду:

sudo update-java-alternatives -l
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64

Примечание: В данном примере JAVA_HOME выделен красным.

В данном случае JAVA_HOME будет выглядеть так:

JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-amd64

Примечание: Переменная JAVA_HOME может отличаться.

Теперь можно создать service-файл. Откройте tomcat.service в каталоге /etc/systemd/system:

sudo nano /etc/systemd/system/tomcat.service

Внесите в файл следующий скрипт, при необходимости изменив JAVA_HOME; также можно изменить настройки распределения памяти, которые указаны в CATALINA_OPTS:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target

Сохраните и закройте файл.

После этого нужно перезапустить демон systemd:

sudo systemctl daemon-reload

Теперь сервис Tomcat готов к запуску. Для этого используйте:

sudo systemctl start tomcat

Убедитесь, что при запуске не произошло ошибок:

sudo systemctl status tomcat

Вы получите такой вывод:

tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-05 20:47:44 UTC; 3s ago
Process: 9037 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 9046 (java)
Tasks: 46 (limit: 4915)
CGroup: /system.slice/tomcat.service
└─9046 /usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Dja
Sep 05 20:47:44 tomcat systemd[1]: Starting Apache Tomcat Web Application Container...
Sep 05 20:47:44 tomcat systemd[1]: Started Apache Tomcat Web Application Container.

6: Настройка брандмауэра и тестирование сервера Tomcat

После запуска сервиса Tomcat нужно убедиться, что стандартная страница доступна в браузере.

Но сначала нужно откорректировать настройки брандмауэра и разблокировать порт Tomcat. Если вы следовали мануалу по начальной настройке сервера, на данный момент сервер защищён брандмауэром ufw.

Для обработки запросов Tomcat использует порт 8080. Чтобы разблокировать трафик этого порта, введите:

sudo ufw allow 8080

Теперь брандмауэр поддерживает трафик Tomcat. Чтобы получить доступ к стандартной странице сервиса, откройте в браузере ссылку:

http://server_domain_or_IP:8080

На экране появится приветственная страница Tomcat, которая содержит некоторую информацию о программе. Однако доступа к ссылкам (например, Manager App) у вас на данный момент нет.

Если всё работает должным образом, включите service-файл, чтобы сервис Tomcat автоматически запускался вместе с сервером.

sudo systemctl enable tomcat

7: Настройка веб-интерфейса Tomcat

Чтобы использовать поставляемый с Tomcat интерфейс, добавьте учетные данные на сервер Tomcat. Для этого отредактируйте файл tomcat-users.xml:

sudo nano /opt/tomcat/conf/tomcat-users.xml

Теперь нужно добавить пользователя, который будет иметь доступ к поставляемым с Tomcat интерфейсам: manager-gui и admin-gui. Для этого можно использовать приведённый ниже код (только выберите более надёжное имя и пароль пользователя):

<tomcat-users . . .>
<user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>

Сохраните и закройте файл tomcat-users.xml.

По умолчанию более новые версии Tomcat ограничивают доступ к приложениям Manager и Host Manager подключениями, поступающими с самого сервера. Поскольку мы устанавливаем Tomcat на удаленную машину, это ограничение нужно снять или изменить. Чтобы изменить ограничения доступа по IP-адресам, откройте соответствующие файлы context.xml.

Для приложения Manager:

sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml

Для приложения Host Manager:

sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml

Внутри закомментируйте ограничения IP-адресов, чтобы разрешить соединения из любой точки. Кроме того, если вы хотите разрешить только соединения, поступающие с вашего собственного IP-адреса, вы можете добавить в список свой внешний IP:

<Context antiResourceLocking="false" privileged="true" >
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />-->
</Context>

Сохраните и закройте файл.

Чтобы обновить настойки, перезапустите сервис Tomcat.

sudo systemctl restart tomcat

8: Доступ к веб-интерфейсу

Теперь сервер Tomcat запущен. Откройте в браузере веб-интерфейс.

http://server_domain_or_IP:8080

На экране появится страница с сообщением:

If you’re seeing this, you’ve successfully installed Tomcat. Congratulations!

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

Теперь откройте приложение Manager App по ссылке:

http://server_domain_or_IP:8080/manager/html

По запросу введите свои учетные данные.

Этот менеджер нужен для управления приложениями Java. Он позволяет запускать, перезапускать, развертывать, останавливать и сворачивать их. Кроме того, он может выполнять диагностику приложений (к примеру, обнаруживать утечки памяти). В конце этой страницы содержится информация о сервере.

Теперь откройте Host Manager:

http://server_IP_address:8080/host-manager/html/

Страница Virtual Host Manager нужна для управления виртуальными хостами; она позволяет добавлять виртуальные хосты для развёртывания приложений.

Заключение

В настоящее время сервер Tomcat полностью готов к обслуживанию приложений Java, но пока что не шифрует данные. Это означает, что все данные, включая конфиденциальную информацию, отправляются простым текстом, который может быть перехвачен и прочитан третьими сторонами в Интернете. Чтобы этого не произошло, настоятельно рекомендуется шифровать ваши соединения с помощью SSL. Вы можете узнать, как зашифровать подключения к Tomcat, в мануале Шифрование соединений Tomcat 8 на Apache или Nginx в Ubuntu 16.04.

Tags: , , , ,