url image

Apache Tomcat

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

Установка должна производится на чистый сервер, без панели ISPmanager. Рассмотрим на примере ОС, актуальных на момент выхода статьи: Debian 10, Debian 11, Ubuntu 20.04, Ubuntu 22.04, CentOS 7, Alma Linux 8 / Rocky Linux 8, Alma Linux 9 / Rocky Linux 9. 

Предварительные настройки

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

Создаём пользователя:

# useradd tomcat -U -s /bin/false -d /opt/tomcat -m

Устанавливаем Java — для этого воспользуйтесь готовой инструкцией.

Перед установкой Tomcat нужно определиться с его версией. На официальной странице Apache Tomcat, слева есть список версий: выбираем нужную, например Tomcat 10, далее копируем ссылку на загрузку архива tar.gz.

Apache Tomcat 10.1 работает только с минимальной версией Java 1.11.0!

Проверьте версию Java с помощью команды:

# java -version

Если в выводе будет версия 1.11 или выше (openjdk version "11.0.18"), можно устанавливать Tomcat 10.1.

Если же в выводе будет версия ниже, например 1.8 (openjdk version "1.8.0_362"), — необходимо либо установить Java 1.11, либо установить Tomcat 10.0 (ссылка tar.gz).

Отметим, что на текущий момент в репозиториях CentOS 7, Alma Linux 8 и 9, Rocky Linux 8 и 9 последняя версия Java — 1.8, поэтому для данных дистрибутивов рассмотрим установку Apache Tomcat 10.0.

Скачиваем архив:

# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.18/bin/apache-tomcat-10.1.18.tar.gz

Распаковываем архив в ранее созданный каталог пользователя tomcat (убедитесь, что в текущей директории у вас один архив Tomcat, иначе вместо apache-tomcat-*.tar.gz укажите полное название архива):

# tar zxvf apache-tomcat-*.tar.gz -C /opt/tomcat --strip-components 1

И меняем права на файлы для пользователя tomcat:

# chown -R tomcat:tomcat /opt/tomcat

Так как сейчас запуск Tomcat осуществляется в ручном режиме, то после перезапуска сервера он не запустится, это нужно исправить. Для этого настроим служебный файл systemd, который будет запускать Tomcat и, если он упадёт, перезапускать.

Ubuntu/Debian

Первым делом выполняем команду:

# update-java-alternatives -l 

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

java-1.11.0-openjdk-amd64  1111   /usr/lib/jvm/java-1.11.0-openjdk-amd64

Создаём файл /etc/systemd/system/tomcat.service и добавляем в него следующее:

[Unit]
Description=Apache Tomcat Server
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Меняем значение JAVA_HOME на /usr/lib/jvm/java-1.11.0-openjdk-amd64 (может отличаться в зависимости от версии Java).

CentOS/AlmaLinux/RockyLinux

Создаём файл /etc/systemd/system/tomcat.service и добавляем в него следующее:

[Unit]
Description=Apache Tomcat Server
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=CATALINA_PID=/opt/tomcat/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10


[Install]
WantedBy=multi-user.target

Применение настроек и запуск демона Tomcat

Дальнейшие настройки одинаковы для всех ОС.

Для применения настроек перезагружаем демона:

# systemctl daemon-reload

Запускаем Tomcat:

# systemctl start tomcat

Проверяем, что сервис запущен и работает:

# systemctl status tomcat
tomcat.service - Apache Tomcat Server
  Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
  Active: active (running) since Fri 2023-02-03 13:04:30 MSK; 1min 4s ago

Будет также полезно настроить автозапуск Tomcat после перезагрузки сервера:

# systemctl enable tomcat

Для ОС CentOS, Alma Linux и Rocky Linux потребуется открыть порт 8080 в firewall:

# firewall-cmd --permanent --add-port=8080/tcp
# firewall-cmd --reload

Переходим в браузер по ссылке: IP_сервера:8080

Настройка доступа к веб-интерфейсу

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

Создаём пользователя, редактируя файл /opt/tomcat/conf/tomcat-users.xml, добавляем следующие строки в раздел tomcat-users:

<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="ИМЯ_ПОЛЬЗОВАТЕЛЯ" password="ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ" roles="admin-gui,manager-gui"/>

Далее необходимо разрешить определённому IP заходить в веб-интерфейс управления. Для этого нужно внести изменения в файл /opt/tomcat/webapps/manager/META-INF/context.xml.

Находим строку:

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

Добавляем через прямую черту «|» новый IP (указываем вместо 127.0.0.1 свой IP), например:

allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|127.0.0.1" />

То же самое делаем и с файлом /opt/tomcat/webapps/host-manager/META-INF/context.xml.

После всех настроек перезапускаем Tomcat.

# systemctl restart tomcat

Далее кликаем на один из трёх пунктов управления на сайте, чтобы авторизоваться:

Вас попросят ввести логин и пароль для авторизации, указываем ранее созданные данные в файле /opt/tomcat/conf/tomcat-users.xml.

Смена порта

По умолчанию Tomcat работает на 8080 порту, при необходимости его можно сменить в файле /opt/tomcat/conf/server.xml, найдя строку <Connector port="8080" protocol="HTTP/1.1". Меняем 8080 на нужный порт и перезапускаем Tomcat.

Установка сертификата

Размещаем ключ, сертификат и цепочку на сервере.

Или же генерируем файлы сертификата через OpenSSL по статье.

Далее нужно совместить сертификат и цепочку, командой:

# cat файл_сертификата файл_цепочки > cert.pem

Ключ в формат .pem:

# mv файл_ключа key.pem

Генерируем файл .p12:

# openssl pkcs12 -export -out /tmp/cert_and_key.p12 -in cert.pem -inkey key.pem -name tomcat

Будет запрошен пароль, указываем любой, запоминаем.

Генерируем сертификат для Tomcat:

# keytool -importkeystore -deststorepass 'ПАРОЛЬ_МИН_6_ЗНАКОВ' -destkeypass 'ПАРОЛЬ_МИН_6_ЗНАКОВ' -destkeystore /tmp/domain.jks -srckeystore /tmp/cert_and_key.p12 -srcstoretype PKCS12 -srcstorepass 'ПАРОЛЬ_ИЗ_ПРЕДЫДУЩЕГО_ШАГА' -alias tomcat

Перемещаем готовый файл:

# mv /tmp/domain.jks /opt/tomcat/conf/domain.jks

В файле /opt/tomcat/conf/server.xml находим блок:

<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
...

</Connector>
-->

Убираем <!-- и --> по краям блока, чтобы раскомментировать его и приводим к виду:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="150" SSLEnabled="true">
     <SSLHostConfig>
         <Certificate certificateKeystoreFile="conf/domain.jks"
                      certificateKeystorePassword="ПАРОЛЬ_МИН_6_ЗНАКОВ"
                      type="RSA" />
     </SSLHostConfig>
</Connector>

В certificateKeystoreFile указываем файл conf/domain.jks — это ранее созданный сертификат, который мы переместили.

В certificateKeystorePassword указываем пароль от сертификата

Перезапускаем Tomcat:

# systemctl restart tomcat

 

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!