Как запустить несколько сайтов на одном сервере с помощью docker и nginx?
Я пытаюсь запустить два сайта на django на одном сервере под разными ip, возникает ошибка, что порт занят, я исправил порты, но сайт не запускается. Подскажите, пожалуйста, где ошибка? Когда перехожу по ip получаю ошибку This site can't be reached. У меня есть два файла docker-compose, и в каждом из них я запускаю nginx, на втором он выдает ошибку, подскажите пожалуйста как правильно его настроить. Я слышал, что есть вариант с общим файлом nginx, но не понимаю как его реализовать. Помогите пожалуйста.
Это второй файл docker-compose и его настройки. Буду очень благодарен за помощь
.env
#Django
# Should be one of dev, prod
MODE=prod
PORT=8008
#postgres
DB_NAME=xxx
DB_USER=xxx
DB_HOST=xxx
DB_PASSWORD=xxxx
DB_PORT=5432
POSTGRES_PASSWORD=mysecretpassword
#WSGI
WSGI_PORT=8008
WSGI_WORKERS=4
WSGI_LOG_LEVEL=debug
# Celery
CELERY_NUM_WORKERS=2
# Email
EMAIL_HOST_USER=xxxx
EMAIL_HOST_PASSWORD=xxxx
docker-compose.yml
version: '3'
services:
backend:
build: ./
container_name: site_container
restart: always
command: ./commands/start_server.sh
ports:
- "${PORT}:${WSGI_PORT}"
volumes:
- ./src:/srv/project/src
- ./commands:/srv/project/commands
- static_content:/var/www/site
env_file:
- .env
depends_on:
- postgres
postgres:
image: postgres:12
volumes:
- pg_data:/var/lib/postgresql/data
env_file:
- .env
# environment:
# - DJANGO_SETTINGS_MODULE=app.settings.${MODE}
nginx:
image: nginx:1.19
volumes:
- ./nginx:/etc/nginx/conf.d
- static_content:/var/www/site
ports:
- 81:80
- 444:443
env_file:
- .env
depends_on:
- backend
volumes:
pg_data: {}
static_content: {}
default.conf
server {
listen 80 default_server;
server_name 183.22.332.12;
location /static/ {
root /var/www/site;
}
location /media/ {
root /var/www/site;
}
location / {
proxy_set_header Host $host;
proxy_pass http://backend:8010;
}
}
Если вы запускаете два виртуальных сервера с разными IP на одной машине, вы захотите указать IP-адрес в директиве listen:
server {
listen 192.168.1.1:80;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80;
server_name example.com www.example.com;
...
}
Подробнее о том, как nginx
обрабатывает запросы, можно узнать здесь: http://nginx.org/en/docs/http/request_processing.html
Если вы хотите запустить более одного сайта на сервере, вы можете
- используйте разные
ip
- используйте разные
port
- использовать разные
domain
- использовать другой путь и переписать его ...
Вы можете выбрать один из советов из верхнего списка.
В вашей конфигурации вы выбрали разные ip и один и тот же порт, но вы установили весь сайт по умолчанию и не слушаете разные ip
server{
listen ip:port;
}
Обычно IP просто опускается.
Или вы можете использовать один ip и разные порты.
server{
listen port1;
}
server{
listen port2;
}
Или вы можете использовать один ip и один порт, но разные домены.
server{
listen port;
server_name 1.a.com;
}
server{
listen port;
server_name 2.a.com;
}