Orbit

Установка переменных окружения для каждого окружения

Orbit lets you decide exactly which builds see which environment variables, so production credentials never end up in a publicly reachable branch preview. This guide covers how scope and precedence…

Зачем это важно

Предпросмотр ветки получает публичный URL. Любой человек со ссылкой может загрузить его. Если переменная имеет область видимости для каждого окружения, она будет внедрена в сборку этого предпросмотра, и при работе с ней он будет использовать ваши production учетные данные.

Именно поэтому эта страница существует. Все ниже следует одному правилу: production секреты должны быть в scope production и больше нигде.

Как работает определение области видимости

Каждая переменная имеет область видимости, которая определяет, когда она будет внедрена при сборке.

Область видимостиВнедряется в
Все окружения (на уровне проекта)Каждую сборку этого проекта, если вы не ограничиваете это
Переопределение конкретного окруженияТолько сборки этого одного окружения

Когда один и тот же ключ существует на обоих уровнях, более конкретный вариант побеждает. Переопределение на уровне окружения превосходит переменную на уровне проекта с тем же ключом. На странице Env vars это указано в подзаголовке раздела All environments: переменные на уровне проекта доступны в каждой сборке, а переопределения на уровне окружения имеют приоритет.

Переменные на уровне проекта также могут быть сужены без создания переопределения. Элемент управления Available in предлагает три типа окружения (production, staging, preview), и вы можете отменить выделение любого из них.

Добавление переменной с областью видимости

  1. Откройте ваш проект в Orbit и нажмите на вкладку Env vars.
  2. Прокрутите вниз к форме Add variable в нижней части.
  3. Заполните KEY и value.
  4. Используйте раскрывающееся меню Scope:
    • All environments (project-wide) внедряет ее в каждую сборку.
    • [Environment name] only ([type] override) ограничивает ее одним окружением.
  5. Если вы выбрали project-wide, используйте кнопки Available in для отмены выделения типов окружений, в которые эта переменная не должна попадать.
  6. Установите флажок Mark as secret для всего конфиденциального.
  7. Нажмите Add.

Перед фиксацией форма скажет вам, что она собирается сделать. Переопределение показывает уведомление о том, что оно будет применяться только к сборкам этого окружения и что переменные на уровне проекта по-прежнему действуют в других местах. Ограниченная переменная на уровне проекта показывает точно, в какие типы окружений она будет внедрена.

Добавление переменной только для production

Два эквивалентных способа:

  • В раскрывающемся меню Scope выберите ваше production окружение (оно имеет зеленый значок production), или
  • Сохраните область видимости как All environments и отмените выделение staging и preview в разделе Available in.

В любом случае переменная отсутствует при выполнении предпросмотра или staging сборки.

"Отсутствует" означает отсутствует, а не пусто. Код, который читает process.env.STRIPE_SECRET_KEY в сборке предпросмотра, получает undefined, и в зависимости от того, как он написан, это может вызвать ошибку во время сборки или, что еще хуже, молча выбрать неправильную ветку. Дайте предпросмотрам тестовое значение вместо отсутствия значения.

Безопасный паттерн

Паттерн, который чисто решает эту проблему для большинства проектов:

  1. Добавьте production учетные данные с областью видимости только production окружения.
  2. Добавьте переменную с тем же ключом, содержащую тестовое или sandbox значение, на уровне project-wide scope.

Production сборки получают значение в scope production, потому что более конкретная область видимости побеждает. Предпросмотры и staging получают тестовое значение. Ничего не остается неопределенным нигде, и production учетные данные никогда не попадают в предпросмотр.

Применяйте к:

  • Production URL баз данных
  • Секретные ключи поставщика платежей, используя тестовые ключи поставщика для предпросмотров
  • Ключи отправки электронной почты, чтобы предпросмотр не мог отправлять почту реальным клиентам
  • Токены администратора и секреты подписей
  • Все, что имеет стоимость за вызов

Наследование production переменных в staging

Если ваше staging окружение близко к production и вам нужно переопределить только несколько значений, вам не нужно дублировать все.

В Settings найдите Staging: environment variables и включите Inherit production env vars. Production переменные затем объединяются в staging сборки с более низким приоритетом, чем переопределения для staging, поэтому все, что вы явно установили на staging, по-прежнему побеждает.

Наследование копирует production значения в staging сборки, включая production учетные данные. Включайте это только если ваше staging окружение защищено. Staging поддерживает как пароль, так и IP allowlist в разделах Staging: access protection и Staging: IP allowlist в Settings. Включение наследования для незащищенного staging окружения воссоздает ровно ту же уязвимость, о которой говорится на этой странице.

Просмотр и редактирование существующих переменных

Вкладка Env vars группирует переменные на:

  • All environments в верхней части, содержащий переменные на уровне проекта
  • Сворачиваемый раздел для каждого окружения, содержащий переопределения этого окружения с количеством

Над ними находится поле поиска и фильтр Secrets only.

Значки рядом с каждым именем переменной показывают, какие типы окружений она охватывает. Переменная, показывающая production и preview, но не staging, будет отсутствовать в staging сборках, и эта строка значков - самый быстрый способ провести аудит длинного списка.

Нажмите на значок редактирования, чтобы изменить значение. Текущее значение переменной секрета не может быть раскрыто, только заменено.

Копирование и сравнение между окружениями

Copy variables between environments копирует целый набор из одной области видимости в другую. Выберите From и To, опционально установите флажок Overwrite variables that already exist in the target и нажмите Preview чтобы увидеть, сколько будет добавлено, обновлено и пропущено перед фиксацией.

Страница Env sync check сравнивает production и staging ключ за ключом и сообщает, что существует только в одном, что имеет разные значения и что совпадает. Это правильное первое место для "staging работает, а production нет" или наоборот.

Значения, отличающиеся между production и staging, являются нормальными и ожидаемыми для большинства секретов. Страница синхронизации это указывает. Что вы ищете, так это ключ, присутствующий в одном окружении и отсутствующий в другом.

Совместное использование переменных между проектами

Если несколько проектов нуждаются в одном и том же учетном данном, используйте env group вместо вставки его в каждый проект. Перейдите в Orbit, затем Env groups, создайте группу, добавьте переменные и свяжите проекты, которые их нуждаются.

Переменные группы внедряются во время сборки и находятся в конце порядка приоритета: переменные на уровне проекта и на уровне окружения имеют приоритет над переменными группы. Вы можете иметь до 20 групп на аккаунте.

Удаление группы удаляет эти переменные из будущих сборок каждого связанного проекта. Уже завершенные сборки не затрагиваются.

Массовый импорт

Кнопка Import .env открывает поле вставки. Вставьте файл .env, выберите область видимости, и Orbit сообщит, сколько переменных он найдет и сколько будет отмечено как секретное. Ключи, содержащие SECRET, TOKEN, KEY, PASSWORD и аналогичные термины, отмечаются автоматически. Существует опция Overwrite existing variables with the same key, отключенная по умолчанию.

Download .env создает шаблон с только названиями переменных, без значений, для совместного использования с товарищем по команде, который предоставит свои собственные значения.

Выберите область видимости в диалоговом окне импорта перед нажатием Import, а не после. Импорт всего production .env на уровне project-wide scope вталкивает каждый production учетные данные в ваши сборки предпросмотров в одно действие, и исправление - это удалить и заново добавить их, а не изменять настройку.

Проверка того, что на самом деле получила сборка

Страница деталей каждого развертывания содержит ключи переменных окружения, внедренные во время сборки, и их дифференцирует в сравнении с вашей текущей конфигурацией: добавлены, изменены, удалены, не изменены. Бирюзовые ключи пришли из переопределения для конкретного окружения, серые - с уровня проекта.

Значения никогда не хранятся и не отображаются. Наведение курсора на ключ дает отпечаток SHA-256, которого достаточно для подтверждения того, что два окружения содержат одно и то же значение, не раскрывая его.

Если конфигурация изменилась после того, как эта сборка была создана, на странице указано уведомление Environment variables updated since this deployment и напоминает, что изменение не вступит в силу до переразвертывания.

Изменения переменных никогда не применяются к развертыванию, которое уже находится в живом виде. Они внедряются при выполнении сборки. После изменения чего-либо, на что зависит ваше приложение, переразвертайте.

Связанные материалы

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel
Установка переменных окружения для каждого окружения