Optimizing Web Application Deployment: Integrating Tomcat with Nginx for scalability
Published: 2024-01-27 10:11:53

This article gives a more broad explanation on the configuration needed to set up your applications needed in building your optimizable web application.

Setting your maven application
create your ec2 instance with a 4GB RAM using the amazon-Linux to confirm check system requirements on apache maven website
install the maven and java packages and dependencies.

step 1 .
Enter the repository with a Maven package
```
sudo wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
```
run the code for the version number 

```
sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
```
then install maven and git 

```
sudo yum install -y apache-maven git
```
install java 8 

```
sudo yum install java-1.8.0-devel
```
run this code to set Java 8 as the default runtime on your ec2

```
sudo /usr/sbin/alternatives --config java
```
then you prompted to enter the number 3
run this command to confirm the maven application is installed 
```
mvn --version
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6fqfkzugue5h7klihfm6.png)



STEP 2
one of the benefit of using a build tool like maven is that you can define the details of the project and any dependencies make configurations. you an also run the test and builds continuously.

in setting up your configurations you configure the settings.xml
and the location is based on this type of installation `/etc/maven/settings.xml` . updating the server id

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/amnb6b8e1t81qjie998u.png)

then updating the pom.xml file 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e3ywp1xficj20bm8fm1c.png)

the first four properties in the properties sections just defines the encoding (UTF-8) and the version of java (java 1.8) that maven uses to compile the application code. amongst other instructions the organization name and host url is included

the repository in the distribution management is updated with the (j-frog URL) the id and name used to generate a configuration used at maven to upload the pom.xml file with generated distributed management config.

update application.properties file with JDBC connection string to authenticate with MYSQL.
the <spring.datasource.url> should be updated with RDS endpoint and connection credentials


STEP 3
push the code changes to your repository from your local system 
```
git add . && git commit -m "changes with pom and properties file"
git push origin
```

STEP 4
clone the repository in your server
`git clone https://github.com/A-LPHARM/javalogin-app.git && cd javalogin-app`

STEP 5
build the source code using the maven arguments
```
mvn deploy 
mvn sonar:sonar
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8sdwlfgo0njglq67i3vi.png)



STAGE 2
step 1
SETTING UP TOMCAT SERVER
Create your ec2 instance and with the requirements t2-micro
and the security group 8080. using the script to build the tomcat application

```
sudo yum update -y
cd /opt
sudo yum install git wget unzip tree -y

#The java version being install here is a function of the tomcat version we are going to install
sudo yum install java-1.8.0-openjdk-devel -y

# Download tomcat software and extract it.
sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gz
sudo tar -xvf apache-tomcat-9.0.84.tar.gz
sudo rm apache-tomcat-9.0.84.tar.gz
sudo mv apache-tomcat-9.0.84 tomcat
sudo chmod 777 -R /opt/tomcat
sudo sh /opt/tomcat/bin/startup.sh

# create a soft link to start and stop tomcat
sudo ln -s /opt/tomcat/bin/startup.sh /usr/bin/starttomcat
sudo ln -s /opt/tomcat/bin/shutdown.sh /usr/bin/stoptomcat
sudo starttomcat
```
next
run `chmod +x tomcat.sh`

then 
`./tomcat.sh`

STEP 2
To configure the tomcat server you comment out the words
` vi /opt/tomcat/webapps/manager/META-INF/context.xml `
then 
comment out 
```
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/78k0ajz2mm5858zc50yt.png)



STEP 3
add tomcat users
first
`vi /opt/tomcat/conf/tomcat-users.xml`
then go to the last line and add user before closing tag

```
<user username="henriksin" password="admin123" roles="manager-gui,admin-gui"/>
<user username="henriksin" password="admin123" roles="manager-gui,admin-gui,manager-script"/>
```

copy the java web application from the Jfrog central repository to the tomcat server path `/opt/tomcat/webapps/ `
first 
`cd /opt/tomcat/webapp`
then 

```
then wget -o --user=admin --password=admin123  http://54.173.150.66:8081/repository/henryrepo/com/devopsrealtime/dptweb/1.0/dptweb-1.0.war
```

STAGE 3

STEP 1
deploy your Nginx on ec2 instance

install and configure the nginx on your Ec2 Instance 
      

```
sudo yum install -y nginx
  
sudo systemctl start nginx 
  
sudo systemctl enable nginx 
  
sudo systemctl status nginx
```



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5o0jjeau5zlpi3fkxlyk.png)

step 2 
Configure the Tomcat to work with the Nginx

navigate to the Nginx configuration directory 
cd /etc/nginx

then 

```
cp nginx.conf nginx_old
```
Create a backup of the existing Nginx configuration

```
vi /etc/nginx/nginx.conf
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zvrelmy6c6m0pz4lxd6.png)

and edit the file
this is the place where we configure our local tomcat instance 
add 
... 
http {
    server {
        listen  8080;
        location /webapp/ {
            proxy_pass http://56.173.245.100:8080/dptweb-1.0/;
        }
    }
}
……

then restart the service

```
sudo systemctl restart nginx

sudo systemctl status nginx
```

TESTING THE SERVER

access the server through the web   
with the provided ip http://56.173.245.100 
you should now observe the java web application is working seamlessly.

following these steps, you have successfully deployed a java web application to a tomcat server and configured Nginx as a reverse proxy on an aws ec2 instance.