skip to Main Content

This is the situation: I rented (for a trial period) a cloud server and trying to deploy my application .war on Ubuntu Server. Installed Java 17, MySQL and even launched the app. Application run normally, but works on the localhost and program cannot be accessed by IP address.

Here is my pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.to</groupId>
    <artifactId>NameProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>NameProject Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>https://www.NameProject.net</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-springsecurity5</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>9.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>9.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>8.11.2</version>
        </dependency>
        <dependency>
            <groupId>org.imgscalr</groupId>
            <artifactId>imgscalr-lib</artifactId>
            <version>4.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.13.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>NameProject</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

There are no other configuration files. Everything is inside the program.

For solve problem accessibility, I tried installing Nginx and make a proxy server from various examples on the Internet.. Unfortunately, I didn’t find any working option and after all my tries, the Nginx stopped working completely. Maybe I doing something wrong, but uninstalling and reinstalling does not help… So, my question is quite trivial: How to connect a domain name and make the application available on the internet? How to install and configure Nginx for Spring Boot Application? Maybe it can be done differently (without Nginx)?

2

Answers


  1. Chosen as BEST ANSWER

    Add entry to file /etc/nginx/nginx.conf

    http {
    …
        server {
            listen 80;
            listen [::]:80;
            server_name domainName.com www.domainName.com;
    
            location / {
                proxy_pass http://127.0.0.1:8080/; #write real server IP
            }
        }
    ...
    }
    

    If you purchased domain name through Google service, you need to add two DNS records: "A" and "CNAME". Follow Google Domains instructions. To install an SSL/HTTPS certificate on Ubuntu, look at the next example on github.


  2. To make your application accessible not only from "localhost", you must set the server.address property to the IP address of your server. You can also use the server.port property to the port you want to use.
    To set these properties, create a file named application.properties in the same directory where your application’s .war file, and add the following lines (using your actual values):

    server.port=8080
    server.address=192.168.0.1
    

    Spring Boot-based web applications run by default in an embedded Tomcat server, which is included at build time in your application’s war file, so Nginx is not required unless you need some advanced features (like proxying, etc.).

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search