When you start up your EC2 instance, it comes with a default jdk installed (at the time of writing this article, jdk6). So you will need to upgrade it to a newer version.
To install jdk8 on an EC2 instance, run following commands in the terminal:
sudo apt-get update sudo apt-get install openjdk-8-jdk
Or you can use sudo apt-get install default-jdk. After it finishes, run java -version command to make sure it’s properly installed. It should print something like:
openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.16.04.3-b11) OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
Now go to tomcat’s official download site and download the latest tomcat distribution. Unzip the file: tar -xvzf apache-tomcat-9.0.0.M26.tar.gz and copy the extracted content to the location you want to install your tomcat. I will assume it’s installed in the /opt/tomcat-9
Now create tomcat group and user and assign the tomcat folder to it:
sudo groupadd tomcat sudo useradd -r tomcat -s /bin/false -g tomcat tomcat sudo chgrp -R tomcat /opt/tomcat-9 sudo chown -R tomcat /opt/tomcat-9
Note: the -s /bin/false switch, prevents this user of being used as a normal user to login.
Now you can start and use tomcat using its standard startup and shutdown commands like: ./catalina.sh run in the /opt/tomcat-9/bin folder.
Although at this stage, you are able to run tomcat manually, a good practice is to register it as a service so that every time EC2 is restarted, tomcat starts up automatically. If this is what you wish to do, keep reading!
Create the systemd file: nano /etc/systemd/system/tomcat.service and copy the following to the file, save and exit:
[Unit] Description=Apache Tomcat After=network.target [Service] Type=forking Environment=CATALINA_PID=/opt/tomcat-9/temp/tomcat9.pid Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 Environment=CATALINA_HOME=/opt/tomcat-9 Environment=CATALINA_BASE=/opt/tomcat-9 Environment="CATALINA_OPTS=-Xms512m -Xmx1G" Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Djava.awt.headless=true" ExecStart=/opt/tomcat-9/bin/startup.sh ExecStop=/opt/tomcat-9/bin/shutdown.sh User=tomcat Group=tomcat [Install] WantedBy=multi-user.target
Now run following commands to start the tomcat:
sudo systemctl daemon-reload sudo systemctl start tomcat sudo systemctl enable tomcat
After this, tomcat should be up and you should be able to access http://localhost:8080
From now on, you can use following commands to start or stop the tomcat:
sudo service tomcat start sudo service tomcat stop
If you would like all the requests to the EC2 instance to be redirected to your tomcat, you have 2 options. First is to have tomcat listen to the port 80. For this approach, you will need to install tomcat as root user because root is the only user who can open ports under 1000. This approach is not recommended as it exposes some security risks. The second option is to forward all the requests from port 80 to port 8080 using iptables. To do so, run following commands in the terminal:
sudo apt-get install iptables-persistent sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 sudo netfilter-persistent save sudo netfilter-persistent reload
Congratulations! You are all set now!