This is a tutorial about how to install production-ready Nginx, Apache Tomcat 7 and Java Runtime (JRE) 8 on Ubuntu 16.04 machine that is used by today's web server. Nginx use as reverse-proxy for Apache tomcat 7 that separate the web or HTTP tasks with the web application.
Table of Contents:
So, don't waste your time. Let's begin.
Install Java Runtime 8
We assume that you already have VPS hosting that includes ubuntu 16.04 as default operating system. With this clean ubuntu 16.04, we start by installing the Java Runtime (JRE) 8 first. Now, enter your VPS via putty or ssh client in the terminal. In putty or terminal run this command.
sudo add-apt-repository ppa:webupd8team/java
Next, update apt by this command.
sudo apt update
Now, install Oracle Java 8 in your ubuntu by this command.
sudo apt install oracle-java8-installer
Check Java installation by this command.
javac -version
If you see like below, your Java installation is ok.
javac 1.8.0_121
To make your Java 8 installation as default run this command.
sudo apt install oracle-java8-set-default
For using Tomcat 7 with Java 8, make sure that JAVA_HOME is set. To find where Java installation, type this command.
sudo update-alternatives --config java
You will see like this, just type enter and copy the used path.
There is 1 choice for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 auto mode
* 1 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
Press <enter> to keep the current choice[*], or type selection number:
Now, edit "/etc/environment" by the terminal editor.
sudo nano /etc/environment
Add this line to the end of the file.
JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre"
Save, quit and reload the configuration.
source /etc/environment
Test your configuration by this command.
echo $JAVA_HOME
Install Tomcat 7
It's easy to install Tomcat 7 using apt. Just type this command.
sudo apt-get install tomcat7
If you see an error at the of installation like this.
Creating config file /etc/logrotate.d/tomcat7 with new version
Job for tomcat7.service failed because the control process exited with error code. See "systemctl status tomcat7.service" and "journalctl -xe" for details.
invoke-rc.d: initscript tomcat7, action "start" failed.
dpkg: error processing package tomcat7 (--configure):
subprocess installed post-installation script returned error exit status 1
Setting up authbind (2.1.1+nmu1) ...
Processing triggers for systemd (229-4ubuntu12) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
tomcat7
E: Sub-process /usr/bin/dpkg returned an error code (1)
Edit "/etc/default/tomcat7" and uncomment and change JAVA_HOME like this.
JAVA_HOME=/usr/lib/jvm/java-8-oracle
Now, start Tomcat7 service by this command.
sudo service tomcat7 start
To make Tomcat 7 running smoothly, edit again "/etc/default/tomcat7" and change "JAVA_OPTS".
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"
Restart and test your Tomcat 7 in the browser.
sudo service tomcat7 restart
Install Nginx
To install Nginx just type this command.
sudo apt-get install nginx
If there is show choices of "/etc/default/tomcat7" configuration, leave it to default locally modified configuration and enter.
Now, test your Nginx HTTP server in your browser.
Make Tomcat 7 reverse to Nginx
Now is the time to make Tomcat 7 reverse to Nginx, so the user can access Tomcat 7 application via Nginx on port 80. Next, edit the Nginx configuration.
sudo nano /etc/nginx/sites-enabled/default
Find "location /" and change to this code.
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:8080/;
}
Restart Nginx.
sudo service nginx restart
Open your web server in the browser without port 8080. If you see tomcat welcome page, you successfully install Nginx as a reverse proxy of Tomcat 7.
If you using the limited resource of VPS (eg. 1 GB RAM), set swap on ubuntu server. Check if the system has configured swap by this command.
sudo swapon --show
To check if there's no active swap on disk use this command.
free -h
Before setting a swap, check your hard disk space by this command.
df -h
If there's enough available space, you can create a swap file. For my requirements of Tomcat 7 application, we need to add 1GB swap.
sudo fallocate -l 1G /swapfile
Verify the amount of swap file that just created.
ls -lh /swapfile
Next, enable the swap file. But first, make /swapfile accessible to "root".
sudo chmod 600 /swapfile
Check permission changes.
ls -lh /swapfile
You should see permission like this.
-rw------- 1 root root 1.0G Jan 23 01:44 /swapfile
Next, mark the swap space by this command.
sudo mkswap /swapfile
Next, make enable the swap file.
sudo swapon /swapfile
Verify available swap.
sudo swapon --show
Check again swap space by this command.
free -h
To make swap permanent, add this file information to "/etc/fstab".
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
That it's, now your server is ready for production and serve worldwide web.
That just the basic. If you need more deep learning about Java and Spring Framework you can take the following cheap course:
- Java basics, Java in Use //Complete course for beginners
- Java Programming: Master Basic Java Concepts
- Master Java Web Services and REST API with Spring Boot
- JDBC Servlets and JSP - Java Web Development Fundamentals
- The Complete Java Web Development Course
- Spring MVC For Beginners: Build Java Web App in 25 Steps
- Practical RESTful Web Services with Java EE 8 (JAX-RS 2.1)
Thanks.