Секрет или ссылка не отображается в моем сервисе
Вы задали секрет или ${{name.KEY}} ссылку, переразвернули сервис, но работающий сервис всё равно не видит ожидаемое значение.
Что это значит
Заданное значение никогда не попало в объединённое окружение сервиса — или что-то другое при слиянии перезаписало его до запуска приложения.
Почему это может происходить
- Цель ссылки или ключ не существует. Ссылка на несуществующее имя сервиса/аддона или на ключ, который аддон не предоставляет, преобразуется в пустую строку вместо ошибки развёртывания. В логе сборки для каждой пустой ссылки выводится предупреждение с указанием причины; если изменение переменной применено перезапуском, без сборки, предупреждения не будет. Переименованная цель считается отсутствующей для ссылок, заданных через
lizard secrets setили дашборд: они сопоставляются с текущим именем. Цель-сервис не предоставляетDATABASE_URLилиREDIS_URL, которые Lizard подставляет в него; вместо этого ссылайтесь на аддон. - Что-то с более высоким приоритетом перекрыло его. Значения объединяются в фиксированном порядке —
addon-issued env < project secrets < project env < app env < app secrets < platform vars— поэтому секрет уровня проекта (--global) может быть неявно перекрыт секретом уровня сервиса с тем же ключом, а платформенные переменные (PORT,LIZARD_SERVICE_NAME,LIZARD_PROJECT_ID,LIZARD_PUBLIC_DOMAIN,LIZARD_PRIVATE_DOMAIN) всегда побеждают.PORT, который вы задали, меняет маршрутизацию только у сервиса, которому порт ни разу не задавали. У сервиса, созданного черезlizard upили получившего порт через--port,lizard portили дашборд, Lizard перезаписывает его; меняйте порт командойlizard port <n>. - Значение времени сборки не попало в сборку. Большинство изменений переменных применяются без пересборки — сервис перезапускается, чтобы их подхватить.
VITE_*иNEXT_PUBLIC_*запекаются в собранные артефакты, и их изменение черезlizard secrets setили в настройках сервиса сразу запускает пересборку работающих сервисов. Правка на странице Secrets проекта в дашборде пересборку не запускает. Сервис, который в этот момент упал или был остановлен, пропускается, а сервис с собственнымdockerfilePathили загруженный черезlizard upбез команд сборки/запуска никогда не получает эти значения во время сборки.
Возможные решения
Проверьте лог сборки на пустые ссылки
Доступ к оболочке сервисов (lizard ssh) отключён. Смотреть нужно в лог сборки: для каждой пустой ссылки там есть строка вида ==> Warning: ... is empty с указанием причины.
lizard logs --build --service apiЗатем выведите ключи аддонов и ключи LIZARD_* и PORT каждого сервиса и сравните имя и ключ со своими. Ссылки на собственные переменные и секреты другого сервиса работают, но в этом списке их нет; проверьте их командой lizard secrets list --service <target>. Ключи проверяйте по документированным переменным аддона:
lizard secrets list --service api --refПроверьте на предмет коллизии областей
Выведите секреты в обеих областях и сравните:
lizard secrets list --service api --show
lizard secrets list --global --showПомните: секреты приложения перекрывают секреты проекта — если существует значение уровня сервиса для того же ключа, оно побеждает всё, что задано через --global.
Пересоберите после изменения на этапе сборки
Если изменённый ключ — VITE_* или NEXT_PUBLIC_*, а сервис в момент изменения был упавшим или остановленным либо вы изменили ключ на странице Secrets проекта в дашборде, запустите пересборку:
lizard redeploy --service apiСм. Время сборки vs. время выполнения и Сборка Pipeline → что запускает пересборку.
См. также
- Переменные и секреты — области действия и приоритет.
- Межсервисные ссылки — синтаксис ссылок и их разрешение.
Обновлено