Перейти к основному содержимому

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.