У меня проблема с тем, чтобы локальная среда разработки работала так, как я хочу. Мы используем микросервисную архитектуру и используем, например, keycloak в качестве нашей системы управления идентификацией. Мы используем docker изображений, которые мы либо используем готовые из docker хаба, либо создаем свои собственные.
Я хочу как можно точнее воспроизвести производственную среду в нашей среде разработки. Для нашего интерфейса мы используем angular, который в производстве представляет собой пользовательское изображение docker, которое является не чем иным, как стандартным nginx изображением, с выходными файлами stati c из нашей angular build (ng build --prod
) скопировал в него. У нас также есть еще один контейнер nginx, который содержит только proxy_pass
местоположений, которые затем отправляют запрос на основе URL-адреса в соответствующий контейнер (например, https://www.example.com/auth
будет проксироваться в контейнер Keycloak).
Когда разработчик работает над внешним интерфейсом на своем ноутбуке, наиболее простым решением, очевидно, является использование ng serve
, однако при выполнении только этого внешнего интерфейса придется использовать разные адреса конечных точек для доступа к другим службам, работающим в своих соответствующих контейнерах . Возвращаясь к примеру с клавиатурой, вместо того, чтобы просто вызывать /auth/whatever
конечную точку из angular, URL-адрес должен быть https://localhost:8080/auth/whatever
, чтобы работать локально.
Итак, у меня возникла идея раскрутить весь стек на машине разработчика, за исключением контейнера nginx, в котором размещен наш интерфейс, вместо этого я бы перенастроил обратный прокси nginx на запросы прокси для интерфейса на http://172.17.0.1:4200
(заменив 172.17.0.1 независимо от IP-адреса хост-машины), где NodeJS будет размещать среду разработки angular.
К сожалению, я не могу заставить это работать ... Конечно, я бегу ng serve --host 0.0.0.0
, так что NodeJs будет отображаться на любом интерфейсе, я подтвердил, что это работает правильно, поскольку я могу перейти в свою среду angular dev с другого компьютера в сети. Проблема заключается в том, что мой прокси-контейнер nginx не может получить доступ к порту 4200 моего хоста. Я пробовал следующие шаги внутри контейнера nginx прокси docker: * ping 172.17.0.1: работает нормально * nmap -sT 172.17.0.1: показывает открытые порты другими контейнерами docker, но не 4200 * nmap -sT 172.17.0.1 -p 4200: Показывает, что порт 4200 закрыт
Есть идеи, как я могу заставить это работать?