Home » Установка Tomcat на Linux — пошаговое руководство
Установка Tomcat на Linux — пошаговое руководство

Установка Tomcat на Linux — пошаговое руководство

Tomcat — это не просто сервер приложений, а настоящий мостик между Java-кодом и реальным миром. Если вы когда-либо разворачивали Java-приложения или работали с JSP, то точно знаете, что Apache Tomcat — это де-факто стандарт для веб-серверов в экосистеме Java. Сегодня разберём, как правильно поставить и настроить Tomcat на Linux так, чтобы он работал как часы и не доставлял головной боли в продакшене.

Эта статья поможет вам разобраться с установкой Tomcat с нуля, настроить его для боевого окружения и избежать типичных граблей, на которые наступают новички. Мы пройдём путь от базовой установки до продвинутых настроек безопасности и оптимизации. Если вам нужен надёжный VPS для разработки или выделенный сервер для серьёзных проектов, то этот гайд точно пригодится.

Что такое Tomcat и зачем он нужен

Apache Tomcat — это open-source реализация Java Servlet, JavaServer Pages (JSP) и Java Expression Language (EL). По сути, это контейнер сервлетов, который может работать как standalone веб-сервер или интегрироваться с Apache HTTP Server.

Основные преимущества Tomcat:

  • Лёгкость и быстрота по сравнению с полноценными application server’ами типа WildFly или WebSphere
  • Отличная документация и огромное сообщество
  • Простота настройки и развёртывания
  • Поддержка современных Java-спецификаций
  • Отличная интеграция с IDE и системами сборки

Подготовка системы

Перед установкой Tomcat нужно убедиться, что у нас есть Java. Tomcat написан на Java, поэтому без JDK/JRE никуда. Проверим, что у нас есть:

java -version
javac -version

Если Java нет, устанавливаем OpenJDK (рекомендую версию 11 или 17):

# Ubuntu/Debian
sudo apt update
sudo apt install openjdk-17-jdk

# CentOS/RHEL/Rocky Linux
sudo dnf install java-17-openjdk-devel

# Arch Linux
sudo pacman -S jdk17-openjdk

Настраиваем переменную окружения JAVA_HOME:

echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

Способы установки Tomcat

Существует несколько способов установки Tomcat, каждый со своими плюсами и минусами:

Способ Плюсы Минусы Рекомендации
Пакетный менеджер Быстро, автоматические обновления Старые версии, меньше контроля Для разработки
Скачивание с официального сайта Свежие версии, полный контроль Ручное управление обновлениями Для продакшена
Docker Изоляция, простота развёртывания Дополнительный слой абстракции Для микросервисов

Установка через пакетный менеджер

Самый простой способ — использовать пакетный менеджер вашей системы:

# Ubuntu/Debian
sudo apt update
sudo apt install tomcat9

# CentOS/RHEL/Rocky Linux
sudo dnf install tomcat

# Arch Linux
sudo pacman -S tomcat9

После установки сразу запускаем и добавляем в автозагрузку:

sudo systemctl start tomcat9
sudo systemctl enable tomcat9
sudo systemctl status tomcat9

Установка с официального сайта (рекомендуемый способ)

Для продакшена лучше ставить свежую версию с официального сайта Apache Tomcat. Создаём пользователя для Tomcat:

sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat

Скачиваем и распаковываем последнюю версию:

cd /tmp
wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz
sudo tar -xzf apache-tomcat-10.1.15.tar.gz -C /opt/tomcat --strip-components=1

Настраиваем права доступа:

sudo chown -R tomcat:tomcat /opt/tomcat/
sudo chmod +x /opt/tomcat/bin/*.sh

Создание systemd службы

Создаём systemd unit файл для автоматического запуска:

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

Содержимое файла:

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-17-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

Активируем и запускаем службу:

sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat
sudo systemctl status tomcat

Настройка файрвола

По умолчанию Tomcat слушает на порту 8080. Открываем его:

# UFW (Ubuntu)
sudo ufw allow 8080/tcp

# firewalld (CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

# iptables (универсальный способ)
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

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

Tomcat поставляется с веб-интерфейсом управления, но по умолчанию он заблокирован. Настраиваем пользователей:

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

Добавляем пользователей перед закрывающим тегом </tomcat-users>:

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="SecurePassword123!" roles="manager-gui,admin-gui"/>

Разрешаем доступ к менеджеру с любых IP (осторожно в продакшене!):

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

Комментируем или удаляем строку с Valve:

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

То же самое для host-manager:

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

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

sudo systemctl restart tomcat

Тестирование установки

Проверяем, что Tomcat работает:

curl -I http://localhost:8080

Должны получить ответ вида:

HTTP/1.1 200 
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 15 Nov 2023 12:34:56 GMT

Открываем браузер и переходим на http://your-server-ip:8080. Должна появиться стартовая страница Tomcat.

Оптимизация производительности

Для продакшена важно правильно настроить JVM и Tomcat. Основные параметры в файле службы:

Environment='CATALINA_OPTS=-Xms1024M -Xmx2048M -server -XX:+UseG1GC -XX:+UseStringDeduplication'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djava.net.preferIPv4Stack=true'

Настройка коннекторов в server.xml:

sudo nano /opt/tomcat/conf/server.xml

Находим секцию Connector и настраиваем:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="200"
           minSpareThreads="10"
           maxSpareThreads="100"
           acceptCount="100"
           compression="on"
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json"
           />

Настройка безопасности

Безопасность — критически важный аспект. Основные моменты:

  • Удаляем дефолтные приложения в продакшене
  • Настраиваем SSL/TLS
  • Ограничиваем доступ к менеджеру
  • Используем отдельного пользователя

Удаляем ненужные приложения:

sudo rm -rf /opt/tomcat/webapps/examples
sudo rm -rf /opt/tomcat/webapps/docs
sudo rm -rf /opt/tomcat/webapps/ROOT

Настраиваем SSL connector в server.xml:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/opt/tomcat/conf/keystore.p12"
                     certificateKeystorePassword="password"
                     certificateKeystoreType="PKCS12"/>
    </SSLHostConfig>
</Connector>

Интеграция с Apache HTTP Server

Для продакшена часто используют связку Apache HTTP Server + Tomcat через mod_proxy или mod_jk. Простой пример с mod_proxy:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp

Конфигурация виртуального хоста:

<VirtualHost *:80>
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Мониторинг и логирование

Логи Tomcat находятся в директории logs:

sudo tail -f /opt/tomcat/logs/catalina.out
sudo tail -f /opt/tomcat/logs/localhost.$(date +%Y-%m-%d).log

Для мониторинга можно использовать JMX или установить специальные инструменты:

# Включаем JMX в CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

Альтернативы и сравнение

Стоит упомянуть альтернативы Tomcat:

  • Jetty — легче и быстрее запускается, отлично подходит для встраивания
  • Undertow — от создателей WildFly, очень производительный
  • Spring Boot Embedded — встроенный сервер, удобен для микросервисов
  • GlassFish — полноценный application server с поддержкой Java EE

По производительности Tomcat занимает золотую середину — не самый быстрый, но стабильный и предсказуемый. Статистика показывает, что около 70% Java веб-приложений работают именно на Tomcat.

Автоматизация и скрипты

Создаём скрипт для автоматической установки:

#!/bin/bash
# tomcat-install.sh

TOMCAT_VERSION="10.1.15"
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"

# Создаём пользователя
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat

# Скачиваем и устанавливаем
cd /tmp
wget https://archive.apache.org/dist/tomcat/tomcat-10/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz
sudo tar -xzf apache-tomcat-${TOMCAT_VERSION}.tar.gz -C /opt/tomcat --strip-components=1

# Настраиваем права
sudo chown -R tomcat:tomcat /opt/tomcat/
sudo chmod +x /opt/tomcat/bin/*.sh

# Создаём systemd service
sudo tee /etc/systemd/system/tomcat.service > /dev/null <

Интересные факты и нестандартные применения

Мало кто знает, что Tomcat можно использовать не только для веб-приложений:

  • Как HTTP API сервер для микросервисов
  • Для хостинга статических файлов (хотя это overkill)
  • Как прокси-сервер с custom servlet’ами
  • Для WebSocket приложений

Томcat поддерживает hot deployment — можно обновлять приложения без перезапуска сервера. Это особенно полезно в CI/CD пайплайнах.

Troubleshooting частых проблем

Типичные проблемы и их решения:

  • OutOfMemoryError — увеличиваем heap size в CATALINA_OPTS
  • Port already in use — проверяем, что порт свободен с помощью netstat
  • Permission denied — проверяем права доступа к директориям
  • Slow startup — используем /dev/urandom вместо /dev/random

Полезные команды для диагностики:

# Проверяем процессы
ps aux | grep tomcat

# Проверяем порты
netstat -tulpn | grep :8080

# Проверяем логи
journalctl -u tomcat -f

# Проверяем использование памяти
jstat -gc $(pgrep -f tomcat)

Заключение и рекомендации

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

Основные рекомендации:

  • Используйте последние стабильные версии Java и Tomcat
  • Настройте мониторинг и логирование с самого начала
  • Не забывайте про безопасность — удаляйте дефолтные приложения
  • Настройте автоматические бэкапы конфигурации
  • Используйте reverse proxy для статических файлов

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


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked