Почему .env не следует загружать в производство в Symfony4?

Фронтальный контроллер index.phpпо умолчанию:

// The check is to ensure we don't use .env in production
if (!isset($_SERVER['APP_ENV'])) {
    (new Dotenv())->load(__DIR__.'/../.env');
}

В чем причина этого? Почему файл .env следует игнорировать в производственной среде?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 096
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Идея .env заключается в том, что он должен в первую очередь использоваться в среды разработки и тестирования, потому что в других средах, таких как производственный или промежуточный веб-сервер, вы должны иметь возможность настраивать эти переменные извне. Например, Nginx позволяет вам использует директиву env в ваших файлах конфигурации для настройки переменных, которые приложение сможет использовать.

Я думаю, что причина, по которой Symfony выбрала такой подход к .env, заключается в том, что он позволяет унифицировать способ переменных для любой среды выполнения, которую может иметь разработчик. А также помните, что при производственном развертывании переменные среды являются первоклассными, довольно распространенными и не меняются довольно часто.

Другая вещь здесь - безопасность: конфигурации сервера должны быть более безопасными, чем исходный код вашего приложения Symfony. Например. как человек, у которого есть доступ к файловой системе к корню приложения на вашем prod-сервере, вы можете украсть учетные данные базы данных, если они просто хранятся в .env, но вы не сможете получить к ним доступ, если они хранятся где-то в безопасном месте в конфигурации сервера, вне корня приложения.

В любом случае, если вы готовы рискнуть и раскрыть свою конфигурацию на производственной машине всем, у кого есть доступ к .env, вы все равно можете включить .env в своей промежуточной или производственной среде. Для этого вы должны удалить или закомментировать эти строки в index.php:

// Comment out the if statement so the code gets run every time:
// if (!isset($_SERVER['APP_ENV'])) {
    (new Dotenv())->load(__DIR__.'/../.env');
// }

Кроме того, вам придется переместить зависимость DotEnv из зависимостей require-dev в раздел require в вашем composer.json:

{
    "type": "project",
    "license": "proprietary",
    "require": {
        ...
        "symfony/dotenv": "^4.0",
    ...
}

Похоже, они намеренно сделали компонент DotEnv для разработки только в require-dev в файле composer.json.

emix 07.06.2018 10:06

Ага. Если вы хотите использовать .env, вам нужно будет настроить composer.json, чтобы использовать его. Также будет небольшое снижение производительности, поскольку файл .env придется анализировать при каждом запросе. Но это сработает.

Cerad 07.06.2018 13:39

Спасибо за обновления; deps композитора не проверял, дополню ответ с учетом этих фактов

kix 07.06.2018 14:26

Другие вопросы по теме