Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!27.04.2023
Зручна маршрутизація для Docker Compose
В продовження вчорашньої теми про створення повноцінного тестового середовища - стала задача відтворити маршрутизацію, яку в продакшні робить AWS Load Balancer. В залежності від шляху в URL він направляє запити на один сервіс, або на інший. Оскільки AWS ALB ми, звісно, локально не запустимо, то поки що цей фрагмент інфраструктури не відповідав продакшну, та тести його обминали.
Що робити? Вірний вибір, безумовно, nginx. Якби не можливості ALB, то він би в нас і в продакшні маршрутизував та балансував. Ось тільки налаштовувати nginx - окрема праця, як зараз, так і потім в підтримці. Тому пошукав готові рішення вищого рівня. Знайшов nginx-proxy. Це як раз маршрутизатор для середовища Docker, який конфігурується напівавтоматично на основі змінних оточення, назначених контейнерах. Вміє він й назначати віртуальні хости, й робити TLS шифрування (разом, наприклад, з mkcert).
Проте все, що було потрібно мені — це зібрати два сервіси під єдиною адресою, та до того ж на localhost за визначеним портом. Для цього корисні дві опції nginx-proxy:
-
DEFAULT_HOST
назначає той хост, який буде використовуватись, коли ніякий не підійшов; на локалхості це саме те, що треба. Сюди пишу аби що. Але головне, що він має збігатись з налаштуваннямVIRTUAL_HOST
на моїх сервісах. -
VIRTUAL_PATH
дозволяє як раз маршрутизувати за шляхом; причому, по-перше, шлях використовується як префікс, а по-друге, один з сервісів може бути за замовчуванням з порожнім шляхом.
Далі, nginx-proxy встановлюється на потрібний порт, сервіси отримують налаштування VIRTUAL_HOST
, VIRTUAL_PATH
та можливо VIRTUAL_PORT
, запускається docker-compose, і все працює само по собі! Дуже зручне рішення, краще й уявити не міг.