Настройка переменных окружения
Переменные окружения передают конфигурацию и учётные данные в сервис во время выполнения. На этой странице — значения на уровне сервиса, общие группы окружения, переменные платформы и поведение на этапе сборки.
Каждый сервис Muerte Cloud читает свою конфигурацию из переменных окружения — URL баз данных, ключи API, флаги фич, порты. Значения передаются как на этапе сборки, так и в рантайм-процесс, при этом чувствительные значения шифруются при хранении и никогда не выводятся в логи.
Добавление переменных окружения#
Откройте вкладку Environment сервиса и добавляйте записи по одной, либо вставьте файл .env, и Muerte Cloud разберёт его самостоятельно:
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.
Порядок разрешения
При запуске сервиса переменные разрешаются в следующем порядке — более поздние записи переопределяют более ранние:
- 1Предоставленные платформойВстроенные переменные, добавляемые Muerte Cloud (см. ниже).
- 2Связанные группы окруженияОбъединяются сверху вниз в порядке подключения к сервису.
- 3Переменные уровня сервисаЗначения, заданные на самом сервисе. Всегда имеют приоритет над группой.
Переменные платформы#
Muerte Cloud добавляет небольшой набор переменных только для чтения в каждый деплой. Вы можете ссылаться на них из приложения, но не можете их перезаписать.
| Field | Description |
|---|---|
| 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 рантайм#
Переменные окружения доступны на обоих этапах, но эти этапы выполняются в отдельных песочницах:
| Field | Description |
|---|---|
| Build | Контейнер сборки видит все переменные. Фреймворки вроде Next.js и Vite могут встраивать значения NEXT_PUBLIC_/VITE_ прямо в бандл. |
| Runtime | Инстанс во время выполнения видит те же значения плюс переменные платформы. Любое изменение после сборки требует нового деплоя, чтобы попасть в клиентский бандл. |
NEXT_PUBLIC_, VITE_ или похожим публичным маркером, попадает в JavaScript, отправляемый в браузеры. Никогда не кладите туда настоящие секреты — оставляйте серверные ключи без префикса, чтобы они оставались на инстансе.Чтение значений в коде#
Стандартные API языков работают без изменений:
const dbUrl = process.env.DATABASE_URL;
const port = Number(process.env.PORT ?? 8080);import os
db_url = os.environ["DATABASE_URL"]
port = int(os.getenv("PORT", "8080"))dbURL := os.Getenv("DATABASE_URL")
port := cmp.Or(os.Getenv("PORT"), "8080")