Объединение двух виртуальных сред/серверов/приложений в одно (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