Почему .env не должен загружаться в производство в Symfony4? - PullRequest
0 голосов
/ 07 июня 2018

Фронтальный контроллер 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 следует игнорировать в производственной среде?

1 Ответ

0 голосов
/ 07 июня 2018

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

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

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

В любом случае, если вы готовы рискнуть, предоставив свою конфигурацию на рабочей машине всем, кто имеет доступ к .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 deps в require разделваш composer.json:

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