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

Система окружения

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

Система окружения разделяет хранение и доступ:

  • Хранилища — где хранятся значения (ОС, файлы, память)
  • Переменные — именованные ссылки на значения в хранилищах

На переменные можно ссылаться по:

  • Публичному имени — значение поля variable (должно быть уникальным в системе)
  • ID записи — полная ссылка namespace:name

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

ТипОписание
env.storage.memoryХранилище в памяти
env.storage.fileФайловое хранилище (формат .env)
env.storage.osДоступ к переменным ОС (только чтение)
env.storage.staticСтатическое хранилище (только чтение)
env.storage.routerОбъединение нескольких хранилищ
env.variableИменованная переменная со ссылкой на хранилище

Волатильное хранилище в памяти:

- name: runtime_env
kind: env.storage.memory

Персистентное хранилище в формате .env (KEY=VALUE с комментариями #):

- name: app_config
kind: env.storage.file
file_path: /etc/app/config.env
auto_create: true
file_mode: 0600
dir_mode: 0700
ПолеТипПо умолчаниюОписание
file_pathstringобязательноПуть к .env файлу
auto_createbooleanfalseСоздать файл, если не существует
file_modeinteger0644Права на файл
dir_modeinteger0755Права на директорию

Доступ к переменным окружения операционной системы (только чтение):

- name: os_env
kind: env.storage.os

Всегда только для чтения. Операции записи возвращают PERMISSION_DENIED.

Хранилище только для чтения со значениями, определёнными непосредственно в конфигурации. Значения встраиваются в запись и не могут быть изменены во время выполнения. Полезно для публичных конфигурационных констант, поставляемых с модулем или пакетом.

- name: defaults
kind: env.storage.static
values:
PUBLIC_API_HOST: "https://api.example.com"
PUBLIC_WS_HOST: "wss://api.example.com/ws"
APP_ENV: "production"
ПолеТипОписание
valuesmapПары ключ-значение (строка в строку)

Всегда только для чтения. Операции записи возвращают PERMISSION_DENIED.

Объединяет несколько хранилищ. Чтение ищет по порядку до первого найденного. Запись идёт только в первое хранилище.

- name: config
kind: env.storage.router
storages:
- app.config:memory # Основное (запись сюда)
- app.config:file # Резервное
- app.config:os # Резервное
ПолеТипОписание
storagesarrayУпорядоченный список ссылок на хранилища

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

- name: DATABASE_URL
kind: env.variable
variable: DATABASE_URL
storage: app.config:file
default: postgres://localhost/app
read_only: false
ПолеТипОписание
variablestringПубличное имя переменной (необязательно, должно быть уникальным)
storagestringСсылка на хранилище (namespace:name)
defaultstringЗначение по умолчанию, если не найдено
read_onlybooleanЗапретить изменения

Имена переменных могут содержать только: a-z, A-Z, 0-9, _

# Публичная переменная — доступна по имени "PORT"
- name: port_var
kind: env.variable
variable: PORT
storage: app.config:os
default: "8080"
# Приватная переменная — доступна только по ID "app.config:internal_key"
- name: internal_key
kind: env.variable
storage: app.config:secrets
СитуацияТипПовтор
Переменная не найденаerrors.NOT_FOUNDнет
Хранилище не найденоerrors.NOT_FOUNDнет
Переменная только для чтенияerrors.PERMISSION_DENIEDнет
Хранилище только для чтенияerrors.PERMISSION_DENIEDнет
Неверное имя переменнойerrors.INVALIDнет