Skip to main content

tomcat upgrade

Prerequisites

  • System: Ubuntu Server with root or sudo access and network connectivity

Install Tomcat

Update the system

sudo apt update && sudo apt upgrade -y

Install Java because Tomcat requires it. If there is no Java currently on the server, use the following command to install OpenJDK

sudo apt install default-jdk -y

Create a system user for Tomcat (optional but recommended)

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

Download specific version of Tomcat (9.0.82)

cd /tmp
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.82/bin/apache-tomcat-9.0.82.tar.gz

Extract it and move to /opt/tomcat-9.0.82

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

Creating a symbolic link /opt/tomcat pointing to the specific version makes upgrades easier - you can just update the link without changing other configs

sudo ln -sfn /opt/tomcat-9.0.82 /opt/tomcat

Set permissions

sudo chown -R tomcat:tomcat /opt/tomcat-9.0.82
sudo chown -R tomcat:tomcat /opt/tomcat
---
sudo chmod -R u+x,g+rx,o+rx /opt/tomcat-9.0.82/bin/
sudo chmod +x /opt/tomcat-9.0.82/bin/*.sh

Create a systemd service (for auto-start)

sudo vim /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-11-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

Restart=on-failure

[Install]
WantedBy=multi-user.target

Reload systemd and start Tomcat

sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat

Access Tomcat via http://<your-server-ip>:8080

sudo ufw allow 8080

Check Tomcat version

sudo java -cp /opt/tomcat/lib/catalina.jar org.apache.catalina.util.ServerInfo

Backup Tomcat

Create a backup of existing Tomcat deployment

sudo mkdir -p /backups/tomcat
sudo tar -czvf /backups/tomcat/tomcat-9.0.82-backup-$(date +%Y%m%d).tar.gz /opt/tomcat-9.0.82

Create a backup of existing configs, webapps, and systemd service file (optional but recommended)

sudo cp -r /opt/tomcat/conf /backups/tomcat/tomcat-9.0.82-conf-backup-$(date +%Y%m%d)
sudo cp -r /opt/tomcat/webapps /backups/tomcat/tomcat-9.0.82-webapps-backup-$(date +%Y%m%d)
sudo cp /etc/systemd/system/tomcat.service /backups/tomcat/tomcat-9.0.82-tomcat.service-backup-$(date +%Y%m%d)

Upgrade Tomcat

Download specific version of Tomcat (9.0.85)

cd /tmp
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz

Extract and move it to /opt/tomcat-9.0.85

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

Set permissions

sudo chown -R tomcat:tomcat /opt/tomcat-9.0.85
sudo chmod -R u+x,g+rx,o+rx /opt/tomcat-9.0.85/bin/ # 755
sudo chmod +x /opt/tomcat-9.0.85/bin/*.sh

Copy config, webapps from the current installation

sudo chmod 755 /opt/tomcat/conf/
sudo chmod 755 /opt/tomcat/webapps/
---
sudo cp -r /opt/tomcat/conf/* /opt/tomcat-9.0.85/conf/
sudo cp -r /opt/tomcat/webapps/* /opt/tomcat-9.0.85/webapps/

Stop existing Tomcat

sudo systemctl stop tomcat

Switch symbolic link to new version

sudo ln -sfn /opt/tomcat-9.0.85 /opt/tomcat

Start new Tomcat version

sudo systemctl start tomcat

Check new Tomcat version

sudo java -cp /opt/tomcat/lib/catalina.jar org.apache.catalina.util.ServerInfo

Rollback Tomcat

Stop Tomcat

sudo systemctl stop tomcat

Point symbolic link back to previous version

sudo ln -sfn /opt/tomcat-9.0.82 /opt/tomcat

Start Tomcat again

sudo systemctl start tomcat

Common Errors and Fixes

Cannot execute due to permission

sudo chmod +x /opt/tomcat/bin/*.sh

Inspect and adjust

sudo ls -ld /opt/tomcat/bin/
---
drwxr-x--- 2 tomcat tomcat 4096 Mar 22 20:15 /opt/tomcat/bin/

Fix permission by granting execute permissions to "others"

sudo chmod -R u+x,g+rx,o+rx /opt/tomcat/bin/
---
drwxr-xr-x 2 tomcat tomcat 4096 Mar 22 20:15 /opt/tomcat/bin/