Ovde ćemo instalirati (na dan pisanja) poslednju verziju Apache Tomcat-a na CentOS 7 Linuksu u minimal varijanti – a to je trenutno verzija 9.0.10. Pošto radimo na čistoj mašini, nemamo Javu tako da ćemo instalirati i nju, isto ručno. Tomcat ne može da se startuje ako ne vidi varijablu JAVA_HOME koja treba da puca na pravu lokaciju.

# Skinite Java jdk sa zvaničnog sajta (link ovde)
# U ovom slučaju radi se o verѕiji 8u181, i posle skidanja pokrenite
tar zxvf jdk-8u181-linux-x64.tar.gz
rm -f jdk-8u181-linux-x64.tar.gz
mv jdk1.8.0_181/ /opt/
alternatives --install /usr/bin/java java /opt/jdk1.8.0_181/bin/java 2

# Izaberite redni broj taze instalirane Javu (u ovom slučaju redni broj1) pa pritisnite ENTER
# i kasnije samo proverite da li java -version daje ispravnu verziju (skrinšot ovde)
alternatives --config java

# Dodaćemo JAVA_HOME i JRE_HOME kao globalne varijable dodavanjem u /etc/profile
cp /etc/profile ~/etc-profile-backup-$(date +%Y%m%d%H%M)
echo "export JAVA_HOME=/opt/jdk1.8.0_181" >> /etc/profile
echo "export JRE_HOME=/opt/jdk1.8.0_181/jre" >> /etc/profile

# Skinite Tomcat kao i njegov sha512 kako bi upoređivanjem proverili da li je skinut fajl dobar
curl -O http://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz
curl -O https://www.apache.org/dist/tomcat/tomcat-9/v9.0.10/bin/apache-tomcat-9.0.10.tar.gz.sha512

# Proveravamo SHA512 skinutog fajla. Ako dobijete bilo kakav rezultati iz donje komande nešto ste
# zajebali prilikom skidanja fajla pa probajte ponovo.
diff  <(echo "$(sha512sum apache-tomcat-9.0.10.tar.gz | awk '{print $1}')" ) <(echo "$(cat apache-tomcat-9.0.10.tar.gz.sha512 | awk '{print $1}')") 

# Raspakujte Tomcat i prebacite ga u /opt
tar zxvf apache-tomcat-9.0.10.tar.gz 
mv /opt/tomcat /opt/tomcat-$(date +%Y%m%d%H%M) 2>/dev/null # Za svaki slučaj
mv apache-tomcat-9.0.10 /opt/tomcat

# Dodajte CATALINA_HOME environment varijablu ako ne postoji (isto ćemo globalnu)
[ -z ${CATALINA_HOME} ] && echo "export CATALINA_HOME='/opt/tomcat/'" >> /etc/profile
. /etc/profile || echo "CATALINA_HOME already exists. Please check"

# Pravimo korisnika i dodeljujemo mu vlasništvo nad /opt/tomcat
useradd -r tomcat --shell /bin/false
chown -R tomcat:tomcat /opt/tomcat/

# Pravimo systemd fajl a samom Tomcat-u dodeliti giga RAM-a (pogle CATALINA_OPTS)
[ ! -f /etc/systemd/system/tomcat.service ] &&
echo "[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target

[Service]
User=tomcat
Group=tomcat
Type=forking
Environment=CATALINA_PID=/opt/tomcat/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" >> /etc/systemd/system/tomcat.service || echo "File is missing"

# Radimo novo učitavanje dejmona
systemctl daemon-reload

# Otvaramo portove za Tomcat na firewalld-u
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=8080/tcp --permanent

# Startujemo, enejblujemo i proveravamo status Tomcat-a
systemctl start tomcat
systemctl enable tomcat
systemctl status tomcat

Sad možete otići na veb adresu svog servera i difoltni port (može da se promeni kasnije) 8080, tj u ovom slučaju  http://SERVER-IP-ADDRESS:8080 da proverimo vidi li se difolt početna stranica našeg Tomcat-a i ako se vidi – posao je gotov.

# Ako želite da Tomcat bude na http portu 80 umesto na 8080 najlakše je to odraditi
# putem "port forward" na firewalld nivou putem sledećih komandi
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
firewall-cmd --reload
# Ako želite da isprobate kako bi izgledala neka testna veb aplikacija, primer možete
# skinuti sa Apache Tomcat sajta i postaviti. Kad okinete komande iditi preko brazuera
# na http://tomcaturl/sample da vidite taj primer (pogle skrinšot ispod)
cd /opt/tomcat/webapps/
curl -O https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war