У нас есть веб-приложение на Ruby, которое можно развернуть с помощью установки Docker, среди прочего, чтобы иметь точно такую же среду Ruby от разработчиков до рабочего сервера.
Мы решили развернуть его на AWS через Elastic Beanstalk, чтобы воспользоваться преимуществами их конфигурации с автоматическим масштабированием и простотой развертывания. Beanstalk поддерживает развертывание контейнеров Docker.
Мы решили использовать Phusion Passenger, который требует, чтобы он работал на том же хосте, что и приложение Ruby (когда оно запускает), и веб-сервер (nginx или apache), тесно связанный с ним. Итак, в нашем Докере работает nginx + пассажир.
Если мы развернем его на Beanstalk, веб-сервер nginx будет установлен (Beanstalk) на Beanstalk EC2 в качестве простого прокси для порта Docker 80. (На самом деле это было своего рода сюрпризом, поскольку это не ясно из документации AWS.)
1) Разве это не бесполезные накладные расходы иметь этот прокси-сервер nginx на хосте EC2, просто прокси-порт 80 на порт 80? Если мы рассмотрим Elastic Load Balancer (ELB) впереди, он предоставляет 3 веб-сервера в каскаде для простого запроса.
2) Так оно и должно работать?
Одно из нежелательных неудобств заключается, например, в том, что изменение параметра в параметре nginx для увеличения максимального размера запроса или тайм-аута необходимо выполнять в обеих конфигурациях nginx (на хосте EC2 через .ebextensions и в Docker).
Да нет:
Если хотите, можете использовать Эластичная среда Beanstalk Ruby. Он удаляет дополнительный прокси-сервер Nginx, поскольку Phusion Passenger работает непосредственно на хосте экземпляра EC2. Но ваше приложение не докеризируется.
Я догадался, что ты используешь Пассажирский докер Phusion с Nginx + Ruby (верно?). Даже если вы создаете контейнер Docker, который запускает Phusion Passenger Standalone, на самом деле это сервер Nginx, модифицированный Phusion.