DataLife Engine > Настройка > Установка Tomcat 9 на Debian 10

Установка Tomcat 9 на Debian 10


13-03-2021. Разместил: synergix Установка Tomcat 9 на Debian 10Доброе время суток, уважаемый посетитель.

В этом руководстве мы рассмотрим установку сервера приложений Apache Tomcat на Debian 10.
Я предполагаю, что вы обладаете первоначальными навыками по администрированию *nix систем и не буду подробно описывать каждую команду.

Для начала обновим пакеты системы:

$ sudo apt update


Затем установим последнюю версию JDK

$ sudo apt install default-jdk


Теперь следует создать непривилегированного пользователя tomcat в группе tomcat с отключенным шеллом и домашней директорией /opt/tomcat

$ sudo groupadd tomcat
$ sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat


Перейдем во временную директорию и скачаем архив с последней стабильной версией Tomcat 9 версии, которая на момент написания статьи составляла 9.44
Впрочем, вы всегда можете посмотреть актуальную версию по данной ссылке.

$ cd /tmp
$ wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz


Создадим директорию для собственно Tomcat и его приложений и разархивируем скачанный архив.

$ sudo mkdir /opt/tomcat
$ sudo tar xzvf apache-tomcat-9*tar.gz -C /opt/tomcat --strip-components=1


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

$ cd /opt/tomcat
$ sudo chgrp -R tomcat /opt/tomcat
$ sudo chmod -R g+r conf
$ sudo chmod g+x conf
$ sudo chown -R tomcat webapps/ work/ temp/ logs/


Проверим установленную версию JDK

$ sudo update-java-alternatives -l


В выводе команды будет присутствовать версия и путь до Java

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


Запомним вывод, он нам пригодится в дальнейшем для systemd файла.

Создадим systemd файл для запуска Tomcat как сервиса

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-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


В
Environment=JAVA_HOME=
данного файла вам нужно будет указать ту версию Java, что установлена в вашей системе.

Добавим запуск Tomcat при старте системы

$ sudo systemctl daemon-reload
$ sudo systemctl enable tomcat


И попробуем запустить его

$ sudo systemctl start tomcat


Если все сделано правильно, то в выводе команды

$ sudo systemctl status tomcat


будут строки вида

tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2021-03-12 10:47:03 EET; 1 day 6h ago
Process: 1820 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
Main PID: 1827 (java)
Tasks: 40 (limit: 4915)
Memory: 1.6G
CGroup: /system.slice/tomcat.service
└─1827 /usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.util.logging.config.file=/opt/tomcat

Mar 12 10:47:03 systemd[1]: Starting Apache Tomcat Web Application Container...
Mar 12 10:47:03 startup.sh[1820]: Tomcat started.
Mar 12 10:47:03 systemd[1]: Started Apache Tomcat Web Application Container.


Следует отметить, что по умолчанию Tomcat слушает по 8080 порту на всех интерфейсах и вам следует проверить правила iptables, чтобы соединения по данному порту не блокировались.
Также, иногда запуск на данном порту не всегда удобен, особенно если вы используете различные панели управления либо используете связку Apache+nginx, где зачастую Apache использует именно 8080 порт.
Для примера, мы перекинем Tomcat на порт 8081, и будем обращаться к нему через nginx с SSL подключением.

Для начала, добавим пользователя admin с паролем, отредактировав

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


Приведем его к виду


<tomcat-users>
...
    <user username="admin" password="passw0rd" roles="manager-gui,admin-gui"/>
</tomcat-users>



где passw0rd - пароль пользователя admin. Рекомендую задавать его со всеми требованиями к парольной безопасности.

Далее, перенесем запуск Tomcat на 8081 и на loopback интерфейс, отредактировав

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


Найдем блок

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />



и приведем его к виду


<Connector address="127.0.0.1" port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />



Теперь отредактируем файл

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


и

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


приведя к виду

<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


После чего Tomcat запустится на 127.0.0.1 и порту 8081. Но, обращаться к нему можно будет только локально. Исправим это досадное недоразумение.
Будем считать, что nginx у вас уже установлен, у вас имеется служебный домен (к примеру, dev.mydomain.com) с полученным сертификатом Let's encrypt.

Добавим в конфиг nginx данного поддомена

location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8081/;
}


и перезапустим nginx

$ sudo systemctl restart nginx


Теперь, при заходе на https://dev.mydomain.com вас встретит стартовая страница Tomcat.
Вернуться назад