Объединение двух виртуальных сред/серверов/приложений в одно (Nginx/Django)

В моем проекте есть две виртуальные среды, "main" и "test". Я хочу объединить их на одном сервере. Мне посоветовали использовать для этого nginx proxy, но я не уверен, как это сделать, особенно учитывая, что каждая среда уже имеет свою собственную сеть:

бэкенд одного проекта (бэкенд "тестового" проекта аналогичен):

version: "3.8"

services:
  postgres:
    image: postgres:13.3
    container_name: postgres_main
    restart: always
    volumes:
      - postgres_data_main:/var/lib/postgresql/data
    ports:
      - 5432:5432
    env_file:
      - .env-main
    networks:
      - main_db_network
  backend:
    <...>
    depends_on:
      - postgres
    env_file:
      - .env-main
    networks:
      - main_db_network
      - main_swag_network
  migrations:
      <...>

networks:
  main_db_network:
    name: main_db_network
    external: true
  main_swag_network:
    name: main_swag_network
    external: true

volumes:
  postgres_data_main:
    name: postgres_data_main
  static_value_main:
    name: static_value_main

Как настроить nginx_proxy, чтобы объединить их на одном сервере?

Вам нужно добавить новый сервис nginx - вероятно, в отдельном файле docker-compose nginx.conf будет выглядеть так:

upstream main {
    server backend:8000;      # name of the service in compose file and opened port
}

upstream test {
    server test-backend:8000;
}

location /main {
    proxy_pass http://main;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
}

location /test{
    proxy_pass http://test;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_redirect off;
}

Или вместо того, чтобы менять имена сервисов - можно различать порты. Например, main иметь отображение 8000:8000 и тестировать, например, 8001:8000

Dockerfile для nginx:

FROM nginx:1.19.0-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d

docker-compose.yml для обслуживания Nginx

version: "3.8"

services:
    nginx:
        build: ./nginx
    ports:
      - "80:80"
    networks:
      - main_swag_network
      - test_swag_network

networks:
    main_swag_network:
        external: true
    test_swag_network:
        external: true

Нужно только обслуживать nginx и иметь соединения с обеими сетями, определенными в конфигурациях test и main

Вернуться на верх