У меня мало микросервисов, назовем их food-ms
, receipt-ms
, ingredients-ms
и frontend
, поскольку приложение React использует эти микросервисы. Каждый из них предоставляет API по адресу /api/[methods]
.
Я хотел бы создать среду для производства и разработки с использованием Docker и docker-compose со следующими свойствами:
Приложение должно быть доступно на одном хосте. В производственном хосте должен быть, например,
http://food-app.test
, для разработки он должен быть (в идеале) localhostКаждый микросервис и интерфейс должны находиться на одном хосте, но на разных путях. Например,
food-ms
API должен быть вlocalhost/food/api
,receipt-ms
API должен быть вlocalhost/receipt/api
и т. Д. Frontend должен находиться вlocalhost
корневом/
пути.В идеале я хотел бы иметь возможность запускать некоторые службы вне контейнера для упрощения отладки, но при этом они будут иметь обратный прокси-сервер и доступны
localhost/{service}/api
.
Я нашел обратный прокси traefik и немного поэкспериментировал с ним, но застрял в проблемах:
- Как сделать приложение доступным в каком-то предсказуемом домене, например
localhost
. В настоящее время я могу отправлять запросы к конкретному серверу, указав странный хост в заголовкеHost
, например<container-name>.<network-name>.docker.localhost
. Кажется, что интерфейсы, описанные вtraefik.toml
, не действуют. - Как направлять запросы из одного интерфейса в разные серверы в зависимости от пути?
- Как направить запрос на внешний IP-адрес и порт (я хотел бы использовать это для запуска служб вне контейнера для отладки)? Должен ли я использовать для этого
host
сеть в докере?
Заранее спасибо.
Вот мой traefik.toml
defaultEntryPoints = ["http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[file]
[frontends]
[frontends.food]
entrypoints = ["http"]
backend="food"
[frontends.receipts]
entrypoints = ["http"]
backend="receipts"
Кажется, что эти интерфейсы не применяются, потому что информационные панели не меняются, если я их рекомендую.