Apache Tomcat — это веб-сервер и контейнер сервлетов, используемый для обслуживания приложений Java. Tomcat представляет собой реализацию технологий Java Servlet и JavaServer Pages с открытым исходным кодом, разработанную Apache Software Foundation. В настоящем руководстве описывается базовая установка и определенные моменты конфигурации последней версии Tomcat 9 на сервере Ubuntu 18.04.
Прежде чем начать изучение настоящего обучающего руководства, необходимо настроить на сервере стандартного пользователя без прав root и с привилегиями sudo
. Вы можете узнать, как это сделать, из нашего руководства по начальной настройке сервера Ubuntu 16.04.
Tomcat требуется наличие на сервере Java, чтобы выполнять любой код веб-приложения Java. Мы можем удовлетворить это требование, установив OpenJDK с помощью apt.
Во-первых, обновите индекс пакетов apt:
- sudo apt update
Затем установите пакет для разработки Java с помощью apt:
- sudo apt install default-jdk
Теперь, когда Java установлена, мы можем создать пользователя tomcat
, который будет использоваться для запуска службы Tomcat.
По соображениям безопасности Tomcat необходимо запускать с помощью пользователя без привилегий (т. е. без прав root). Мы создадим нового пользователя с группой, который будет запускать службу Tomcat.
Во-первых, создайте новую группу tomcat
:
- sudo groupadd tomcat
Далее создайте нового пользователя tomcat
. Мы сделаем этого пользователя участником группы tomcat
с домашней директорией /opt/tomcat
(куда мы будем устанавливать Tomcat) и с оболочкой в /bin/false
(чтобы никто не мог войти в учетную запись):
- sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
Теперь, когда наш пользователь tomcat
настроен, мы загрузим и установим Tomcat.
Лучшим способом установки Tomcat 9 является загрузка последней бинарной версии, а затем ее ручная настройка.
Найдите последнюю версию Tomcat 9 на странице загрузки Tomcat 9. На момент написания номер последней версии — 9.0.10, но вы должны использовать более позднюю стабильную версию, если такая будет доступна. Перейдите в раздел Binary Distributions (Бинарные дистрибутивы), а затем в списке Core скопируйте ссылку на файл tar.gz. В большинстве браузеров вы можете сделать это, нажав правой кнопкой мыши по ссылке и выбрав Скопировать адрес ссылки или похожий вариант.
Далее перейдите к директории /tmp
на сервере. Эта директория отлично подходит для загрузки кратковременных элементов, таких как tar-архив (тарбол) Tomcat, который нам не потребуется после извлечения содержимого Tomcat:
- cd /tmp
Используйте curl
для загрузки ссылки, скопированной на веб-сайте Tomcat:
- curl -O paste_the_copied_link_here
Мы установим Tomcat в директорию /opt/tomcat
. Создайте директорию, а затем извлеките туда архив с помощью этих команд:
- sudo mkdir /opt/tomcat
- sudo tar xzvf apache-tomcat-*tar.gz -C /opt/tomcat --strip-components=1
Далее мы сможем настроить соответствующие разрешения пользователя для нашей установки.
Пользователю tomcat
, которого мы настроили, требуется доступ к установке Tomcat. Сейчас мы добавим нужные настройки.
Перейдите в директорию, куда мы распаковали установку Tomcat:
- cd /opt/tomcat
Предоставьте группе tomcat
права владения для всей директории установки:
- sudo chgrp -R tomcat /opt/tomcat
Далее предоставьте группе tomcat
доступ для чтения для директории conf
и всего ее содержимого, а также доступ execute для самой директории:
- sudo chmod -R g+r conf
- sudo chmod g+x conf
Сделайте пользователя tomcat
владельцем директорий webapps
, work
, temp
и logs
:
- sudo chown -R tomcat webapps/ work/ temp/ logs/
Теперь, когда соответствующие разрешения настроены, мы сможем создать служебный файл systemd для управления процессом Tomcat.
Мы должны иметь возможность запустить Tomcat в качестве службы, поэтому мы настроим служебный файл systemd.
Tomcat должен знать, где установлена Java. Обычно этот путь называют JAVA_HOME. Самым простым способом поиска расположения является использование этой команды:
- sudo update-java-alternatives -l
Outputjava-1.11.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.11.0-openjdk-amd64
Ваш путь JAVA_HOME
— это вывод из последнего столбца (выделено красным). Учитывая приведенный выше пример, для этого сервера правильное значение JAVA_HOME
будет выглядеть таким образом:
JAVA_HOME/usr/lib/jvm/java-1.11.0-openjdk-amd64
Ваш путь JAVA_HOME
может отличаться.
Получив эту информацию, мы сможем создать служебный файл systemd. Откройте файл 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.11.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 запущена, мы сможем протестировать ее, чтобы убедиться, что страница по умолчанию доступна.
Перед этим нам нужно настроить брандмауэр, чтобы разрешить доступ к службе для наших запросов. Если вы выполнили предварительные требования, у вас должен быть включен брандмауэр ufw
.
Tomcat использует порт 8080
для принятия обычных запросов. Разрешите прием трафика для этого порта с помощью следующей команды:
- sudo ufw allow 8080
После изменения брандмауэра вы можете получить доступ к начальной странице по умолчанию, перейдя к вашему домену или IP-адресу с :8080
в браузере.
Open in web browserhttp://server_domain_or_IP:8080
Вы увидите начальную страницу Tomcat по умолчанию в дополнение к другой информации. Однако, если вы воспользуетесь ссылками на диспетчер приложения, например, вам будет отказано в доступе. Мы можем настроить этот доступ далее.
Если вы смогли успешно получить доступ к Tomcat, сейчас лучшее время для активации служебного файла, чтобы Tomcat автоматически запускался при загрузке:
- sudo systemctl enable tomcat
Чтобы использовать веб-приложение диспетчера, которое поставляется вместе с Tomcat, мы должны добавить вход на ваш сервер Tomcat. Для этого мы отредактируем файл tomcat-users.xml
:
- sudo nano /opt/tomcat/conf/tomcat-users.xml
Вы должны будете добавить пользователя, который может получить доступ к manager-gui
и admin-gui
(веб-приложения, которые поставляются вместе с Tomcat). Вы можете сделать это, определив пользователя, аналогичного приведенному ниже примеру, между тегами tomcat-users
. Обязательно измените имя пользователя и пароль на более безопасные:
<tomcat-users . . .>
<user username="admin" password="password" roles="manager-gui,admin-gui"/>
</tomcat-users>
Сохраните файл и закройте его после завершения.
По умолчанию новые версии Tomcat ограничивают доступ к приложениям диспетчера и диспетчера хостов для подключений с самого сервера. Поскольку мы выполняем установку на удаленном компьютере, вы, вероятно, захотите удалить или изменить это ограничение. Чтобы изменить подобные ограничения IP-адреса, откройте соответствующие файлы context.xml
.
Для приложения диспетчера введите:
- sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml
Для приложения диспетчера хостов введите:
- 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
Теперь, после создания пользователя, мы снова сможем получить доступ к веб-интерфейсу управления в веб-браузере. Вы снова можете перейти к правильному интерфейсу, введя в браузере доменное имя или IP-адрес вашего сервера с портом 8080:
Open in web browserhttp://server_domain_or_IP:8080
Страница, которую вы увидите, должна выглядеть аналогично странице, которую вы видели при тестировании ранее:
Давайте изучим приложение диспетчера, доступ к которому можно получить по ссылке или по адресу http://server_domain_or_IP:8080/manager/html
. Вам нужно будет ввести данные учетной записи, которые вы добавили в файл tomcat-users.xml
. После этого вы должны увидеть страницу, которая выглядит следующим образом:
Веб-приложение диспетчера используется для управления приложениями Java. Здесь вы можете запустить, остановить, перезагрузить, развернуть и отменить развертывание. Также вы можете запустить инструменты диагностики для ваших приложений (например, найти утечки памяти). Информация о вашем сервере доступна в самом низу страницы.
Теперь давайте рассмотрим диспетчер хостов, доступный по ссылке или по адресу http://server_domain_or_IP:8080/host-manager/html/
:
На странице диспетчера виртуальных хостов вы можете добавить виртуальные хосты для обслуживания ваших приложений.
Ваша установка Tomcat завершена! Теперь вы можете развернуть ваши собственные веб-приложения Java!
В настоящее время ваша установка Tomcat работает, но абсолютно не имеет шифрования. Это означает, что все данные, включая чувствительную информацию, например пароли, отправляются в текстовой форме и могут быть кем-либо перехвачены и прочитаны в Интернете. Чтобы предотвратить это, мы настоятельно рекомендуем шифровать ваши соединения с помощью SSL. Вы можете узнать, как реализовать шифрование ваших подключений в Tomcat в этом руководстве (примечание: в настоящем руководстве описано шифрование Tomcat 8 в Ubuntu 16.04).
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
There’s a command missing at the end of step four: $sudo chmod -R g+x /opt/tomcat/bin/*.sh
tomcat wouldn’t be able to start without it because systemd[16251]: tomcat.service: Failed at step EXEC spawning /opt/tomcat/bin/startup.sh: Permission dinied