'Trying to dockerize Spring Boot and Laravel apps with Nginx

Basically I do have an app where I have 2 backend projects.

The first one is a Spring Boot project where I have some recommendations algorithms which I want Angular to execute.

The second one is a Laravel project which contains some endpoints for the database (users, items, etc.)

The way Angular is going to communicate with Spring Boot is via WebSocket, so I need some routes to get the data.

The way Angular is going to communicate with Laravel is via API Rest protocol, some basic stuff.

This is the docker-compose I have for the app (I don't know if ports for Nginx are right, but I don't know how to do it)

version: '3'
networks:
  laravel:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "80:80"
      - "8090:8090"
    volumes:
      - .:/var/www/html
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - mysql
    networks:
      - laravel

  mysql:
    image: mysql:5.7.22
    container_name: mysql
    tty: true
    ports:
      - "3306:3306"
    volumes:
      - ./docker/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: ''
      MYSQL_USER: ''
      MYSQL_PASSWORD: ''
      MYSQL_ROOT_PASSWORD: ''
    networks:
      - laravel

  php:
    build:
      context: .
      dockerfile: ./docker/Dockerfile
    container_name: php
    volumes:
      - .:/var/www/html
      - ./machine-learning/RecommendationSystem:/app
      - "./machine-learning/.m2:/.m2"
    ports:
      - "9000:9000"
    networks:
      - laravel

  maven:
    build:
      context: .
      dockerfile: ./docker/java/Dockerfile
    container_name: java
    volumes:
      - ./machine-learning:/usr/src/machine-learning
    depends_on:
      - php
      - mysql
    networks:
      - laravel

Also, here it is my Nginx conf file:

upstream springboot
{
   keepalive 32;
   server localhost:8090 fail_timeout=0;
}

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name localhost;

    root /var/www/html/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location /machine-learning {
        proxy_pass http://localhost:8090/;
        proxy_set_header    Host               $host;
        proxy_set_header    X-Real-IP          $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Host   $host;
        proxy_set_header    X-Forwarded-Server $host;
        proxy_set_header    X-Forwarded-Port   $server_port;
        proxy_set_header    X-Forwarded-Proto  $scheme;
    }

   error_log /var/log/nginx/error.log;
   access_log /var/log/nginx/access.log main;
}

When I execute mvn package inside the container and then execute curl --verbose http://localhost:8090, it shows me the content I am expecting (a basic hello world message), so I guess the Nginx conf file is correct. When I access this same route in my web browser, I receive the: "The connection was reset" message.

Anyone could help me?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source