Файлы с переменными окружения -- зло ли?
У меня есть твёрдое убеждение, что *.env - файлики — это не очень хорошо. Да, они имеют место быть, особенно на ранних этапах проекта. Но, в идеале, от них лучше избавиться. Особенно, когда мы начинаем внедрение CI/CD и т.п. Но я не могу это аргументировать.
Ответы (1 шт):
Автор решения: hedgehogues
→ Ссылка
Ответ на этот вопрос даётся на основании:
- 12-factor-methodology-config , а лучше прочитать целиком
- 12-factor-methodology-wiki
- habr (Конфигурация — это свойства среды выполнения). Это самая главная фраза для данного ответа. По тексту можно найти
Теперь к деталям:
- Коль скоро, конфигурация — это свойство среды (т.е. ОС), то именно из неё должны поступать переменные.
- Приложению должно быть индеферентно, кто и как подсовывает ему переменные. Т.е. фактически приложение ничего не знает о файликах с конфигурацими и не должно знать.
- В подходе с
.env-файлами, мы огребём на этапе сборки с тем, что нужно решать, что загружать: то ли конфиги, то ли переменные окружения. - Если у Вас есть vault и consul, то там переменные будут прокидываться именно как переменные окружения.
- В коде возникает загрузчик, который не получится протестировать нормально, так как он и не библиотека, а фуникця, у которой слишком ограниченный функционал. Что с ним делать не ясно. Это потенциальная уязвимость. Плюс дополнительный код. Плюс место для багов, которые сложно будет отловить.
- В целом, такой подход может быть. Но в том случае, если у нас будет отдельная библиотека, которая занимается загрузкой переменных, конфигов и всего остального. Да, в ней можно реализовать разные виды загрузок: из разных видов конфигов, из переменных и т.д. Т.е. эта библиотека может отвечать за несколько видов сред: файлы, конфиги, env-файлы, переменные окружения и т.п.
На заметку. Есть замечательный плагин для Goland. Плагин умеет загружать переменные окружения