Задать вопрос
Lexxtor
@Lexxtor
PHP, Yii2, Android

Как запустить несколько сайтов на одном хосте, так чтоб у каждого был свой набор Docker контейнеров и чтоб они были доступны по одному 80 порту?

Есть несколько сайтов, каждый работает в стеке Nginx+PHP+MySql/Postgre, который запускается в контейнерах, через `docker-compose`.То есть у каждого свой набор контейнеров и все они запускаются на одном сервере. Nginx у каждого свой и слушают они разные порты: от 81 до 90.
У большинства есть свой домен. Все домены указывают на один IP этого сервера.

В отдельном контейнере запускается еще 1 Nginx который в зависимости от домена в запросе передаёт запрос остальным Nginx:
server {
    server_name etova.ru;
    location / {
        proxy_pass http://localhost:81/;
    }
}

server {
    server_name site.ru;
    location / {
        proxy_pass http://localhost:82/;
    }
}


Насколько это нормально?
Правильнее ли сделать 1 Nginx для всех, но чтоб у каждого остался свой php-fpm?
Это ведь можно сделать, если в каждом docker-compose.uml написать одинаковое название для network ?
  • Вопрос задан
  • 4337 просмотров
Подписаться 13 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
Есть готовое решение: nginx-proxy/nginx-proxy
Автоматом перезапускается и генерит конфиг под работающие контейнеры.
Проекты должны торчать портами в одну общую сеть. Можно в несколько: сеть проекта + сеть для портов наружу.
Ответ написан
Комментировать
Используй traefik в качестве балансировщика. Nginx каждого приложения светить наружу не надо. На руду смотрит только traefik. Что и куда проксировать описывается в labels сервиса в docker-compose
Ответ написан
Комментировать
asadganiev
@asadganiev
На мой взгляд правильнее будет запустить один nginx на все сайты. Иначе если их будет несколько, то они могут конфликтовать. Я у себя так реализовал, то есть у каждого сайта свой конфиг файл в /etc/nginx/sites-enabled.
и все они слушает порт 80.

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

	server_name     etova.ru;
	
	location / {
		proxy_pass http://localhost:8080;
	}
}


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

	server_name     site.ru;
	
	location / {
		proxy_pass http://localhost:8081;
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы