ДокументацияДеплоиПеременные окружения

Настройка переменных окружения

Переменные окружения передают конфигурацию и учётные данные в сервис во время выполнения. На этой странице — значения на уровне сервиса, общие группы окружения, переменные платформы и поведение на этапе сборки.

Каждый сервис Muerte Cloud читает свою конфигурацию из переменных окружения — URL баз данных, ключи API, флаги фич, порты. Значения передаются как на этапе сборки, так и в рантайм-процесс, при этом чувствительные значения шифруются при хранении и никогда не выводятся в логи.

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

Добавление переменных окружения#

Откройте вкладку Environment сервиса и добавляйте записи по одной, либо вставьте файл .env, и Muerte Cloud разберёт его самостоятельно:

bash
DATABASE_URL=postgres://user:pass@host:5432/app
REDIS_URL=redis://cache.internal:6379
STRIPE_SECRET_KEY=sk_live_...
LOG_LEVEL=info

Имена чувствительны к регистру и должны соответствовать [A-Z_][A-Z0-9_]*. Значения могут содержать любой UTF-8; оборачивайте их в кавычки, если они включают пробелы или спецсимволы оболочки.

Сгенерированные значения

Muerte Cloud может сгенерировать надёжное случайное значение для любой переменной — это удобно для секретов сессий, JWT-ключей и секретов подписи вебхуков. Значение создаётся один раз, хранится зашифрованным и больше не показывается после первого просмотра.

Группы окружения#

Группа окружения — это именованный набор переменных, который вы привязываете к одному или нескольким сервисам. Обновите группу один раз — и каждый связанный сервис передеплоится с новыми значениями, без копирования между staging и production.

Общие учётные данные
Храните URL БД, ключи сторонних API и секреты OAuth в одном месте. Привязывайте staging и production к разным группам.
Переопределения на уровне сервиса
Любая переменная, заданная напрямую на сервисе, имеет приоритет над тем же ключом из связанной группы.
Журнал изменений
Каждое изменение фиксирует, кто и что изменил и когда. Ротировали секрет — видно, какие сервисы его подхватили.
Ограниченный доступ
Роли в workspace определяют, кто может читать или редактировать группу. У участников без доступа значения скрыты.

Порядок разрешения

При запуске сервиса переменные разрешаются в следующем порядке — более поздние записи переопределяют более ранние:

  1. 1
    Предоставленные платформой
    Встроенные переменные, добавляемые Muerte Cloud (см. ниже).
  2. 2
    Связанные группы окружения
    Объединяются сверху вниз в порядке подключения к сервису.
  3. 3
    Переменные уровня сервиса
    Значения, заданные на самом сервисе. Всегда имеют приоритет над группой.

Переменные платформы#

Muerte Cloud добавляет небольшой набор переменных только для чтения в каждый деплой. Вы можете ссылаться на них из приложения, но не можете их перезаписать.

FieldDescription
PORTПорт, на который должен биндиться ваш web-сервис. По умолчанию 8080.
MUERTE_SERVICE_IDСтабильный идентификатор текущего сервиса, например srv-01H9….
MUERTE_SERVICE_NAMEПонятное человеку имя сервиса из панели.
MUERTE_SERVICE_TYPEОдно из: web, static, private, worker или cron.
MUERTE_INSTANCE_IDУникален для каждого запущенного инстанса. Меняется при каждом деплое и рестарте.
MUERTE_GIT_COMMITПолный SHA коммита, из которого собран этот релиз.
MUERTE_GIT_BRANCHОтслеживаемая ветка для этого сервиса.
MUERTE_EXTERNAL_URLПубличный https-URL сервиса, если есть.

Сборка vs рантайм#

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

FieldDescription
BuildКонтейнер сборки видит все переменные. Фреймворки вроде Next.js и Vite могут встраивать значения NEXT_PUBLIC_/VITE_ прямо в бандл.
RuntimeИнстанс во время выполнения видит те же значения плюс переменные платформы. Любое изменение после сборки требует нового деплоя, чтобы попасть в клиентский бандл.
Клиентские бандлы публичны
Всё, что помечено префиксом NEXT_PUBLIC_, VITE_ или похожим публичным маркером, попадает в JavaScript, отправляемый в браузеры. Никогда не кладите туда настоящие секреты — оставляйте серверные ключи без префикса, чтобы они оставались на инстансе.

Чтение значений в коде#

Стандартные API языков работают без изменений:

node.js
javascript
const dbUrl = process.env.DATABASE_URL;
const port = Number(process.env.PORT ?? 8080);
python
python
import os
db_url = os.environ["DATABASE_URL"]
port = int(os.getenv("PORT", "8080"))
go
go
dbURL := os.Getenv("DATABASE_URL")
port := cmp.Or(os.Getenv("PORT"), "8080")

Лучшие практики#

Одна группа на окружение
Держите production, staging и preview в отдельных группах. Это предотвращает утечку изменения для staging в prod.
Ротируйте по расписанию
Периодически перегенерируйте ключи подписи и токены сторонних сервисов. Деплои проходят без простоя, так что ротация обходится дёшево.
Никогда не коммитьте .env
Добавьте .env* в .gitignore. Источником истины является Muerte Cloud; коммиты утекают в форки и логи CI.
Предпочитайте ссылки дублированию
Привязывайте одну и ту же группу к нескольким сервисам вместо копирования значений. Одно изменение обновляет всех потребителей.