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.
Проверьте версию 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