How do I configure/ reconfigure an existing NGINX server to proxy to a docker container?

Viewed 12

I have an existing NGINX server hosting 2 websites, one as standard and one on a node server. I want to run 3 docker containers as well on this.

All of the tutorials suggest running NGINX in a container, however this would conflict with my existing set up.

  1. nodejs server, ports 3030:3030
  2. mysql, ports 3360:3360
  3. phpmyadmin, ports 8080:80

They run on localhost on my local machine fine, but I cant get NGINX on the remote server to host them.

I want to be able to access the node server at http://publicIP:3030

I have tried to follow this answer but NGINX is giving me 404 error when trying to access.

my nginx config is:

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


        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html index.php;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }



        location /paragon/      {
                proxy_pass              http://localhost:3030/;
#               proxy_set_header        X-SRV paragon;
        }


        location /phpmyadmin    {
                proxy_pass              http://localhost:8080/;
#               proxy_set_header        X-SRV phpmyadmin;
        }


        location /mysql         {
                proxy_pass              http://localhost:3360/;
#               proxy_set_header        X-SRV mysql;
        }

I have tried it with the X-SRV headers uncommented as well.

My docker-compose.yml config is:


services:
  web:
    container_name: paragon_web
    build: .
    command: npm run
    depends_on:
      - db
    volumes:
      - ./:/app
      - /node_modules
    networks:
      - paragon_net 
    ports:
      - "3030:3030"
  
  db:
    container_name: paragon_db
    image: mysql:8.0
    command: 
      --default-authentication-plugin=mysql_native_password
      --init-file ./src/data/db_init.sql
    restart: unless-stopped
    volumes:
      - ./src/data/db_init.sql:/docker-entrypoint-initdb.d/
      - mysql-data:/var/lib/mysql
    ports:
      - "3360:3306"
    expose:
      - "3306"
    environment:
      MYSQL_DATABASE: paragon
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: admin
      MYSQL_PASSWORD: paragon99
      SERVICE_TAG: dev
      SERVICE_NAME: paragon_db
    networks:
      - paragon_net

    # volumes:
  
  phpmyadmin:
    container_name: sql_admin
    image: phpmyadmin:5.2.0-apache
    restart: always
    depends_on:
      - db
    ports:
      - "8090:80"

    networks:
      - paragon_net


networks:
  paragon_net:
    driver: bridge


The location of the new site on the server are at /var/www/newsite

0 Answers
Related