Установка и базовая настройка Tomcat на Linux Ubuntu Server
Tomcat на Ubuntu не устанавливается из репозитория (в отличие от некоторых других дистрибутивов Linux, например, CentOS). Поэтому в данной инструкции мы выполним ручную установку — развертывание дополнительных компонентов (Java), загрузку и распаковку пакета веб-сервера Tomcat, а также настройку его автоматического запуска в случае сбоя или после перезагрузки системы. На момент обновления инструкции использовался Tomcat версии 10 и Ubuntu 20.04.
Подготовка системы
Обновляем список пакетов в репозиториях:
Задаем имя серверу:
hostnamectl set-hostname server.dmosk.ru
* в данном примере мы зададим имя server.dmosk.ru.
Настраиваем часовой пояс, например:
timedatectl set-timezone Europe/Moscow
* где Europe/Moscow — московское время. Список всех возможных зон смотрим командой timedatectl list-timezones.
Устанавливаем сервис для автоматической синхронизации времени, а также разрешаем его автозапуск:
apt-get install chrony
systemctl enable chrony
Если мы используем брандмауэр, необходимо открыть порт 8080:
iptables -A INPUT -p tcp —dport 8080 -j ACCEPT
* 8080 — порт по умолчанию, на котором работает Tomcat. Если мы заходим поменять данный порт, то нужно будет открыть именно его.
Сохраняем правила — для этого устанавливаем утилиту iptables-persistent:
apt-get install iptables-persistent
Если в процессе установки мы отказались сохранять правила, выполняем команду:
Можно приступать к установке Java.
Подготовка к установке
Для работы веб-сервера нам необходимы Java и пользователь, под которым будет работать Tomcat.
Установка JAVA
Мы установим пакет openjdk. Для этого вводим команду:
apt-get install default-jdk
* будет установлена последняя версия, максимально совместимая с используемой версией операционной системы Ubuntu.
Если в системе окажется несколько версий java, выберем последнюю. Для этого вводим команду:
update-alternatives —config java
. и выбираем в списке соответствующий вариант.
Проверяем используемую версию java:
Мы должны увидеть что-то на подобие:
openjdk version «14.0.2» 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 14.0.2+12-Ubuntu-120.04, mixed mode, sharing)
Создание пользователя
Создаем пользователя командой:
useradd tomcat -U -s /bin/false -d /opt/tomcat -m
* в итоге будет создан пользователь tomcat со следующими опциями:
- -U — также будет создана группа с таким же именем, что и пользователь.
- -s /bin/false — запрещает пользователю интерактивный вход в систему.
- -d /opt/tomcat — указывает путь до домашней директории пользователя.
- -m — сразу создает домашнюю директорию пользователю.
Можно приступать к установке веб-сервера Apache Tomcat.
Установка Tomcat
Переходим на страницу официального сайта веб-сервера. В меню слева выбираем необходимую версию Tomcat:
* на момент обновления статьи, последняя версия была 10.
Копируем ссылку на архив tar.gz:
Используя скопированную ссылку, скачиваем архив на наш сервер:
Распаковываем содержимое архива в каталог /opt/tomcat:
tar zxvf apache-tomcat-*.tar.gz -C /opt/tomcat —strip-components 1
Готово. Можно запустить сервер командой:
Открываем браузер и переходим на страницу http:// :8080 — мы должны увидеть стартовую страницу Tomcat:
Наш сервер работает.
Посмотреть версию установленного программного обеспечения можно командой:
java -cp /opt/tomcat/lib/catalina.jar org.apache.catalina.util.ServerInfo
Мы должны увидеть что-то на подобие:
Server version: Apache Tomcat/10.0.2
Server built: Jan 28 2021 18:48:46 UTC
Server number: 10.0.2.0
OS Name: Linux
OS Version: 5.4.0-26-generic
Architecture: amd64
JVM Version: 14.0.2+12-Ubuntu-120.04
JVM Vendor: Private Build
Настройка автозапуска
Мы выполнили разовый запуск нашего веб-сервера, но, когда будет перезагружен компьютер, он не запустится. Чтобы это исправить, мы создадим юнит в systemd.
Для начала, остановим работу Tomcat:
Поменяем владельца для всех файлов в каталоге /opt/tomcat:
chown -R tomcat:tomcat /opt/tomcat
Создадим конфигурационный файл для нового юнита:
[Unit]
Description=Apache Tomcat Server
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=»JAVA_HOME=/usr/lib/jvm/default-java»
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
* где обращаем внимание на:
- User/Group — пользователь и группа пользователя, от чьего имени будет работать сервис.
- Environment — переменные окружения. В нашем примере задается несколько для нормальной работы Java и Tomcat.
- ExecStart/ExecStop — пути к скриптам, которые запускают или останавливают работу службы веб-сервера.
- Restart/RestartSec — задают поведение сервиса при необходимости выполнить перезапуск. В нашем примере выполнять при сбое с интервалом в 10 секунд.
Из данных опций, возможно вам захочется поменять CATALINA_OPTS, например, задать другие значения для выделения памяти или указать определенный порт. Остальные опции можно оставить.
Перечитываем новый конфигурационный файл в systemd:
Источник
Установка и настройка Apache Tomcat под Linux
Замысел написать эту статью про установку и настройку, наверное, одного и самых популярных веб-серверов на Java возник уже давно. Одной из причин было желание сделать небольшую заметку «для себя» с подробной инструкцией. Возможно эта статья также пригодится другим java программистам. Пользы для кого-нибудь ещё, например для системных администраторов в ней будет не так много. Скорее всего они просто сделают так: apt-get install tomcat8 и затем потребуют у программиста war-ик для развертывания. Программист же часто хочет чуть большего — например, возможности работать с различными версиями серверов (которых может даже ещё нет в официальном репозитории) или наоборот откатиться к какой-то специфичной версии. Системному администратору такие исследования, как правило, не нужны. По-хорошему, у него должна стоять просто стабильная работающая версия, на которую периодически он будет накатывать обновления и лишний раз на неё не дышать.
В общем, это статья про то, как программисту установить Apache Tomcat под Linux чтобы «поиграться» с ним, но при этом ничего сильно не сломать.
Также эта статья может быть полезна в тех случаях, когда начинающий java программист отладив свое веб-приложение Tomcat запущенным на Windows, сталкивается со жгучим желанием развернуть свой сайт на какой-нибудь недорогой VPS-ке с Ubunt-ой.
Статья может показаться излишне многословной, но мне хотелось рассказать про основные «грабли» и способы их обхода. Могу предположить, что системные администраторы могут быть недовольны тем, что это решение недостаточно системные. Поэтому тем, кто хочет подробно изучить данный вопрос или посвятить свою жизнь профессиональной (т.е. получать за это деньги) настройки линуксовых серверов, тому лучше следует обратиться к соответствующей литературе, обучится этому ремеслу у профессионала и черпать знания у сисадминского сообщества. Здесь же у меня просто блог для java программистов.
Подготовка
Исходные данные.
Linux. Debian 9. 64bit.
1. Устанавливаем JDK.
Почему JDK, а не JRE? По-факту достаточно JRE, но лично мне приятно иметь возможность в случае необходимости по-быстрому скомпилировать программку на java прямо на сервере.
Вы не поверите, но жизнь такая интересная штука, никогда не угадаешь когда тебе может понадобится скомпилировать и запустить что-то на Java. Лично мне запуск javac из консоли на сервере помогал несколько раз.
Далее, я предпочитаю ставить Oracle JDK. Собственно OpenJDK тоже неплох и устанавливается гораздо проще (sudo apt-get install default-jdk). Просто я отдаю предпочтение оригинальной Sun/Oracle. Тем не менее, ставить Oracle JDK, OpenJDK или какую-либо другую версию — личное дело каждого. Лично я отношусь к пользователям Open JDK без предубеждения. Более того, сам часто использую версии Open JDK (например Java 9) для того, чтобы ознакомиться с их новыми возможностями.
Установка Oracle JDK под Windows и Linux сильно отличаются. Под Windows проще установить Oracle JDK проще простого (скачать и запустить), а сборку Open JDK под Windows нужно ещё поискать.
С Linux-ом всё наоборот. Open JDK как я писал ставится очень просто через apt, с Oracle JDK чуть сложнее.
В интернете существует совет, что для установки нужно добавить ещё один apt-репозиторий. Я так не делаю. Возможно это лично моя паранойя, но я стараюсь так не делать и делаю установку руками. Особенно если учесть, что установка заключается в том, чтобы скачать и распаковать архив.
Для этого заходим на сайт загрузки Oracle.
Выбираем jdk-XYZ-linux-x64.tar.gz файл. Правой кнопкой — сохранить ссылку.
Далее скачиваем архив:
$wget —header «Cookie: oraclelicense=accept-securebackup-cookie» [ссылка]
$wget —header «Cookie: oraclelicense=accept-securebackup-cookie» http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.tar.gz
Специально для параноиков, нужно проверить SHA-1 сумму (поскольку выкачиваем-то по голому http).
Смотрим что показалось на экране и сверяем значение, с тем что опубликовано на официальном сайте.
Для этого заходим на сайт на сайт загрузки и ищем строчку Checksum.
Например для jdk-8u73-linux-x64.tar.gz
она должна быть f4f1f7ab1b5986aa2ee2a2f035a2d7a8ab57a673bdee4fc51d8127dd84f423ae
Если в картинках, то так:
Загрузка Oracle JDK
$tar -xzf jdk-8u73-linux-x64.tar.gz -C /opt
По старой привычке я складываю всё в «/opt». После этого делаю симлинк.
$link -s /opt/jdk1.8.0_74 /opt/jdk
Установка
1. Загружаем Apache Tomcat с официального сайта.
Выбираем нужную версию, копируем ссылку на tar.gz архив и скачиваем.
Например так:
Я понимаю, что многим это может показаться занудством, но все-таки решил написать, может просто кто-то не знает что он должен это делать.
Вообще можно проверить и так:
$wget https://www.apache.org/dist/tomcat/tomcat-8/v8.0.33/bin/apache-tomcat-8.0.33.tar.gz.sha1 $sha1sum -c apache-tomcat-8.0.33.tar.gz.sha1
Тоже самое в картинках:
Загрузка Apache Tomcat
2. Сервер можно распаковать туда же в /opt.
$tar -xzf apache-tomcat-8.0.33.tar.gz -C /opt $link -s /opt/apache-tomcat-8.0.33 /opt/tomcat
Также для удобства делаю симлинк, например tomcat, tomcat-dev, tomcat-8, tomcat-not-working и т.д. В зависимости от целей сервера.
Настройка
Переходим в папку /opt/tomcat/bin
Создаем файлик setenv.sh
Записываем в него:
Про этот файл можно почитать в документации: RUNNING.txt.
На самом деле, часто некоторые разработчики просто тупо вбивают «JAVA_HOME=. » прямо в catalana.sh.
Дело в том, что проще открыть nano catalana.sh и поправить его, чем создавать setenv.sh (а точнее как-то узнать про его существование), хотя изначально этот файл специально был сделан для того, чтобы менять ключи JVM и различные переменные окружения, и при этом не портить основной запускаемый файл.
Вот выдержка из документации:
Using the «setenv» script (optional, recommended)
Apart from CATALINA_HOME and CATALINA_BASE, all environment variables can
be specified in the «setenv» script. The script is placed either into
CATALINA_BASE/bin or into CATALINA_HOME/bin directory and is named
setenv.bat (on Windows) or setenv.sh (on *nix). The file has to be
readable.
By default the setenv script file is absent. .
Строго говоря, часто переменная окружения JAVA_HOME часто указывает туда, где установлена системная JVM. По-большому счету это правило работает, но часто в работе/отладке приходится запускать какую-то конкретную версию Tomcat-а под какой-то специальной версией JVM. Поэтому удобно иметь возможность гибко менять настройки через setenv.sh.
После того как все пути настроены, запускаем и проверяем, что все хорошо работает.
Кстати заметил интересный момент. При запуске на виртуальном хостинге может быть довольно ощутимая задержка в старте (около минуты).
Не хочется углубляться в детали, но мне помогла установка haveged.
$apt-get install haveged
В принципе это опционально, можно просто подождать и проверить, как всё запустилось на 8080 порту.
Если все хорошо, двигаемся дальше.
Далее создаем специального пользователя для запуска сервера.
$groupadd tomcat $useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat $chown -R tomcat:tomcat /opt/tomcat
После этого проверяем, что всё запускается. Например так:
$sudo -u tomcat /opt/tomcat/bin/startup.sh $tail -f /opt/tomcat/catalina.log
Ждем пока не появится надпись, что сервер успешно запустился.
Дальше попробуем запустить на 80-ом порту. Поскольку для запуска на 80-ом порту нужен рут, а запускать из под рута это нарушение «техники безопасности», то это можно сделать быстрым хаком, перенаправив порты.
$iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-ports 8080
Естественно нужно убедиться, что у вас не установлен уже какой-нить веб-сервер (например apache или nginx), который работает на 80-ом порту.
Проверяем, что все нормально и если всё хорошо — сохраняем правило переброса портов.
$invoke-rc.d iptables-persistent save
Если сохранялка iptables не установлена — устанавливаем:
$apt-get install iptables-persistent
Собственно говоря всё.
Теперь о том, на что скорее всего обратят внимание профессиональные системные администраторы.
1. Tomcat заводят через mod_jk за Apache HTTPD или за Nginx (через reverse proxy).
Это дает возможность разделить статику, балансировать нагрузку и делать многие другие полезные штуки. Это круто в продакшене, но в девелоперской конфигурации это ещё один слой который не всегда упрощает отладку и разработку.
В принципе в настройке ничего сложного нет, но всё равно нужно будет покурить документацию. Раньше я предпочитал связку через mod_jk, теперь чаще сталкиваюсь с Nginx.
2. Нужно сделать запуск Tomcat-а как службу. Это не паранойя, а здравый смысл. По-крайней мере если не дай Бог сервер перезапустится, не нужно будет в ручную его запускать.
3. Правильные сисадмины разводят файлы томката по правильным папкам (/etc, /var/log и т.д.) и более деликатно относятся к правам доступа к конфигурационным файлам (и не только).
Можно посмотреть, как это делается через apt-get install tomcat8.
4. Не буду отрицать, что у многих /opt — помойка в которой лежит всякое барахло.
Тем не менее, если это мой персональный сервер, то это не помойка, а мой личный склад программ.
5. Хорошие сисадмины настраивают iptables и прикрывают 8080 порт извне. Точнее они прикрывают все порты, к которым не нужен доступ из вне.
Если уж говорить на чистоту, то лично я не люблю заниматься администрированием и настройкой серверов. Каждый должен заниматься своим делом, пусть это делает линуксоид со стажем. Ещё раз повторюсь, здесь речь идет скорее о некой девелоперской конфигурации, т.к. сисадмин делает установку нормальной стабильной версии «на века», настраивает её и потом периодически накатывает обновления. Программисту же, в силу своей профессиональной деятельности, приходится периодически меняет настройки, тестировать, менять версии библиотек, конфиги, что-то накатывать/откатывать и делать другие непотребства с сервером, пока не добьется от сервера нужной работы.
С другой стороны, всегда нужно соблюдать технику безопасности.
— Не запускать от рута (даже если нужен 80-ый порт).
— Закрывать доступ к служебным портам.
— Не оставлять дефолтных паролей.
— Не запускать непонятных и непроверенных программ.
Источник