Файлы с переменными окружения -- зло ли?

У меня есть твёрдое убеждение, что *.env - файлики — это не очень хорошо. Да, они имеют место быть, особенно на ранних этапах проекта. Но, в идеале, от них лучше избавиться. Особенно, когда мы начинаем внедрение CI/CD и т.п. Но я не могу это аргументировать.


Ответы (1 шт):

Автор решения: hedgehogues

Ответ на этот вопрос даётся на основании:

  1. 12-factor-methodology-config , а лучше прочитать целиком
  2. 12-factor-methodology-wiki
  3. habr (Конфигурация — это свойства среды выполнения). Это самая главная фраза для данного ответа. По тексту можно найти

Теперь к деталям:

  1. Коль скоро, конфигурация — это свойство среды (т.е. ОС), то именно из неё должны поступать переменные.
  2. Приложению должно быть индеферентно, кто и как подсовывает ему переменные. Т.е. фактически приложение ничего не знает о файликах с конфигурацими и не должно знать.
  3. В подходе с .env-файлами, мы огребём на этапе сборки с тем, что нужно решать, что загружать: то ли конфиги, то ли переменные окружения.
  4. Если у Вас есть vault и consul, то там переменные будут прокидываться именно как переменные окружения.
  5. В коде возникает загрузчик, который не получится протестировать нормально, так как он и не библиотека, а фуникця, у которой слишком ограниченный функционал. Что с ним делать не ясно. Это потенциальная уязвимость. Плюс дополнительный код. Плюс место для багов, которые сложно будет отловить.
  6. В целом, такой подход может быть. Но в том случае, если у нас будет отдельная библиотека, которая занимается загрузкой переменных, конфигов и всего остального. Да, в ней можно реализовать разные виды загрузок: из разных видов конфигов, из переменных и т.д. Т.е. эта библиотека может отвечать за несколько видов сред: файлы, конфиги, env-файлы, переменные окружения и т.п.

На заметку. Есть замечательный плагин для Goland. Плагин умеет загружать переменные окружения

→ Ссылка