Установка Tomcat 9 на Debian 10
13-03-2021. Разместил: synergix

В этом руководстве мы рассмотрим установку сервера приложений 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.
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/;
}
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.
Вернуться назад