BorisovAI
Все публикации
Исправлениеborisovai-adminGit коммит

Когда конфиги падают: война Traefik с несуществующим middleware

Когда конфиги падают: война Traefik с несуществующим middleware

Когда конфиги кусаются: история про зависимые middleware в Traefik

Проект borisovai-admin — это не просто админ-панель, это целая инфраструктурная система с аутентификацией через Authelia, обратным прокси на Traefik и кучей moving parts, которые должны работать в идеальной гармонии. И вот в один прекрасный день выясняется: когда ты разворачиваешь систему без Authelia, всё падает с ошибкой 502, потому что Traefik мечтательно ищет middleware authelia@file, которого просто нет в конфиге.

Завязка проблемы была в статических конфигах. Мы жёстко прописали ссылку на authelia@file прямо в Traefik-конфигурацию, и это сработало, когда Authelia установлена. Но стоило её отключить или просто не устанавливать — бум, 502 ошибка. Получается, конфиги были сильно связаны с опциональным компонентом. Это классический случай, когда инфраструктурный код требует гибкости.

Решение разбилось на несколько фронтов. Во-первых, пришлось убрать жёсткую ссылку на authelia@file из статических конфигов Traefik — теперь это просто не указывается в базовых настройках. Во-вторых, создали правильную цепочку инициализации:

  • install-authelia.sh теперь сам добавляет authelia@file в config.json и настраивает OIDC при установке Authelia;
  • configure-traefik.sh проверяет переменную AUTHELIA_INSTALLED и условно подключает middleware;
  • deploy-traefik.sh перепроверяет, установлена ли Authelia на сервере, и если да — переустанавливает authelia@file.

Неожиданный бонус обнаружился в install-management-ui.sh — там был неправильный путь к mgmt_client_secret. Исправили по ходу. А authelia.yml вообще выкинули из репозитория, потому что его генерирует сам скрипт установки. Зачем держать в git то, что всегда одинаково генерируется?

Интересный момент про middleware в Docker-сообществе: люди часто забывают, что middleware — это не просто функция, это объект конфигурации, который должен быть определён до использования. Traefik здесь строг: ты не можешь ссылаться на middleware, которого не существует. Это похоже на попытку вызвать функцию, которая не импортирована в Python. Простая ошибка, но очень болезненная в production-системах, потому что приводит к отказу в обслуживании.

Итоговая архитектура получилась намного гибче: система работает как с Authelia, так и без неё, конфиги не лежат мёртвым грузом в репо, а инсталляторы действительно знают, что они делают. Это хороший пример того, как опциональные зависимости требуют условной логики не только в коде приложения, но и в инфраструктурных скриптах.

Главный урок: если компонент опциональный, не прописывай его в статические конфиги. Пусть они туда добавляются динамически при необходимости.

😄 Что будет, если Fedora обретёт сознание? Первым делом она удалит свою документацию.

Метаданные

Branch:
main
Dev Joke
Что будет, если Fedora обретёт сознание? Первым делом он удалит свою документацию

Оцените материал

0/1000