Поиск по сайту:

Как установить Apache Tomcat 10 с Nginx на Rocky Linux 8


На этой странице

  1. Предпосылки
  2. Шаг 1. Установите Java
  3. Шаг 2. Создание системного пользователя
  4. Шаг 3. Загрузите Tomcat
  5. Шаг 4. Создайте файл модуля Systemd
  6. Шаг 5. Запустите и включите службу Tomcat
  7. Шаг 6. Настройка брандмауэра
  8. Шаг 7. Настройка веб-интерфейса управления Tomcat
  9. Шаг 8. Установите SSL
  10. Шаг 9. Установите Nginx
  11. Шаг 10. Запустите TomCat
  12. Заключение

Tomcat — это веб-сервер с открытым исходным кодом для приложений на основе Java. Он используется для развертывания приложений Java Servlet и JSP. Сервлеты Java — это небольшие программы, определяющие, как сервер обрабатывает запросы и ответы. Tomcat выступает в качестве открытой реализации технологий Java Servlet, JavaServer Pages, Java Expression Language и Java WebSocket.

Доступно несколько версий Tomcat. Мы обсудим установку Tomcat 10 в нашем руководстве. Если вы хотите установить Tomcat 9, инструкции будут такими же. Если есть какие-либо изменения, они будут указаны в туториале.

В нашем руководстве мы установим Tomcat 10 вместе с сервером Nginx, чтобы действовать как обратный прокси-сервер и защищать его с помощью SSL. Существует версия Tomcat 10.1.x, которая является последней альфа-версией Tomcat, но мы не будем ее устанавливать.

Предпосылки

  • A server running Rocky Linux 8.5

  • A non-sudo user with superuser privileges.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Packages required for the installation.

    $ sudo dnf install wget tar
    

Шаг 1 — Установите Java

Для Tomcat 9 и 10 требуется Java 8 и более поздние версии. Мы установим OpenJDK 11, реализацию платформы Java с открытым исходным кодом.

Выполните следующую команду, чтобы установить OpenJDK.

$ sudo dnf install java-11-openjdk-devel

Проверьте установку.

$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

Шаг 2 — Создайте системного пользователя

Мы создадим нового системного пользователя, чтобы свести к минимуму любую угрозу безопасности, запустив Tomcat в качестве пользователя root. Для нового пользователя мы установим /opt/tomcat в качестве домашнего каталога.

Выполните следующую команду, чтобы создать нового системного пользователя для Tomcat.

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

Шаг 3 — Загрузите Tomcat

Последнюю версию Tomcat v10 можно загрузить со страницы загрузки. На момент написания этого руководства последней доступной версией была версия 10.0.14. Перед загрузкой Tomcat проверьте последнюю версию.

Используйте wget для загрузки Tomcat.

$ VERSION=10.0.14
$ wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz

Извлеките файл в каталог /opt/tomcat.

$ sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/

Создайте символическую ссылку на последнюю версию Tomcat, указывающую на каталог установки Tomcats.

$ sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest

Измените владельца каталога на пользователя, созданного ранее.

$ sudo chown -R tomcat:tomcat /opt/tomcat

Шаг 4 — Создайте файл модуля Systemd

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

Создайте и откройте файл /etc/systemd/system/tomcat.service для редактирования.

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

Вставьте следующий код.

[Unit]
Description=Apache Tomcat 10 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено сохранить.

Шаг 5. Запустите и включите службу Tomcat.

Перезагрузите демон службы, чтобы включить службу Tomcat.

$ sudo systemctl daemon-reload

Включите и запустите службу Tomcat.

$ sudo systemctl enable tomcat --now

Проверьте статус службы.

$ sudo systemctl status tomcat
? tomcat.service - Apache Tomcat 10 Servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-12-17 15:54:28 UTC; 24s ago
  Process: 86219 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 86226 (java)
    Tasks: 19 (limit: 11411)
   Memory: 132.7M
   CGroup: /system.slice/tomcat.service
           ??86226 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/latest/conf/logging.properties>

Dec 17 15:54:27 howtoforge systemd[1]: Starting Apache Tomcat 10 Servlet container...
Dec 17 15:54:28 howtoforge systemd[1]: Started Apache Tomcat 10 Servlet container.

Шаг 6 — Настройте брандмауэр

Rocky Linux использует Firewalld Firewall. Проверьте состояние брандмауэров.

$ sudo firewall-cmd --state
running

Разрешить порты HTTP и HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Перезагрузите брандмауэр, чтобы изменения вступили в силу.

$ sudo firewall-cmd --reload

Шаг 7. Настройка интерфейса веб-управления Tomcat

Веб-интерфейс управления будет доступен только после того, как мы создадим для него учетные данные пользователя.

Пользователи и роли Tomcat определяются в файле /opt/tomcat/latest/conf/tomcat-users.xml. Откройте файл для редактирования.

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

Добавьте следующие строки перед строкой . Замените имя пользователя и пароль своими учетными данными.

Выберите разные учетные данные для порталов менеджера и администратора Tomcat.

<tomcat-users>
<!--
    Comments
-->
<role rolename="manager-gui"/>
    <user username="manager" password="managerpassword" roles="manager-gui" />
<role rolename="admin-gui"/>
	<user username="admin" password="adminpassword" roles="admin-gui"/>
</tomcat-users>

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено сохранить.

По умолчанию интерфейс Tomcat доступен только с локального хоста. Если вам нужен доступ к нему из любого места, вам необходимо настроить его.

Откройте /opt/tomcat/latest/webapps/manager/META-INF/context.xml для редактирования.

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

Удалите следующие строки или закомментируйте их, как указано ниже, заключив их в .

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

Разрешение доступа с любого IP-адреса является угрозой безопасности. Вы можете ограничить его, разрешив доступ только с вашего общедоступного IP-адреса. Если ваш общедоступный IP-адрес 22.22.22.22, измените строку следующим образом.

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

Список разрешенных IP-адресов разделен вертикальной чертой (|). Вы можете либо добавить отдельные IP-адреса, либо использовать регулярное выражение.

Сохраните файл, нажав Ctrl + X и введя Y, когда будет предложено сохранить.

Внесите те же изменения в файл /opt/tomcat/latest/webapps/host-manager/META-INF/context.xml.

После завершения перезапустите сервер Tomcat.

$ sudo systemctl restart tomcat

Шаг 8 — Установите SSL

Чтобы установить SSL-сертификат с помощью Lets Encrypt, нам нужно установить инструмент Certbot.

Во-первых, вам нужно скачать и установить репозиторий EPEL.

$ sudo dnf install epel-release

Выполните следующие команды, чтобы установить Certbot.

$ sudo dnf install certbot

Создайте SSL-сертификат.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d tomcat.example.com

Приведенная выше команда загрузит сертификат в каталог /etc/letsencrypt/live/tomcat.example.com на вашем сервере.

Создайте групповой сертификат Диффи-Хеллмана.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Создайте корневой каталог вызова для автоматического обновления Lets Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Создайте задание Cron для обновления SSL. Он будет запускаться каждый день для проверки сертификата и его обновления при необходимости. Для этого сначала создайте файл /etc/cron.daily/certbot-renew и откройте его для редактирования.

$ sudo nano /etc/cron.daily/certbot-renew

Вставьте следующий код.

#!/bin/sh
certbot renew --cert-name tomcat.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Измените права доступа к файлу задачи, чтобы сделать его исполняемым.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Шаг 9 — Установите Nginx

Rocky Linux 8.5 поставляется с последней стабильной версией Nginx. Установите его с помощью следующей команды.

$ sudo dnf module install nginx:1.20

Проверьте установку.

$ nginx -v
nginx version: nginx/1.20.1

Включите и запустите службу Nginx.

$ sudo systemctl enable nginx --now

Создайте и откройте файл /etc/nginx/conf.d/tomcat.conf для редактирования.

$ sudo nano /etc/nginx/conf.d/tomcat.conf

Вставьте в него следующий код.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  tomcat.example.com;

    access_log  /var/log/nginx/tomcat.access.log;
    error_log   /var/log/nginx/tomcat.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/tomcat.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/tomcat.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/tomcat.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
      proxy_pass http://127.0.0.1:8080;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  tomcat.example.com;
    return 301   https://$host$request_uri;
}

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса после завершения.

Откройте файл /etc/nginx/nginx.conf для редактирования.

$ sudo nano /etc/nginx/nginx.conf

Добавьте следующую строку перед строкой include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

Проверьте синтаксис файла конфигурации Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите службу Nginx, чтобы активировать новую конфигурацию.

$ sudo systemctl restart nginx

Шаг 10 — Запустите TomCat

Запустите https://tomcat.example.com в своем браузере, и откроется следующий экран.

Теперь вы можете получить доступ к страницам «Состояние сервера», «Приложение менеджера» и «Диспетчер хоста», используя учетные данные для входа, которые мы настроили на шаге 7.

Заключение

На этом мы завершаем наше руководство по установке и настройке Tomcat Server на сервере под управлением Rocky Linux 8.5 и его обслуживанию через обратный прокси-сервер Nginx, а также использованию SSL для его защиты. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.