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

Сравнение переменных окружения

На staging всё работает, в production нет. Сравните env файлы.

Вставьте два env файла и, если есть, ваш .env.example. Env Diff сопоставит их ключ за ключом, скроет значения и покажет недостающие ключи, изменённые значения, тестовые ключи в production, секреты, открытые браузеру, и заглушки, которые никто не заменил.

Все проверки
- FEATURE_NEW_CHECKOUT=true
+ OPENAI_API_KEY=chan••••заглушка вместо значения
~ APP_URL=http••••••••адрес без https
~ NEXT_PUBLIC_STRIPE_KEY=pk_l••••••••
  STRIPE_SECRET_KEY=sk_t••••••••тестовый ключ или ключ песочницы
  JWT_SECRET=shar••••••••одинаковый секрет в обоих
Демо сравнение. Значения выдуманы и скрыты так же, как инструмент скрывает ваши.

Что это

Бесплатное и приватное сравнение переменных окружения. Понимает dotenv, строки с export, кавычки, многострочные значения, JSON и простой YAML.

Для кого

Для разработчиков, которые выпускают продукт в одиночку, ответственных за релизы, DevOps инженеров и всех, кто однажды потратил вечер на поиски одного недостающего ключа в production.

Какую проблему решает

Расхождение конфигураций. Код проходит ревью и тесты, а env файлы обычно нет, поэтому забытый ключ или тестовый ключ в production проскакивает незамеченным.

Сравните два окружения

Разбор и сравнение происходят в этой вкладке. Ничего не загружается, не записывается в логи и не сохраняется.

dotenv, JSON или строки KEY: value.
dotenv, JSON или строки KEY: value.
Необязательно. Ваш .env.example как список ключей, которые должны быть в каждом окружении.

Значения скрыты, пока вы сами их не откроете. В отчёте значений нет никогда.

$ env diff ▌

Пока ничего не сравнивали

Вставьте два env файла или загрузите демо файлы, чтобы увидеть все виды находок.

Значения не покидают страницу. В отчёте и CSV только ключи и находки.

Что означает каждая проверка

Находки в окружении B считаются находками в production. Секреты, открытые браузеру, учитываются с обеих сторон.

  • Секрет открыт браузеру

    Префиксы вроде NEXT_PUBLIC или VITE кладут значение прямо в JavaScript бандл. Прочитать его может любой.

  • Тестовый ключ или ключ песочницы

    Ключи вроде sk_test не принимают настоящие платежи и не отправляют настоящие письма. На staging это нормально, в production это тихий сбой.

  • Ведёт на localhost

    Адрес базы данных, кеша или API, который работает только на машине разработчика. В production он упадёт или попадёт не в тот сервис.

  • Заглушка вместо значения

    changeme, xxx, TODO или угловые скобки. Пример скопировали и так и не заполнили.

  • Одинаковый секрет в обоих

    Staging и production используют один секрет, поэтому утечка на staging открывает и production.

  • Адрес без https

    Публичный адрес без шифрования. Куки, токены и редиректы могут сломаться или утечь.

  • Включена отладка

    Флаги отладки показывают посетителям трассировки стека и внутренности системы и замедляют всё.

  • Слишком короткий секрет

    Секрет, токен или пароль короче 12 символов легко подобрать.

  • Ссылается на неизвестную переменную

    Значение ссылается на переменную, которой нет в этом же файле, и превращается в пустую строку.

  • Пусто

    Ключ есть, а значения нет. Многие библиотеки считают его заданным и потом ломаются странным образом.

Как пользоваться

  1. Вставьте окружение A

    Обычно это staging или локальный файл. Переименуйте метку под свою схему.

  2. Вставьте окружение B

    Обычно это production. Экспортируйте его с хостинга или скопируйте из хранилища секретов.

  3. Добавьте шаблон

    Необязательно. Вставьте .env.example, чтобы увидеть, каких обязательных ключей не хватает и какие ключи нигде не описаны.

  4. Изучите различия

    Сначала идут недостающие ключи, затем различающиеся значения, затем одинаковые. Рискованные значения отмечены в каждой строке.

  5. Исправьте и поделитесь

    Скачайте новый .env.example со всеми ключами и скопируйте отчёт в чеклист релиза.

Полезно знать

  • Проверки смотрят на имена и шаблоны значений. Они не знают, действителен ли ключ у провайдера.
  • Возможности оболочки вроде подстановки команд не выполняются, проверяются только простые ссылки на переменные.
  • Поддержка YAML охватывает плоские строки KEY: value, вложенные структуры не поддерживаются.
  • Показ значений меняет только то, что видно на экране. Закройте вкладку, чтобы всё стереть.

Вопросы

Безопасно ли вставлять сюда настоящие секреты?

Страница никуда не отправляет вставленное, а в отчёте нет значений. И всё же самая надёжная привычка: менять любой секрет, который хоть раз показывали на общем экране.

Почему B считается production?

Чаще всего сравнивают staging с production. Поместите в B окружение, которое собираетесь выпускать, и проверки рисков применятся к нему.

Что такое отпечаток?

Короткий SHA 256 каждого значения. Он показывает, что два значения различаются, не раскрывая ни одного из них.

Можно ли сравнить больше двух файлов?

Сравнивайте их попарно с одним и тем же шаблоном. Шаблон привязывает каждое сравнение к единому списку ключей.

Связаться с автором

Есть вопрос, идея или предложение о работе? Напишите в X или Telegram.

Поддержать автора

Если инструмент сэкономил вам время, можно отправить чаевые на этот EVM адрес из своего кошелька.

0xd28Fd90eD69092bd01598f237aad33a0cc9c3EeA