How to setup Nginx reverse proxy for multiple containers with each container having its own Nginx server
Asked Answered
P

0

8

I've a VPS on which I want to deploy multiple web applications (for which I've already read posts and they're perfect when we have directly sub container). I want to manage each web application having its own nginx to route to its sub domains and also some static website's related to them. I've two docker compose. My network looks like the following. Image.

Containers Network

My NGINX Rerverse proxy should be responsible to route the domains to respective nginx container. It might be possible or not I'm not sure (that's why I asked help). If someone can provide a better understanding that I'm open to suggestions. Below is my configuration for nginx proxy container and other web apps docker yaml file code. I've used the NGINX PROXY

NGINX PROXY Docker Compose File

version: "3.7"
services:
  nginx-proxy:
    image: jwilder/nginx-proxy:alpine
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

networks:
  default:
    external:
      name: nginx-proxy

WEB APPLICATION 1 docker-compose.yml

version: "3.7"
networks:
  default:
    external:
      name: nginx-proxy
  yoda-network:
    driver: bridge
services:
    adminer:
        container_name: ${APP_NAME}_adminer
        image: adminer
        depends_on:
            - mysql
        expose:
            - 8080
        environment:
            VIRTUAL_HOST: yodaledger.com
            VIRTUAL_PORT: 8080
        networks:
            - yoda-network
    python:
        container_name: ${APP_NAME}_python
        image: python:3.6
        command: bash -c "pip3 install -r requirements.txt && python manage.py runserver 0.0.0.0:8000"
        volumes:
            - ${APP_PATH}var/www/api.yodaledger.com/yodaledger_backend:/app
            - ${APP_PATH}var/www/static.yodaledger.com:/app/static
        depends_on:
            - mysql
        working_dir: /app
        environment:
            - PYTHONUNBUFFERED=1
            - MYSQL_HOST=mysql
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
            - MYSQL_DATABASE=${MYSQL_DATABASE}
        networks:
            - yoda-network
   nginx:
        container_name: ${APP_NAME}_nginx
        image: nginx:alpine
        expose:
            - 443
            - 80
        volumes:
            - ${APP_PATH}var/www:/var/www
            - ${APP_PATH}var/log:/var/log/nginx
            - ${APP_PATH}var/ssl:/var/ssl
            - ${APP_PATH}etc/nginx:/etc/nginx
            - /tmp/${APP_NAME}/nginx:/tmp
        depends_on:
            - python
        environment:
            VIRTUAL_PORT: 443
            VIRTUAL_HOST: yodaledger.com,api.yodaledger.com,app.yodaledger.com,static.yodaledger.com
        networks:
            - yoda-network
            - default
   mysql:
        container_name: ${APP_NAME}_mysql
        image: mariadb:latest
        #ports:
        #    - "3306:3306"
        volumes:
            - ${APP_PATH}var/mysql:/var/lib/mysql
            - ${APP_PATH}etc/mysql:/etc/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
            - TZ=Europe/Paris
        networks:
            - yoda-network

WEB APPLICATION 2 It looks the same as web application 1.

Peshawar answered 13/1, 2020 at 21:23 Comment(3)
Have a look at jwilder nginx proxy and its dockergen companion. You don't have to use it, but I'm sure that studying it will give you some good ideas.Duisburg
Hi @Duisburg thanks for the comments can explain why I don’t have to use Nginx proxy????Peshawar
I was not clear... you don't have to use jwilder's solution if you don't want to. I linked it as an example.Duisburg

© 2022 - 2024 — McMap. All rights reserved.