Direnv
Узнайте, как автоматически загружать переменные окружения в вашей среде разработки.
direnv
— это инструмент, который автоматически загружает переменные окружения при переходе cd
в каталог и удаляет их при выходе из этого каталога. В этом руководстве показано, как использовать его вместе с Tuna.
Мы не рекомендуем загрузку всех секретов в окружение оболочки таким образом. Однако некоторым разработчикам может понадобиться такая функциональность. Это исключительно руководство по использован ию Tuna Secrets с direnv
и не является рекомендацией данного инструмента или рабочего процесса.
Требования
- Установите direnv
- Совместимая с
direnv
оболочка
Настройка проекта
Для этого сначала необходимо выполнить команду tuna secrets setup
в проекте. Убедитесь, что вы выполнили процесс настройки и связали каталог с проектом и конфигурацией.
Создание файла .envrc
В корне каталога проекта создайте файл .envrc
со следующим содержимым:
set -a
source <(tuna secrets download --no-file --format env)
set +a
Команда set -a
включает автоматический экспорт всех последующих присвоений переменных, а set +a
отключает эту функцию. После сохранения вы можете получить предупреждение от direnv
:
direnv: error /path/to/project/.envrc is blocked. Run `direnv allow` to approve its content
По умолчанию direnv
не будет загружать содержимое файла .envrc
, пока вы его не подтвердите. Поскольку вы только что создали его, разрешите выполнение командой:
direnv allow
После этого вы увидите сообщение о загрузке переменных окружения:
direnv: loading /path/to/project/.envrc
direnv: export +YOUR_VARIABLE
Когда вы покинете каталог, direnv
выгрузит переменные:
direnv: unloading
Приведенное решение не гарантирует корректную работу со всеми значениями секретов. В частности, могут возникать ошибки с многострочными секретами. Direnv также может некорректно обрабатывать секреты, содержащие символы
?
,*
и ```. Также возможны проблемы с другими символами (например,$
и#
).
Переопределение отдельных переменных
В некоторых случаях может потребоваться локальное переопределение, которое неудобно задавать через конфигурации. В этом случае вы можете изменить файл .envrc
, чтобы он искал другой файл и, если он существует, подключал его после загрузки секретов из Tuna. Назовем этот файл .env.local
, и ваш .envrc
будет выглядеть так:
set -a
source <(tuna secrets download --no-file --format env)
test -f .env.local && source .env.local
set +a
Он будет работать так же, как и прежде, но если файл .env.local
существует, переменные окружения, определенные в нём, будут иметь приоритет перед загруженными из Tuna.