Я использую React для создания cl3rk.io. SPA нуждается в некоторых настройках, таких как OAuth ID клиента, Auth0 Domain и URL бэкенда. Я стараюсь не фиксировать конфигурацию в git-репо, поэтому у меня есть два варианта:
- создать .env файл на каждой машине, на которой я работаю
- передать конфигурацию поставщику конфигурации
Существует множество поставщиков конфигурации, например Azure App Configuration. Несколько месяцев назад я обнаружил Doppler, который по определению не является менеджером конфигурации, но является хранилищем секретов с некоторыми изящными функциями. В этом посте я покажу вам, как я использую doppler с direnv.
Требования:
- Это будет работать только на Linux/Mac OS
- Оболочка Doppler
- direnv
Doppler
Doppler имеет щедрое бесплатное предложение (5 пользователей бесплатно!🎉) — это очень важно для меня, так как я использую doppler для cl3rk, который пока не приносит денег, а также для личных проектов.
В левом верхнем углу видно, что я нахожусь в рабочем пространстве cl3rk. У каждого пользователя может быть несколько рабочих пространств. У меня есть рабочее пространство для каждого продукта или прототипа, над которым я работаю.
В каждом рабочем пространстве есть несколько проектов. Я использую проекты двумя способами:
- Сделать конфигурацию доступной для других проектов с помощью секретных ссылок. На скриншоте проект
azure
является примером этого. В нем хранятся учетные данные для общения с azure. - На логическую единицу проекта: фронтенд и потенциально бэкенд / API
В каждом проекте есть этапы, представляющие различные экземпляры конфигурации для различных развертываний.
Каждый из этапов содержит свой собственный набор секретов и конфигураций.
Есть еще много интересного, так что заходите на Doppler и пробуйте.
direnv
Связь между конфигурацией Doppler и React все еще отсутствует, и для этого я использую direnv.
С помощью direnv вы можете поместить файл инструкций (.envrc
) в каждую папку, и как только терминал входит в папку, выполняется .envrc
. Это полезно для установки дополнительных переменных env или для добавления исполняемых файлов в путь.
пример .envrc
для чтения файла .env и добавления его содержимого в переменные окружения:
dotenv
export Hi="dev.to"
Вывод оболочки при входе в каталог / с применением direnv allow .
:
direnv: loading ~/projects/cl3rk/.envrc
direnv: export +DOPPLER_TOKEN +Hi
~/projects/cl3rk main* ❯
Два переменных устанавливаются DOPPLER_TOKEN
из файла .env и Hi
из .envrc.
При выходе из папки все добавленные переменные снова удаляются:
direnv: unloading
Вот пример из реальной жизни:
.
│ .envrc
│ .env # contains the doppler access token
│ ...
└───IaC # contains all code for Infrastructure as Code
│ │ .envrc # updated .envrc file to point to the correct Doppler project (infrastructure) and stage (dev by default)
│ │ main.tf
└───Web_Frontend
│ .envrc # updated .envrc file to point to the correct Doppler project (backend) and stage (dev by default
│ package.js
./.envrc
:
dotenv # only read the .env file
./.env
:
DOPPLER_TOKEN="dp.pt.***"
IaC/.envrc
:
source_up # also scan top-level folders for .envrc files and run them as well
export DOPPLER_PROJECT=infrastructure # use the infrastructure project
export DOPPLER_CONFIG=dev # and the dev stage
# download all the secrets to your shell and remove them
export $(doppler secrets download --no-file --format env-no-quotes)
Если вы потеряете ноутбук, просто восстановите токен Доплера, и на вашем компьютере не останется никаких секретов. Кроме того, вы можете легко поделиться конфигурацией с коллегами, не копируя файл .env. Как только вы входите в одну из директорий, выполняется код .envrc, и Doppler вводит секреты в качестве переменных окружения, которые вы можете использовать в своих проектах. Довольно аккуратно. Что вы думаете?