ПеременныеПеременные и секреты

Переменные и секреты

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 stdin

secrets import читает простые строки KEY=value и сохраняет кавычки как часть значения. secrets delete запрашивает подтверждение; передайте -y, если команда запускается вне терминала.

Все флаги описаны в справке по команде lizard secrets.

Область видимости

УровеньКомандаХранится какВидимость для
Сервис (по умолчанию)lizard secrets set K=v --service <svc>secrets.services[<svc>]только этот сервис
Проект (глобальный)lizard secrets set K=v --globalsecrets.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 run.

См. также

Обновлено