Переменные и секреты
Lizard хранит конфигурацию как секреты. У них есть два уровня видимости — сервис (по умолчанию) и проект (--global) — и они объединяются в окружение приложения в строго заданном порядке приоритета. Глобального уровня рабочего пространства нет.
Установка переменных
lizard secrets set принимает переменное число аргументов — можно задать один или несколько секретов сразу. По умолчанию он пишет в привязанный сервис:
lizard secrets set DATABASE_URL=postgres://… LOG_LEVEL=info
lizard secrets set API_KEY=sk_live_… --service apiДобавьте --global, чтобы записать в область проекта (увидит каждый сервис в проекте):
lizard secrets set NODE_ENV=production --globalПросмотр, удаление, импорт
lizard secrets list # current scope
lizard secrets list --show # reveal values
lizard secrets delete OLD_KEY ANOTHER_KEY # variadic; add -y in scripts
cat .env | lizard secrets import # KEY=value lines from stdinsecrets import читает простые строки KEY=value и сохраняет кавычки как часть значения. secrets delete запрашивает подтверждение; передайте -y, если команда запускается вне терминала.
Все флаги описаны в справке по команде lizard secrets.
Область видимости
| Уровень | Команда | Хранится как | Видимость для |
|---|---|---|---|
| Сервис (по умолчанию) | lizard secrets set K=v --service <svc> | secrets.services[<svc>] | только этот сервис |
| Проект (глобальный) | lizard secrets set K=v --global | secrets.shared | все сервисы в проекте |
По умолчанию — уровень сервиса. Скомпрометированный сервис может прочитать своё окружение — более широкая область видимости означает больше учётных данных без нужды. Используйте --global только для несекретных, заведомо публичных значений вроде LOG_LEVEL, NODE_ENV, флагов функций или публичного URL фронтенда SENTRY_DSN. Если не уверены, является ли значение секретом — считайте его секретом и ограничьте сервисом.
Каждый сервис уже получает один DATABASE_URL и один REDIS_URL от аддонов Postgres и Redis проекта (запущенных или на паузе) с самым низким приоритетом. Если аддонов одного типа несколько, какой из них попадёт в сервис, не определено. Чтобы выбрать конкретный аддон или использовать его приватный URL, привяжите его к каждому потребителю через ссылку, а не через --global:
lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service api
lizard secrets set DATABASE_URL='${{postgres.DATABASE_PRIVATE_URL}}' --service workerЕсли значения аддона изменятся, каждый потребитель получит новое значение при следующем деплое или изменении переменных.
Приоритет
Когда один ключ задан в нескольких местах, побеждает последний записавший:
addon-issued env < project secrets < project env < app env < app secrets < platform varsПоэтому секреты приложения перекрывают секреты проекта, а платформенные переменные (PORT, LIZARD_SERVICE_NAME, LIZARD_PROJECT_ID, LIZARD_PUBLIC_DOMAIN, LIZARD_PRIVATE_DOMAIN) применяются в самом конце и их нельзя переопределить. PORT задаётся только тогда, когда у сервиса есть HTTP-порт. Переменная PORT, которую вы задали, меняет маршрутизацию только у сервиса, которому порт ни разу не задавали. Сервис, созданный через lizard up или получивший порт через --port, lizard port, containerPort или дашборд, сохраняет этот порт, и Lizard перезаписывает им ваш PORT. Чтобы сменить порт, выполните lizard port <n> и переразверните сервис. См. на какой порт Lizard направляет трафик.
Время сборки и время выполнения
Большинство изменений переменных вступают в силу без пересборки — сервис перезапускается и подхватывает их за несколько секунд. Исключения — значения времени сборки, зашиваемые в образ:
- Изменение значения
VITE_*илиNEXT_PUBLIC_*черезlizard secrets setили в настройках сервиса сразу запускает пересборку затронутых запущенных сервисов (для--global— всех запущенных сервисов). Правка на странице Secrets проекта в дашборде только перезапускает их; после неё выполнитеlizard redeploy. - Lizard зашивает эти значения в виде строк
ENVдля сервисов из GitHub (Dockerfile, который генерирует lizardpack, или Dockerfile в корне репозитория) и для Node-сервисов, собираемых черезbuildCommand/startCommand. Сервис с собственнымdockerfilePathили загруженный черезlizard upбез этих команд не получает переменные Lizard во время сборки; build args не получает ни один сервис, кромеCOMMIT_SHA. Для публичных значений в таких случаях закоммитьте их в.env.productionили впишите их строкамиENVв свой Dockerfile. Для Node-приложения, загруженного без своего Dockerfile, подойдёт и команда сборки.
См. Пайплайн сборки → триггеры пересборки.
Проверка
Доступ к сервисам по shell (lizard ssh) отключён, поэтому проверяйте значения другим способом:
lizard logs --build --service api # warns about every empty ${{…}} reference
lizard secrets list --service api --show # stored values
lizard secrets list --service api --ref # addon keys and each service's LIZARD_* / PORT keys--ref не показывает собственные переменные и секреты других сервисов. Ссылки на них работают; ключи проверьте командой lizard secrets list --service <target>.
Если ожидаемого значения нет, см. Устранение неполадок → секрет или ссылка не отображается.
Локальная разработка
Запустите команду локально с внедрёнными секретами проекта и сервиса:
lizard run --service api -- node scripts/seed.jsЗначения передаются как сохранены: ссылки ${{…}} остаются буквальным текстом, а платформенные переменные (PORT, LIZARD_*) не внедряются. Если скрипту нужна база данных, запустите его с реальными параметрами подключения аддона:
lizard run --service postgres -- node scripts/seed.jsСм. также
- Перекрёстные ссылки между сервисами — читайте значения одного сервиса из другого без копирования учётных данных.
lizard secrets— полная справка по командам.
Обновлено