Окружения, preview и production
Главная идея
У проекта один стабильный production-адрес — apex <org>-<project>.layero.ru. Любые ветки и CLI-загрузки получают временные preview-ссылки на 24 часа. Что именно отдаёт apex — указывает явный production-pointer, который двигается либо автоматически (push в default-ветку), либо вручную (промоут из UI/CLI).
Это Vercel-style: «один production, много preview». Каждая ветка — это полноценное окружение со своей историей деплоев, своим preview-URL и своими настройками, но только один из них одновременно работает по apex'у.
Окружение = ветка
Push в любую ветку создаёт окружение с собственной историей сборок. У окружения есть:
branch_name— имя git-ветки (илиcliдля архивных загрузок)- свой preview-URL
<org>-<project>-<branch>.preview.layero.ru(24 ч TTL) active_deploy_id— последний успешный билд этой ветки
CLI-деплои без --branch приземляются в псевдо-ветку cli.
Адреса
Layero выдаёт три типа URL — для разных нужд:
| URL | Когда работает | Срок жизни | Зачем |
|---|---|---|---|
<org>-<project>.layero.ru | через 5–15 мин после первого деплоя | пока живёт проект | Production apex — то, что показываете пользователям |
<org>-<project>-<branch>.preview.layero.ru | сразу после успешного билда ветки | 24 часа после прогрева | Preview ветки — для проверки и шеринга |
<org>-<project>-<branch>-<sha7>.preview.layero.ru | сразу после ready | 24 часа | Per-deploy URL — конкретный коммит зафиксирован |
<sha7> — первые 7 hex-символов commit SHA.
Production apex
Канонический адрес проекта. Один на проект. Покрыт per-host LE-сертификатом от YC CDN, прогревается 5–15 минут при первом создании. Дальше живёт без перерывов — переключение между деплоями идёт через указатель production_deploy_id, без перерегистрации hostname'а.
Apex отдаёт тот деплой, на который указывает production_deploy_id. Этот указатель двигают:
- Auto-promote: успешный push в default-ветку → apex автоматически переключается на новый билд (включено по умолчанию, выключается на странице Settings проекта).
- Manual promote: кнопка «Promote» в UI или
layero promoteиз CLI — на любой ready-деплой любой ветки. - Rollback: одна кнопка «Откатить» возвращает apex на предыдущий production-деплой (атомарный swap pointer'а, см. ниже).
Preview-URL веток
Для каждой ветки (и для CLI-загрузок) выдаётся стабильный URL вида <org>-<project>-<branch>.preview.layero.ru. Покрыт нашим wildcard-сертификатом *.preview.layero.ru на VM-edge — минуя YC CDN, чтобы не съедать слоты CDN-shard'а и не платить за выпуск per-host сертификата на каждую feature-ветку.
Через 24 часа после первого успешного деплоя ветки preview-URL перестаёт работать (отдаёт 404). Это сделано чтобы:
- Не оставлять старые demo-ссылки навсегда (legal / staleness)
- Освобождать ресурсы platform'ы от давно заброшенных feature-веток
Если 24 часа мало — закрепите preview через UI («Pin preview» на странице окружения), TTL продлится до явного Unpin.
Per-deploy URL
<org>-<project>-<branch>-<sha7>.preview.layero.ru показывает конкретный коммит — полезно когда:
- Нужно зашерить QA конкретный билд, не зависящий от последующих push'ей
- Сравнить две версии бок о бок
Сам URL — это просто preview-форма с sha-суффиксом; резолвер снимает sha и находит env. После 24 ч TTL ветки — тоже перестаёт работать.
Production-pointer (V071)
Это и есть «новая логика определения доменов». Раньше каждая ветка получала свой канонический домен на YC CDN — это плохо масштабировалось (cap на проекты в одном CDN-resource'е) и плохо матчилось с production-флоу (никто не хотел чтобы любая feature-ветка автоматом становилась прод). Сейчас:
projects.production_deploy_id ──→ deploys (конкретный билд)
│
▼
environments (любая ветка)
Apex <org>-<project>.layero.ru всегда отдаёт именно этот deploy_id — независимо от того, на какой ветке он был собран.
Auto-promote (по умолчанию вкл)
При успешном push'е в default-ветку (main обычно) указатель автоматически переключается. Это сохраняет «push to main = ship to prod»-флоу для соло-проектов.
Когда команда растёт — выключите auto-promote в Settings проекта. Тогда каждый promote становится явным кликом — для предотвращения случайных production-релизов.
Manual promote
Из UI: кнопка «Promote to production» на странице любого ready-деплоя.
Из CLI:
# promote последнего ready-деплоя default-ветки
layero promote
# promote конкретного деплоя по SHA или ID
layero promote --deploy=a3f9c2b
layero promote --deploy=550e8400-e29b-41d4-a716-446655440000
# выкатить из dev-ветки сразу в production одной командой
layero deploy --branch=staging --promote
Каждый promote логируется в promote_events — кто, когда, какой деплой, через какой канал (UI / CLI / auto). История доступна в дашборде.
One-click rollback
При каждом promote'е Layero сохраняет предыдущий production-деплой в previous_production_deploy_id. Кнопка «Откатить production» делает атомарный swap двух полей — apex моментально (через CDN edge cache propagation ~30–60 сек) возвращается на прошлый рабочий билд.
layero promote --rollback
Rollback стабильный: вызвав его дважды, вернётесь к исходному состоянию (ping-pong).
Что показывает UI
На странице проекта Production card — то, что сейчас отдаёт apex:
- Хост:
<org>-<project>.layero.ru(один и тот же всегда) - Содержание: скриншот текущего production-деплоя
- Бейдж ветки:
productionнапротив той ветки, чей деплой сейчас pinned
В списке веток ниже — все остальные с их preview-URL и собственным статусом.
Coming Soon
Когда у проекта никогда не было успешного production-деплоя (только что создан, default-ветка не собралась, ещё не запушили ничего), apex показывает страницу «Сайт скоро появится» вместо 404 — чтобы зашаренная ссылка выглядела ожидающе, а не сломанно.
То же самое — для preview-URL ветки, build которой ещё в полёте (нет ready-деплоя для этой ветки).
Передача между членами команды
Preview-ссылка <org>-<project>-<branch>.preview.layero.ru — это публичный URL (если не включена site-auth). Шерится в любой чат / комментарий PR.
Канонический apex — тоже публичный, но это production: его показывают пользователям, а не QA. Promote — это release-action, делайте осознанно.