Сайты и деплой

Опишите сайт — получите его по адресу

Описание обычными словами превращается в сгенерированный статический сайт: он попадает в объектное хранилище с включённым веб-хостингом, на него указывает DNS-запись, а на выходе — работающий URL. Доступно как API, поэтому это может стать функцией вашего продукта.

На входе слова, на выходе работающий URL

Пользователь описывает страницу. Агент-дизайнер её генерирует, агент-публикатор размещает по-настоящему, и прогон возвращает адрес — без выбора шаблона и без конструктора посередине.

Деплой — часть прогона, а не то, что потом

Тот же прогон создаёт бакет, включает хостинг статического сайта, загружает файлы, ставит перед ними CDN с сертификатом — чтобы на выходе был HTTPS, — и обновляет DNS-запись. Ничего не остаётся человеку «доделать».

Каждая ревизия сохранена и обратима

Каждая опубликованная ревизия проштампована и записана. Их можно перечислить, откатиться на нужную или удалить сайт — отмена это эндпоинт, а не обращение в поддержку.

Сначала API — чтобы это стало чужой функцией

Один POST запускает сборку, результат забирается опросом. Партнёрский продукт может предлагать генерацию сайтов своим пользователям, ничего из этого не эксплуатируя.

Мультиарендность заложена в конструкцию

Арендаторы разделены на уровне токена, поэтому сайты одного клиента не пересекаются с сайтами другого — та же изоляция, под которой работает любой другой workflow Forge.

Задача

«Наши пользователи описывают, чего хотят. В итоге у них должна быть страница по адресу — не архив, не черновик и не задача на нашей стороне».

Разрыв между сгенерированной страницей и опубликованной — то место, где тихо заканчивается большинство «ИИ-конструкторов сайтов». Сделать HTML легко; дальше нужен бакет, нужно включить хостинг, положить файлы, направить DNS — и кто-то должен отвечать за случай, когда третий шаг прошёл, а четвёртый нет. Именно из-за этой обвязки функция обычно заканчивается ZIP-архивом.

Что делает Forge

Один прогон — от фразы до адреса:

Описаниевходкакой должна быть страница
ДизайнерДизайнергенерирует сайт
ПубликаторDevOpsбакет · хостинг · загрузка
HTTPS + DNSCDN, сертификат, поддомен
Живой URLвыходревизия записана, обратима

Дизайнер превращает описание в саму страницу.

Публикатор берёт на себя неблагодарную половину: создаёт бакет, включает на нём хостинг статического сайта, загружает файлы и обновляет DNS-запись, чтобы поддомен резолвился. Облачные учётные данные разрешаются на стороне сервера и не попадают в контекст модели — правило то же, что и везде в Forge.

Прогон возвращает URL, а поскольку это обычный прогон workflow, он оставляет и обычную запись о том, как к нему пришёл.

Почему важна именно такая форма

Это API, а не страница в нашей панели. Один POST запускает сборку, результат забирается опросом. Значит, возможность не обязана быть функцией нашего продукта — она может быть функцией вашего. Продукт, который собирает описание от своих пользователей, может отдать им живой сайт, не эксплуатируя ни хранилище, ни DNS, ни сборочный конвейер.

Арендатор определяется вызывающим токеном, поэтому сайты одного клиента отделены от сайтов другого по конструкции, а не по договорённости.

Честное состояние

Отгружено и проверено вживую: бриф → сгенерированный сайт → бакет и хостинг → загрузка → CDN с сертификатом для HTTPS → DNS → работающий URL, плюс список ревизий, откат на выбранную и удаление сайта.

Настоящим это сделали именно живые смоуки. Они поймали четыре дефекта, которые юнит-тесты поймать не могли: облачный API, потребовавший другой content-type; инструмент, зарегистрированный на одном пути исполнения и отсутствующий на другом; три недостающих IAM-гранта; и enum, который обязан быть в верхнем регистре. Зелёная сборка — это ещё не работающий пайплайн, поэтому мы смоукаем по-настоящему, прежде чем что-то называть готовым.

Всё ещё узко, и мы предпочитаем это назвать: отгруженный адаптер работает с объектным хранилищем, CDN и DNS одного облака; сама форма workflow к нему не привязана, но остальные адаптеры пока не написаны. Очень большие многофайловые сборки упираются в потолок размера запроса, который мы не поднимали. Распространение сертификата на границе облака на свежем домене может занять часы — это уже их сторона, а не наша, но это реально и это стоит закладывать.

Что под капотом

  • Workflow Engine — цепочка из двух ролей за прогоном
  • Secrets & Egress — почему облачные ключи не доходят до агента
  • Media Generation — картинки для страницы через тот же шлюз
  • Git-Backed Audit — что было сгенерировано и задеплоено, зафиксировано

Хотите, чтобы ваш продукт отдавал пользователю живой сайт?

Расскажите, какой должна быть страница и где она должна жить. Со стороны API это один POST и опрос статуса.