前置準備:
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/