Я пытаюсь настроить секретный менеджер в Symfony 5. Я прошел этот Настройка управления секретами курс и Как сохранить секретную информацию в секрете документация.
Мое приложение теперь запускается:
Fatal Error: Maximum execution time of 30 seconds exceeded
Environment variable not found: "DATABASE_URL".
Как сказано в документации, я сбросил DATABASE_URL
со своего .env
и использовал php bin/console secrets:set DATABASE_URL
, который выдает:
[OK] Sodium keys have been generated at "config/secrets/dev/dev.*.public/private.php".
!
! [CAUTION] DO NOT COMMIT THE DECRYPTION KEY FOR THE PROD ENVIRONMENT⚠️
!
[OK] Secret "DATABASE_URL" encrypted in "config/secrets/dev/"; you can commit it.
Здесь результат php bin/console secrets:list
:
// Use "%env(<name>)%" to reference a secret in a config file.
------------------- -------- -------------
Secret Value Local Value
------------------- -------- -------------
DATABASE_URL ******
------------------- -------- -------------
Вот как я использую %env%
в config/packages/doctrine.yaml
:
doctrine:
dbal:
# ...
url: '%env(DATABASE_URL)%'
# ...
Я использую PHP 7.2.21 и следующие документация:
Системе Secrets требуется натриевое расширение PHP, которое входит в комплект PHP 7.2. Если вы используете более раннюю версию PHP, вы можете установить расширение libsodium PHP или использовать пакет paragonie /odium_compat .
Запрошенная консоль Symfony Мне все равно нужно установить paragonie/sodium_compat
polyfill, что я и сделал.
Мое приложение больше не работает. Чего мне не хватает?
Обновление # 1
Оказывается, проблема в пакете paragonie /odium_compat. Последнее отладочное сообщение перед Fatal Error: Maximum execution time of 30 seconds exceeded
:
timeParagonIE_Sodium_Core_Util::mul() vendor/paragonie/sodium_compat/src/Core/Curve25519.php:756
Так что Symfony не может получить переменную среды и вызвать ошибку.
Я пытался расшифровать секреты и сохраните их в .env.dev.local
, чтобы не расшифровывать их при каждом запросе с помощью этой команды:
php bin/console secrets:decrypt-to-local --force
Но Symfony продолжает его расшифровывать и не использует .env.dev.local
.