How to Install Apache Tomcat 10 on Rocky Linux 8

Posted in :

前置準備:

sudo dnf update
sudo dnf install wget tar

Install Java:

sudo dnf install java-11-openjdk-devel

Create a System User

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

Download Tomcat
https://tomcat.apache.org/download-10.cgi

VERSION=10.1.6
wget https://dlcdn.apache.org/tomcat/tomcat-10/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R a+rx /opt/tomcat/

說明:tomcat 安裝目錄在 /opt/tomcat, 如果有用 eclipse ,會指到這個路徑。

附註:安裝的版本太新,似乎也會有新的問題。實際上可以下載的版本:
https://dlcdn.apache.org/tomcat/

改用 9.0.27

VERSION=9.0.72
wget https://dlcdn.apache.org/tomcat/tomcat-9/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz
sudo tar -xf apache-tomcat-${VERSION}.tar.gz -C /opt/tomcat/
sudo ln -s /opt/tomcat/apache-tomcat-${VERSION} /opt/tomcat/latest
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R a+rx /opt/tomcat/

說明: 建議定期更新 Tomcat 版本.

[漏洞編號]

CVE-2023-41080: FORM 認證功能中存在 URL 重新導向到不受信任網站的漏洞,

[受影響產品]

Apache Tomcat

[建議措施]

  • 升級至 Apache Tomcat 11.0.0-M11 或更高版本
  • 升級至 Apache Tomcat 10.1.13 或更高版本
  • 升級至 Apache Tomcat 9.0.80 或更高版本
  • 升級至 Apache Tomcat 8.5.93 或更高版本

Create a Systemd Unit File

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

說明: 建議使用 /opt/tomcat/latest 的 symlink, 可以減少升級時的步驟.


Start and Enable the Tomcat service

sudo systemctl daemon-reload
sudo systemctl enable tomcat --now

檢查Tomcat 是否已啟動:

sudo systemctl status tomcat

到這邊,感覺很順利。


Configure Tomcat Web Management Interface

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

找到 <tomcat-users> tag, 增加下面設定值:

<role rolename="manager-gui"/>
    <user username="manager" password="your-password" roles="manager-gui" />
<role rolename="admin-gui"/>
	<user username="admin" password="your-password" roles="admin-gui"/>
</tomcat-users>

可以看到,預設值官方有幫我們註解掉。

執行下列指令,修改設定檔:

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

如果,在開發中,要限定特定的IP才可以連到server, 可以在這個檔案做設定。

設定好之後,重啟 tomcat:

sudo systemctl restart tomcat

install SSL

下面的 script 以 tomcat.example.com 申請 let’s encrypt 的 ssl 憑證

sudo dnf install epel-release
sudo dnf install certbot
sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d tomcat.example.com
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
sudo mkdir -p /var/lib/letsencrypt

寫一個新的一個 shell script:

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"

讓檔案可以被執行:

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

再把 certbot-renwe 加入 crontab 排程中,每日自動延展新憑證。


Run TomCat

如果 domain name 與 ssl 憑證都設定好了,可以用下面的網址做測試。

https://tomcat.example.com

如果是連本機的話,且沒有申請 SSL,可以用 http://127.0.0.1:8080/ 就可以看到 Tomcat 了。


相關文章

Several ports (8005, 8080) required by Tomcat Server at localhost are already in use
https://stackoverflow.max-everyday.com/2023/02/several-ports-8005-8080-required-by-tomcat-server-at-localhost-are-already-in-use/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *