Перейти к содержимому
Версия 1.0 ещё не выпущена; проект находится на стадии pre-MVP. См. возможности и ограничения версии 1.0.

Первый сайт

Это руководство использует админку CMS и публичный API чтения, а не автономный бэкенд. Модель article, поле title, слаг hello и хост www.example.com приведены для примера. Подставьте действительно созданные значения.

1. Установите систему и получите аккаунт администратора

Заголовок раздела «1. Установите систему и получите аккаунт администратора»

Завершите установку. Откройте одноразовую ссылку администратора и задайте пароль. Не помещайте учётные данные развёртывания в контент или скриншоты. Для локального стенда с фикстурами следуйте настройке репозитория. Локальные тестовые аккаунты не предназначены для production.

При создании сайта выберите Сайт или Блог. Позже этот выбор изменить нельзя. Сайт с назначением Блог получает одну стартовую модель Post и экран Записи; см. сайты-блоги. В этом руководстве используется назначение Сайт.

Перед редактированием выберите нужный сайт. Задайте его публичный хост и языки в настройках. Выберите основной язык и строгий режим выбора языка либо режим с резервными языками (fallback). Выбор сайта ограничивает административные запросы. Публичный Worker определяет сайт по хосту запроса. Служебный хост Worker не становится автоматически хостом сайта.

В конструкторе моделей создайте article, добавьте обязательное текстовое поле title и примените модель. Перед подтверждением изучите все предупреждения о несовместимых изменениях. Публичную видимость выбирайте только для общедоступной информации. Справочник полей объясняет связи, медиа и компоненты. Обычная модель Article не превращается автоматически в веб-страницу.

Откройте Контент, выберите модель, создайте запись на нужном языке, введите заголовок и задайте слаг hello. Сохраните черновик. Сохранение не означает публикацию. Откройте запись повторно и проверьте сохранённые данные. Если включён режим согласования, отправьте запись по показанному процессу на утверждение уполномоченному проверяющему. Если система отклонила переход, не пытайтесь обойти проверку.

Опубликуйте запись от имени пользователя, у которого есть необходимые права. С сервера или из терминала запросите публичный хост сайта:

Окно терминала
curl --fail --silent --show-error 'https://www.example.com/v1/article/hello?locale=en'

Успешный ответ содержит опубликованную запись в data. Записи, у которых есть только черновик, публично недоступны. Неизвестный хост, приватная модель, недоступная локаль или отсутствие опубликованного слага могут дать 404. Прежде чем менять видимость или доступ для устранения ошибки, прочитайте отказы публичного API.

6. Подключите рендерер и проверьте снятие с публикации

Заголовок раздела «6. Подключите рендерер и проверьте снятие с публикации»

Подключите фронтенд по руководству по клиенту и предпросмотру. Веб-сайту нужны собственные сборка и развёртывание. Публикация записи CMS не доказывает, что страница развёрнута. Снимите тестовую запись с публикации и проверьте её исчезновение из публичного API и, после успешной пересборки, из поиска. Неудачный обход сайта поисковым индексатором не должен заменять прежний рабочий индекс.

Следующий шаг: выберите, как работает сайт

Заголовок раздела «Следующий шаг: выберите, как работает сайт»

Для повседневной работы дополнительная настройка не нужна. CMS продолжает отдавать контент, пока вы редактируете и публикуете. Продолжите с редактором страниц, сайтами-блогами, моделями и полями и людьми и доступом.

Автономный бэкенд необязателен. Выбирайте его, только если нужен собственный репозиторий со сгенерированным API Worker, базой данных и развёртыванием. Он генерируется из существующего сайта, поэтому решить можно позже. См. что генерирует Dee Wan.

В корне репозитория создайте стартовый проект в новом или пустом каталоге:

Окно терминала
npm run reference:starter -- --out ../my-website --config ./starter-config.json
cd ../my-website
npm ci
npm run check
npm run build
npm run preview -- --port 4321

Используйте версию Node из .nvmrc. Перед запуском создайте starter-config.json:

{
"site_id": "YOUR_SITE_ID",
"canonical_origin": "https://YOUR_PUBLIC_CMS_HOST",
"routes": {
"format": 1,
"routes": [{ "model": "YOUR_PAGE_MODEL", "path": "/{locale}/{slug}" }]
}
}

Замените значения заглавными буквами на настоящий ID сайта, адрес его публичного API и слаг модели страниц. Имя хоста API должно совпадать с доменом в настройках сайта: публичный API определяет сайт по имени хоста, а не по site_id. Каждый маршрут должен содержать {slug}; добавьте {locale}, если язык должен входить в адрес. Для блога добавьте "blog": true. Для локальной CMS укажите "local": true, явный адрес API на локальном компьютере и совпадающий домен сайта, например 127.0.0.1. Сам сайт запустите на другом порту. Неизвестные параметры отклоняются.

В проект входят закреплённые версии зависимостей и lock-файл, исходники Astro, настройки Wrangler и сведения о совместимости с текущим контрактом страниц и протоколом рендерера. Макет и оформление меняйте в src/template/; для разработки запустите npm run dev -- --port 4321. Проект получает опубликованный контент, медиа, формы и поиск через существующий публичный API. Ссылки на другие языки берутся из настоящих опубликованных адресов. SEO и поддерживаемые rich-блоки обрабатывает тот же рендерер, что используется для управляемого сайта и предпросмотра. Управляющий токен CMS, база данных и сервер плагинов в проект не входят.

Созданные исходники принадлежат вам. При обновлении CMS создайте свежий проект в другом каталоге и перенесите обновлённые файлы среды выполнения и контракта вместе, сохранив изменения шаблона. Генератор не перезаписывает существующий сайт. Этот вариант читает актуальный контент из CMS; автономная поставка отдельно экспортирует бэкенд и снимок контента. Локальная сборка не развёртывает сайт и не подтверждает работу у провайдера.

Формы отправляют данные на предусмотренный публичный адрес самого сайта. Среда выполнения переносимого сайта ограничивает размер запроса и передаёт его CMS по настроенному адресу; CMS сохраняет заявку и обрабатывает доставку через существующую службу форм. Запрос из браузера должен поступать с этого сайта. Учётные данные админки не передаются.

Эталонный сайт: воспроизведите его локально

Заголовок раздела «Эталонный сайт: воспроизведите его локально»

В репозитории есть вымышленный эталонный сайт Meridian Review. Это фиксированный набор тестовых данных из scripts/seed-corpus/reference-site.ts: английский и немецкий языки, три переведённые записи блога с обложкой и одна составная страница с форматированным контентом в секциях и тремя изображениями. Ничто в нём не описывает реальную организацию.

Один тест собирает его целиком на чистой базе. Запускайте из backend/ на версии Node из .nvmrc:

Окно терминала
DEEWAN_SITE_BUILD=1 npx vitest run test/reference-site-acceptance.test.ts --maxWorkers=1 --no-file-parallelism

Тест устанавливает зависимости сайта и выполняет настоящую сборку, поэтому идёт несколько минут и требует, чтобы машина была свободна. Он слушает порты с 43261 по 43263; чтобы сместить их, задайте DEEWAN_SITE_BUILD_REFERENCE_PORT. Без DEEWAN_SITE_BUILD=1 тест пропускается, а пропущенный тест ничего не доказывает.

По порядку тест:

  1. создаёт сайт из миграций репозитория с обоими языками, блогом и моделью страницы;
  2. загружает изображения, создаёт и публикует записи и страницу;
  3. выпускает сохранённую ссылку предпросмотра для черновика и проверяет, что только она его открывает;
  4. генерирует сайт, собирает его и отдаёт через Wrangler;
  5. проверяет локализованные адреса страницы и записей, форматированный контент и изображения в собранном результате;
  6. добавляет поле модели, публикует запись, переименовывает страницу и заново генерирует в тот же каталог, затем проверяет, что ваш собственный файл не изменился ни на байт, что добавлена миграция и что ни одна применённая миграция не переписана;
  7. пересобирает сайт и проверяет, что переименованная страница теперь отдаётся;
  8. публикует неверную правку, восстанавливает прежнюю версию и проверяет, что блог отдаёт оригинал;
  9. делает резервную копию базы SQLite и проверяет, что генерация из копии даёт те же данные сайта, не считая времени создания и обновления.

Восстановление здесь — это восстановление версии в репозитории и резервная копия, которую может прочитать генерация сайта. В репозитории нет восстановления одной командой; см. резервное копирование и восстановление.

Эти проверки подтверждают работу только в локальном окружении. Приёмка развёрнутого эталонного сайта отложена до получения необходимых разрешений и не выполнялась: нужны аккаунт Cloudflare (Workers, D1, R2), репозиторий GitHub и имя хоста, а также восстановление средствами провайдера. В локальном запуске изображения попадают в тестовое хранилище, фиксирующее операции записи, а не в R2. Не считайте успешный локальный запуск доказательством развёртывания.


Стабильная версия ещё не выпущена (pre-MVP)
Коммит исходного кода: fe23db481c422b40e317b92fc98116b4c0c26a87 (с локальными изменениями)
Дата сборки (UTC): 2026-10-18T09:22:34.630Z
Коммит для обновления: не определён: в рабочей копии есть изменения. Примечания к выпуску