Как работать в symfony env в продакшне?

Собственно в симфони есть файл .env (как образец, под контролем версий) и всякие .env.local для конкретного окружения.

Но, как я понял, в продакшне он не должен быть задействован и переменные окружения должны прописываться в конфигах nginx или fpm. Однако переопределить конфигом nginx удалось только переменную APP_ENV, установив ее в значение "prod". Однако все мои кастомные переменные по прежнему читаются из файлов .env.

Что нужно сделать, чтобы эти переменные брались именно из настроек окружения, а не из файлов .env? Или оно так и должно быть и ничего выносить в конфиги nginx / fpm не нужно?
  • Вопрос задан
  • 2319 просмотров
Решения вопроса 1
glaphire
@glaphire
PHP developer
В самой документации написано, что нет преимущества проброса env через сервер по сравнению с .env файликом на проде

Most Symfony applications read their configuration from environment variables. While developing locally, you'll usually store these in .env and .env.local (for local overrides). On production, you have two options:

Create "real" environment variables. How you set environment variables, depends on your setup: they can be set at the command line, in your Nginx configuration, or via other methods provided by your hosting service.
Or, create a .env.local file just like your local development (see note below)
There is no significant advantage to either of the two options: use whatever is most natural in your hosting environment.

https://symfony.com/doc/current/deployment.html#b-...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Flying
Ответ на ваш вопрос есть в документации Symfony:

Начиная Symfony Flex 1.2 появилась команда composer dump-env prod которая создает обычный PHP файл из имеющихся у вас в .env файлах переменных, тем самым устраняя необходимость их разбора.

Сам загрузчик Symfony Framework поддерживает загрузку переменных окружения из этого PHP файла.
Ответ написан
Quber
@Quber
PHP Team lead
Подозреваю, что связано это с тем, что по-умолчанию php не видит системных переменных окружения. Необходимо изменить настройку в php.ini с
variables_order = "GPCS"
на
variables_order = "EGPCS"
Буква E как раз означает environments. После этого перезапустите php-fmp и php будет видеть переменные окружения. По-умолчанию, отдается приоритет переменной $_ENV, в которой хранятся переменные окружения. После включения настройки, переменные окружения будут у вас приоритетными.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы