ADR-006 Отказ от вшивания настроек в js-приложених¶
Date: 2024-11-30
Status¶
Предложен
Context¶
На данный момент во фронтовых (js) приложения применется практика вшивания конфигурации в код приложения в процесс билда.
Конфигурация хранится в .env.* файлах и автоматически подтягивается во время
сборки приложения утилитой vite.
Предлагается отказаться от вшивания настроек в код приложения и хранить настройки в отдельном месте.
Недостатки текущего решения:
- Нет возмоности однозначто идентифицировать версю собранного приложения на стенде (в частности на production), задеплоить ее повторно.
- Отсутствие собранного тегированого пакета которые проходит через процесс тестирования и выкатывается на боевые сервера. Даже если такой процесс запустить в приложении окажутся встроенные стендо-специфичные настройки (для .com свои, для .dev свои) и такой пакет не возможно использовать на других стендах. Фактически отсуствует разбивка на процесс сборки (build) и процесс раскатки.
- Для каждого стенда необоходимо заново собирать приложение с нужными настройками (хотябы чтобы заменить VITE_BACKEND_URL)
- Технически затруднена сборка приложения при раскатке инфраструктуры на нужную версию на нужном стенде.
- Отсутсвует возможность сменить настройки (например адрес блокчейн ноды) без пересборки и редеплоя приложения (например VITE_NODE_URL_ETH)
- Отсуствие централизованного управления конфигурацией пакетов на стенде. Другими словами чтобы заменить VITE_NODE_URL_ETH придетс сбегать во ВСЕ репозитории (надо еще их найти), там заменить VITE_NODE_URL_ETH в .env, заново передеплоить. Ожидаемый механизм: в репозитории инфраструктуры заменен адрес в VITE_NODE_URL_ETH, одной командой изменения раскатились на нужные стенды.
- Нарушение принципов https://12factor.net
Варианты решения:
- Указывать необходимые настройки в html/meta тегах (поддерживается vite)
- Указывать необходимые настройки в отдельном конфигурационном файле который лежит на стенде в нужном месте (место можно вшивать в процессе билда, так как оно не изменяется). Например VITE_CONFIG_URL=/config.js
- В момент билда вместо реальных значений вшивать заглушки и подменять их во время деплоя.
- ?
Decision¶
The change that we're proposing or have agreed to implement.
Consequences¶
What becomes easier or more difficult to do and any risks introduced by the change that will need to be mitigated.