Во-первых, не все переменные нужно указывать с помощью переменных окружения. Храните переменные, которые не отличаются для каждой системы, в отдельном файле yaml.
Если у вас есть только одна среда на сервер, вы можете указать переменные среды глобально в /etc/environment
. (Может отличаться в зависимости от вашего варианта Linux)
Лично я считаю, что использование DotEnv создает больше трудностей, чем решений, когда вы запускаете несколько сред на одном сервере. Указание переменных в глобальной конфигурации, например /etc/environment
, в этом случае не работает.
Задавать переменные окружения в nginx тоже не выход, так как, как вы упомянули, они не будут подхватываться cron, супервизором, консолью и т.д. Для меня это было причиной полного удаления DotEnv и работы с старый добрый parameters.yaml
файл снова. Ничто не помешает вам это сделать.
Другое решение, однако, состоит в том, чтобы продолжать использовать DotEnv в вашей среде разработки и включать отдельный parameters.yaml
в производство. Затем вы можете определить переменные среды следующим образом:
parameters:
env(APP_ENV): prod
env(APP_SECRET): 3d05afda019ed4e3faaf936e3ce393ba
...
Чтобы включить этот файл, поместите в файл services.yaml следующее:
imports:
- { resource: parameters.yaml, ignore_errors: true }
Таким образом, импорт будет проигнорирован, если файл parameters.yaml не существует. Другое решение — добавить строку в configureContainer()
в вашем классе ядра:
$loader->load($confDir.'/parameters'.self::CONFIG_EXTS, 'glob');
person
Xatoo
schedule
09.03.2018
export $$(grep -v '^#' .env | xargs)
перед выполнением консоли sf. - person Thomas Decaux   schedule 18.03.2018