Установка Dee Wan
По этому руководству вы установите Dee Wan CMS в свой аккаунт Cloudflare. Установка Dee Wan включает административный Worker, публичный Worker чтения, интерфейс управления на Cloudflare Pages, одну управляющую базу D1, хранилище медиа и необходимые учётные данные. Она создаётся один раз, имеет одну ссылку активации и обслуживает несколько сайтов (см. словарь продукта).
Чтобы сначала осмотреться без аккаунта Cloudflare, воспользуйтесь локальной пробной версией: она запускает весь продукт с локальной базой данных на вашей машине.
Установка выполняется установщиком командной строки: npm run setup для интерактивного запуска и
npm run install:cms -- <verb> для запуска по плану, продолжения прерванной установки и автоматизации через скрипты. Ему нужен
API-токен Cloudflare. Он хранит ваши ответы в backend/wrangler.jsonc, а ход работы — в журнале
шагов, и выполняет список шагов, который выводит npm run plan.
Есть и установщик в браузере, но ему нужно приложение Cloudflare OAuth, которое вы регистрируете сами, и он не является поддерживаемым способом установки. См. Предпросмотр веб-установщика.
Dee Wan 1.0 ещё не выпущен. Установка в реальный Cloudflare — один из критериев приёмки, которые остаются открытыми. Что входит и что не входит в продукт, описано в границе продукта 1.0.
Учётные данные GitHub зависят от процесса. GitHub App админки настраивается отдельно от device flow CLI. Необязательная ссылка на App в установщике не настраивает Worker. Используйте матрицу аутентификации, затем пройдите путь от первого сайта до публикации.
Перед началом
Заголовок раздела «Перед началом»Что понадобится
Заголовок раздела «Что понадобится»- Аккаунт Cloudflare с Workers, D1, Pages и R2 или Cloudflare Images.
- Node 22 (22.14 или новее) или Node 24 (24.10 или новее). В репозитории есть
.nvmrc(24.18.1), поэтомуnvm useвыбирает нужную версию. - npm ровно той версии, которую объявляет
package.json(11.16.0), — это npm, который поставляется с Node из.nvmrc. - Git, чтобы клонировать репозиторий вместе с сабмодулями.
- По желанию — собственный домен. Чтобы его использовать, домен должен быть зоной в том же
аккаунте Cloudflare. Без него установка Dee Wan использует адреса, которые выдаёт Cloudflare
(
pages.devиworkers.dev). - По желанию — ключ провайдера ИИ. По умолчанию используется DeepInfra; после установки можно настроить совместимого с OpenAI провайдера.
Cloudflare Access (Zero Trust) не обязателен. Установщик предлагает его как дополнительный периметр перед админкой, и он выключен, пока вы его не включите.
Получите код и установите зависимости
Заголовок раздела «Получите код и установите зависимости»git clone --recurse-submodules https://github.com/dee-wan-cms/dee-wan.gitcd dee-wannode scripts/install-dependencies.mjsnode scripts/install-dependencies.mjs frontendПервая команда устанавливает зависимости корня и бэкенда. Вторая — зависимости интерфейса
управления, который установщик собирает и разворачивает. Всегда устанавливайте зависимости через
node scripts/install-dependencies.mjs, никогда не через голый npm install или npm ci. Скрипт
отказывается работать с любой другой версией npm, устанавливает зафиксированное дерево зависимостей
с отключёнными install-скриптами, а затем пересобирает только те пакеты, чьи скрипты одобрены.
После клонирования репозитория вручную собирать проект не нужно: setup, deploy и migrate:d1 собирают пакеты и
клиент Prisma, если их нет.
Что создаётся
Заголовок раздела «Что создаётся»Это шаги, которые выполняет установщик, по порядку. npm run plan выводит тот же список для вашей
конфигурации с состоянием каждого шага.
| Шаг | Что он создаёт или делает |
|---|---|
| Проверить Node и Wrangler | Только проверяет. |
| Найти токен Cloudflare API | Только проверяет. |
| Выбрать аккаунт Cloudflare | Только проверяет. |
| Предварительная проверка — права токена, тарифный план, существующие ресурсы | Только проверяет. Если проверка не пройдена, останавливает запуск до того, как что-либо создано. |
| Создать управляющую базу D1 | Базу данных D1 (имя по умолчанию dee-wan-cms-db). |
| Применить миграции к D1 | Схему, а также начальные роли и процесс согласования. |
| Подготовить закрытый бакет для архивов импорта | Закрытый бакет R2 для архивов импорта. Только если вы это выберете. |
| Подключить первый сайт к имени хоста | Публичное имя хоста для первого сайта. |
| Собрать интерфейс управления | Только собирает. |
| Развернуть интерфейс управления в Pages | Проект Pages (имя по умолчанию dee-wan-cms). |
| Развернуть админский Worker | Worker (имя по умолчанию dee-wan-cms-backend). |
| Создать и сохранить секрет подписи сеансов | Секрет Worker. |
| Подготовить хранилище медиа | Бакет R2 для медиа или привязку Cloudflare Images. |
| Развернуть публичный API | Публичный Worker чтения (назван по имени админского Worker с добавлением -public) и его имя хоста. |
| Развернуть приём форм сайта | Worker приёма форм (назван по имени админского Worker с добавлением -intake). Пропускается, когда DEPLOY_FORM_INTAKE равно false; тогда формы сайта не принимают отправки. |
| Создать и сохранить ключ подписи токенов сайта | Секрет Worker на админском и публичном Workers. |
| Подключить маршруты Worker | Два маршрута Worker в вашей зоне: <admin host>/api/* и <admin host>/.well-known/oauth-*. Только с собственным доменом. Удаление снимает их, только пока они ведут на этот Worker. |
| Направить DNS на развёртывание | DNS-записи в вашем домене. Только с собственным доменом и включённой настройкой DNS. |
| Поставить Cloudflare Access перед админкой | Приложение и политику Access. Только если вы включите Access. |
| Проверить, что развёртывание отвечает | Только проверяет. |
| Выпустить ссылку активации для первого администратора | Одноразовую ссылку, которая показывается один раз. |
Такие ресурсы, как Workers, проект Pages, база данных D1 и бакеты R2, — платные ресурсы Cloudflare в выбранном вами аккаунте.
С собственным доменом интерфейс управления по умолчанию доступен по адресу cms.<your-domain>, а
публичный API — по адресу content.<your-domain>. Без домена интерфейс управления доступен по адресу
<pages-project>.pages.dev, а публичный API — по адресу
<admin-worker>-public.<your-workers.dev-subdomain>.workers.dev.
CLI-установщик
Заголовок раздела «CLI-установщик»Учётные данные
Заголовок раздела «Учётные данные»Установщику нужен API-токен Cloudflare. npm run setup запрашивает его, если токен не задан,
выводит нужные права доступа с причиной для каждого и даёт ссылку на редактор токенов Cloudflare, в
котором эти права уже выбраны. Включите все аккаунты и зоны.
| Право доступа | Когда нужно | Зачем |
|---|---|---|
| Account · Account Settings · Read | Для любой установки | Прочитать имя и настройки аккаунта. |
| Account · D1 · Edit | Для любой установки | Создать базу данных и применить миграции. |
| Account · Workers Scripts · Edit | Для любой установки | Развернуть админский Worker, публичный Worker чтения и Worker приёма форм, их секреты и собственные домены. |
| Account · Cloudflare Pages · Edit | Если развёртывание интерфейса управления не выключено | Создать и развернуть проект интерфейса управления. |
| Account · Workers R2 Storage · Edit | Медиа в R2 или бакет для импорта | Создать бакеты для медиа и импорта. |
| Zone · Zone · Read | С собственным доменом | Найти зону, к которой относится ваш домен. |
| Zone · Workers Routes · Edit | С собственным доменом | Направить имена хостов админки и сайта на Workers. |
| Zone · DNS · Edit | С собственным доменом и включённой настройкой DNS | Направить имя хоста админки на развёртывание. |
| Zone · Zone WAF · Edit | С собственным доменом (необязательно) | Установить правило ограничения частоты входа и необязательное правило для публичного API. Без этого права оба пропускаются с предупреждением; собственный ограничитель входа в Worker продолжает действовать. |
| Account · Access: Apps and Policies · Edit | Только с Cloudflare Access | Создать приложение и политику Access перед админкой. |
| Account · Access: Organizations, Identity Providers, and Groups · Read | Только с Cloudflare Access | Прочитать домен вашей команды Access. |
npm run setup и npm run doctor выводят этот список для настроек, уже выбранных в вашей
конфигурации. Строки Access запрашиваются, только когда вы включили Access. Для остальных ещё не выбранных настроек
права перечисляются с указанием условий, при которых они нужны. Права для отключённых функций не запрашиваются. Предзаполненная ссылка на токен выбирает те же строки, кроме Zone · Zone WAF · Edit:
выведенный список просит добавить его вручную. Для проверки токена дополнительное право не нужно.
Если вы используете Cloudflare Images, setup рекомендует отдельный токен только с правом
Cloudflare Images: Edit.
Чтобы пропустить вопросы, задайте токен и аккаунт в окружении:
export CLOUDFLARE_API_TOKEN=… # skips the token promptexport CLOUDFLARE_ACCOUNT_ID=… # skips the account pickerУчётные данные выбираются в следующем порядке: переменная, экспортированная в вашей оболочке, затем
файл .env репозитория, затем значения в backend/wrangler.jsonc. Когда окружение переопределяет
другое значение из конфигурации, установщик об этом сообщает.
Токен проверяется до того, как что-либо создаётся. Интерактивный запуск допускает три попытки. Неинтерактивный останавливается на первой неудаче. В любом случае, если токен не удаётся проверить, ресурсы Cloudflare не создаются.
Секреты приложения никогда не хранятся в wrangler.jsonc. См. Секреты.
Интерактивная установка: npm run setup
Заголовок раздела «Интерактивная установка: npm run setup»npm run setupsetup проводит вас через установку и сохраняет каждый ответ в backend/wrangler.jsonc по ходу
дела, поэтому второй запуск не спрашивает снова. По порядку он:
- Находит или создаёт
backend/wrangler.jsoncи определяет токен и аккаунт. Если токен даёт доступ к нескольким аккаунтам, спрашивает, какой использовать. - Спрашивает, на каком тарифе D1 аккаунт (Free — 500 MB на базу данных. Paid — 10 GB на базу данных).
- Выполняет предварительную проверку и выводит отчёт. Если проверка не пройдена, останавливается до создания чего-либо («Setup stopped before creating any Cloudflare resources. Fix the FAIL rows above.»). Если ресурсы будут созданы или изменены, просит подтверждения.
- Спрашивает, где будет работать установка Dee Wan (на вашем собственном домене или на адресах, которые
выдаёт Cloudflare), затем домен, поддомен админки (по умолчанию
cms) и поддомен публичного API контента (по умолчаниюcontent). - Спрашивает, настраивать ли DNS, настраивать ли Cloudflare Access (по умолчанию нет) и устанавливать ли правило ограничения частоты запросов для публичного API (по умолчанию нет).
- Спрашивает имя проекта Pages и имя Worker.
- Спрашивает провайдера хранилища: Cloudflare R2 или Cloudflare Images. Для R2 создаёт
бакет (по умолчанию
dee-wan-cms-images), включает публичный доступ через управляемый адресr2.devили собственный домен для медиа и проверяет, что загруженные файлы действительно отдаются. - Спрашивает, включить ли импорт данных, — это создаёт закрытый бакет R2 для загружаемых архивов (по умолчанию нет).
- Создаёт базу данных D1 и предлагает применить схему (по умолчанию да). Свежей установке не нужен отдельный шаг миграции.
- Собирает и разворачивает интерфейс управления, админский Worker, публичный Worker чтения и
Worker приёма форм, сохраняет секреты Worker и подключает выбранные вами маршрут, DNS-записи и
приложение Access. Он записывает
backend/wrangler.public.jsoncиbackend/wrangler.intake.jsonc, когда аккаунт, зона и id базы данных определены, и никогда не перезаписывает существующий файл. - Предлагает запустить проверки работоспособности.
- Спрашивает email первого администратора, если
BOOTSTRAP_ADMIN_EMAILещё не задан, и выводит ссылку активации.
В конце он выводит «Setup complete!», сводку конфигурации и следующие шаги. Если не хватает обязательной части, он завершается сообщением «Setup did not complete» и вместо этого называет, чего не хватает.
setup также принимает --access / --no-access и --public-rate-limit /
--no-public-rate-limit, чтобы ответить на эти вопросы в командной строке, например
npm run setup -- --no-access.
Сначала план: npm run plan
Заголовок раздела «Сначала план: npm run plan»npm run plannpm run plan -- --jsonplan показывает все шаги предстоящей установки и текущее состояние каждого из них. Он работает только с конфигурацией и журналом шагов на диске: не обращается к сети,
ничего не создаёт и ничего не стоит. --json выводит машиночитаемый план с planVersion.
У каждого шага одно из этих состояний:
| Отметка | Состояние | Значение |
|---|---|---|
✓ |
done | Записан как выполненный. |
• |
to do | Будет выполнен. |
– |
not applicable | Пропущен для этой конфигурации, с указанием причины. |
✗ |
blocked | Пока не может быть выполнен, например потому что не найден API-токен Cloudflare. |
? |
unresolved | Предыдущий запуск отправил запрос, но не сохранил ответ, либо запрос завершился ошибкой. Перед повтором apply проверяет аккаунт и останавливается, если результат нельзя установить достоверно. |
↻ |
re-checked | Проверка, которая выполняется при каждом apply. |
Команды установщика: npm run install:cms
Заголовок раздела «Команды установщика: npm run install:cms»npm run install:cms -- <verb> [options]| Команда | Что делает | Меняет аккаунт |
|---|---|---|
plan |
Сообщает, что сделала бы установка. То же, что npm run plan. |
Нет |
apply |
Выполняет установку. | Да, создаёт платные ресурсы |
resume |
Продолжает установку, остановившуюся на полпути. Отказывает, если ни один шаг ещё не выполнен. | Да, создаёт платные ресурсы |
doctor |
Предварительные проверки. Ничего не меняет. | Нет |
verify |
Проверяет развёртывание от начала до конца. Никогда не направляйте её на production. Там добавляйте --read-only. |
Создаёт сайт, модель и контент, если не указан --read-only |
teardown |
Удаляет то, что создала установка. Пробный прогон, если не передан --apply. |
Только с --apply |
manifest |
Выводит запись об установке со скрытыми секретами (аккаунт, имена ресурсов, история шагов) для передачи. Никогда не содержит учётных данных. | Нет |
apply и resume работают на том же движке, что и npm run setup. Именно журнал шагов
заставляет второй запуск продолжать, а не повторять: каждый выполненный шаг записывается в файл
журнала в корне репозитория, по одному файлу на аккаунт Cloudflare
(.dee-wan-cms-install.<account>.json). Файл журнала, который не удаётся прочитать полностью,
останавливает запуск, а не игнорируется.
Параметры:
| Параметр | Значение |
|---|---|
--config <file> |
С какой установкой Dee Wan работать. По умолчанию wrangler.jsonc. Голое имя ищется в backend/. |
--account <id> |
Явно указанный аккаунт Cloudflare. Каждый шаг, выполняемый командой, привязан к нему. |
--json |
Машиночитаемый вывод. Подразумевает --yes. |
--yes, -y |
Никогда не задавать вопросов. Если нужен ответ пользователя, завершается с ошибкой. |
verify также передаёт дальше --read-only, --public, --admin, --email, --model и
--disposable, а teardown передаёт --apply и --yes. Любой другой параметр, повторённый
параметр или параметр с пустым значением (например, --account= из незаданной переменной оболочки)
вызывает отказ, а не игнорируется.
apply, resume, teardown и verify (если не указан --read-only) требуют аккаунт. Они берут
его из --account, затем из CLOUDFLARE_ACCOUNT_ID, затем из account_id в конфигурации и
отказывают, если аккаунт не указан нигде.
Коды выхода
Заголовок раздела «Коды выхода»install:cms завершается с фиксированным кодом, чтобы скрипт мог ветвиться по результату:
| Код | Имя | Значение | Что делать |
|---|---|---|---|
| 0 | ok | Установка завершена. | Ничего. |
| 1 | usage | Неверная командная строка, или resume не нашёл, что продолжать. |
Исправьте команду. |
| 2 | blocked | Не хватает того, что можете предоставить только вы, например токена или аккаунта. | Предоставьте это и запустите снова. |
| 3 | failed | Запуск завершился ошибкой. | Прочитайте вывод и устраните причину, прежде чем повторять. |
| 4 | incomplete | Запуск не завершился ошибкой, но остались невыполненные шаги. | Можно безопасно повторить как есть, обычно через resume. |
| 5 | unresolved | Шаг был начат, и его результат неизвестен. | Прежде чем повторять действия, проверьте ресурсы в аккаунте. |
plan использует те же коды для описания текущего состояния: 2, если шаг заблокирован, 5, если
шаг не определён, 4, если работа осталась, и 0, если всё выполнено.
Запуск без участия пользователя
Заголовок раздела «Запуск без участия пользователя»С --yes, --json, DEEWAN_YES=1 или CI=true каждый вопрос получает ответ по умолчанию.
Вопрос без безопасного значения по умолчанию превращается в ошибку, которая называет настройку,
которую нужно добавить, вместо догадки:
- Где будет работать установка Dee Wan: задайте
"DOMAIN_MODE": "custom"вместе с"DOMAIN"или"DOMAIN_MODE": "cloudflare"вvarsвbackend/wrangler.jsonc. - Тариф D1: задайте
"D1_PLAN": "free"или"paid"вvarsлибо экспортируйтеD1_PLAN. - Аккаунт, если токен даёт доступ к нескольким: задайте
account_idв конфигурации или экспортируйтеCLOUDFLARE_ACCOUNT_ID. - Первый администратор: задайте
BOOTSTRAP_ADMIN_EMAILвvars. Запуск без участия пользователя его не спрашивает, и без него ссылку активации выпустить нельзя.
Например:
npm run install:cms -- apply --account <account-id> --jsonОбщий аккаунт Cloudflare
Заголовок раздела «Общий аккаунт Cloudflare»Имена ресурсов по умолчанию (dee-wan-cms-backend, dee-wan-cms-db и так далее) фиксированы,
поэтому две установки Dee Wan в одном аккаунте Cloudflare конфликтуют. Задайте DEEWAN_RESOURCE_PREFIX,
чтобы вынести в отдельное пространство имён каждый ресурс, который создаёт запуск:
DEEWAN_RESOURCE_PREFIX=test-a1b2 npm run setup # creates test-a1b2-dee-wan-cms-db, …Префикс должен состоять из строчных букв, цифр и дефисов, начинаться с буквы или цифры и быть не длиннее 24 символов.
Задавайте его для новой установки Dee Wan, а не для существующей. Wrangler находит базу данных D1 по имени
в backend/wrangler.jsonc, поэтому префикс работает только после того, как setup записал имена с
префиксом в этот файл. См. Запуск установщика на общем аккаунте.
При удалении установки Dee Wan ресурсы не выбираются только по их именам. Удаляются только ресурсы, которые, согласно записи об установке, создала именно эта установка Dee Wan. См. Начать заново или удалить установку Dee Wan.
После установки
Заголовок раздела «После установки»Активация установки
Заголовок раздела «Активация установки»Пока установка не активирована, аккаунта нет ни у кого. npm run setup один раз выводит
одноразовую ссылку активации вместе с email-адресом, к которому она привязана, и сроком действия.
Ссылка истекает через 15 минут. Хранится только её хеш, поэтому вывести её снова нельзя.
Откройте её и создайте первого администратора, как описано в Создание и замена первого администратора.
Если ссылка истекла до того, как ею кто-то воспользовался, снова запустите установщик
(npm run setup или npm run install:cms -- resume). Истёкшая ссылка активации считается
невыполненным шагом, поэтому запуск создаст новую, пока установка не активирована. Заменить её
может и npm run claim:link. См.
Создание и замена первого администратора.
Проверьте, что всё работает
Заголовок раздела «Проверьте, что всё работает»npm run healthвыполняет проверки после развёртывания по развёрнутым адресам. Если включён Access, он также проверяет периметр, используя сервисный токен изCF_ACCESS_CLIENT_IDиCF_ACCESS_CLIENT_SECRET.npm run verify -- --read-only --public <public-api-url>проверяет развёртывание, ничего не записывая. Добавьте--model <slug>, чтобы прочитать одну опубликованную модель.npm run verify -- --admin <url> --public <url> --email <address> --disposableсVERIFY_PASSWORDв окружении создаёт сайт, модель и контент. Используйте его только на одноразовом развёртывании: админский API может деактивировать сайт, но не удалить его.npm run doctor— предварительная проверка только для чтения, которая называет всё, чего не хватает, и как это исправить.npm run planдолжен сообщать, что делать больше нечего.
Добавьте секреты для необязательных функций
Заголовок раздела «Добавьте секреты для необязательных функций»Секреты задаются через wrangler secret put из каталога backend/, никогда не в файле. Например,
функциям ИИ нужен ключ DeepInfra:
npx wrangler secret put DEEPINFRA_API_KEYДля провайдера, совместимого с OpenAI, задайте переменные Worker AI_PROVIDER="openai-compatible", AI_BASE_URL и AI_TEXT_MODEL, затем добавьте AI_API_KEY командой wrangler secret put. Необязательные AI_VISION_MODEL и AI_IMAGE_MODEL включают распознавание и создание изображений. Списки разрешённых установкой моделей задаются через AI_TEXT_MODELS, AI_VISION_MODELS и AI_IMAGE_MODELS. См. Провайдер ИИ.
Все необязательные секреты и настройки описаны в разделе Секреты: почта, GitHub App для передачи исходников в репозиторий, очистка кэша, лимиты ИИ и отчёты об ошибках.

Загрузка больших медиафайлов: админка потоково принимает документы, аудио, видео и другие файлы до
100 МБ — это лимит тела запроса на тарифах Cloudflare Free и Pro. Business допускает 200 МБ, а
Enterprise — до 5 ГБ (лимиты Workers,
прочитано 2026-10-12). Задавайте значение, только если ваш тариф допускает больше:
"MEDIA_REQUEST_BODY_LIMIT_BYTES": "200000000" в vars. Значения больше 5 ГБ ограничиваются 5 ГБ.
Настройки → Сайт → Медиафайлы и диалог загрузки показывают действующую границу. Изображения и все
пути, передающие файл целиком (API управления, плагины и прежние буферизованные форматы импорта), остаются в пределах
32 МиБ. Собственный формат переноса сайта и истории передаёт большие разрешённые файлы частями; см. Импорт и миграция.
Разворачивайте изменения
Заголовок раздела «Разворачивайте изменения»Установщик разворачивает всё один раз. После изменения кода или конфигурации разверните снова:
npm run deploy # admin UI, admin Worker, public read Worker and form intake Workernpm run healthdeploy отказывается работать без backend/wrangler.public.jsonc. Установка Dee Wan, которая намеренно
не отдаёт публичный контент, разворачивается командой npm run deploy -- --admin-only. См.
Развёртывание.
deploy также разворачивает backend/wrangler.intake.jsonc, если файл есть. Без него или с
--no-form-intake Worker приёма не разворачивается, и команда сообщает, что формы сайта не принимают
отправки. С неосновным админским конфигом укажите конфиг приёма через --intake-config <file>.
Формы сайта отправляют данные на /v1/interactions/form.submit на собственном хосте сайта. Маршрут
<host>/v1/interactions/* направляет эти отправки в Worker приёма; он точнее, чем маршрут публичного
API <host>/v1/*. При управляемом развёртывании система подключает его к каждому хосту сайта, когда служба
развёртывания запущена с MANAGED_RENDER_INTAKE_WORKER_SCRIPT, равным имени Worker приёма. Для любого
другого хоста сайта добавьте этот маршрут к Worker приёма сами. npm run provision:site также
привязывает базу данных каждого сайта к Worker приёма, если backend/wrangler.intake.jsonc существует.
Обновление
Заголовок раздела «Обновление»У Dee Wan ещё не было релиза. Команды миграции не обновляют базу данных, созданную по старой схеме разработки. Для этого случая см. До первого релиза. Пересоздание локальной базы удаляет её данные.
После первого релиза обновляйте установку между релизами командами из корня репозитория:
git pullnpm run submodules:sync # update packages/ to the new pinsnode scripts/install-dependencies.mjs # reinstall root and backend dependenciesnode scripts/install-dependencies.mjs frontend # reinstall admin UI dependenciesnpm run build:packages && npm run prisma:generate # rebuild the vendored packages and Prisma clientnpm run migrate:d1 # apply new migrations to the control databasenpm run tenant:upgrade # only if you used npm run provision:sitenpm run deploynpm run health- Явная пересборка подготавливает пакеты и клиент Prisma до миграции.
setup,deployиmigrate:d1тоже пересобирают отсутствующие или устаревшие результаты, сверяя отпечатки исходников и результатов сборки. migrate:d1перед запуском выводит конфигурацию и базу данных, которые собирается изменить. Добавьте-- --config <file>для установки Dee Wan, которая не используетbackend/wrangler.jsonc, и передайте тот же--config(вместе с--public-config) вdeploy.tenant:upgradeобновляет существующие базы данных отдельных сайтов. Сначала запуститеnpm run tenant:upgrade -- --plan, чтобы увидеть, чего не хватает каждому сайту, ничего не записывая.deployотказывается выкатывать админский Worker, пока у управляющей базы данных есть неприменённые миграции или когда он не может это определить, поэтому запуск доmigrate:d1останавливается, а не разворачивает новый код поверх старой схемы.--skip-migration-checkотменяет эту проверку. Используйте его, только если точно знаете, что новому коду не нужны неприменённые миграции.
Что делают команды миграции и как восстановиться после неудачной миграции, описано в разделе Миграции базы данных.
Начать заново или удалить установку Dee Wan
Заголовок раздела «Начать заново или удалить установку Dee Wan»npm run teardown удаляет то, что setup создал для установки Dee Wan. Без --apply это пробный прогон:
он перечисляет каждый ресурс, который удалил бы, и каждый ресурс, который сохранит, с причиной, и
ничего не меняет.
npm run teardown # dry run of the default installationnpm run teardown -- --apply # delete itКак выбрать установку Dee Wan
Заголовок раздела «Как выбрать установку Dee Wan»Без параметров teardown работает с установкой Dee Wan по умолчанию: backend/wrangler.jsonc вместе с
backend/wrangler.public.jsonc и backend/wrangler.intake.jsonc. Для другой установки Dee Wan укажите
её файлы конфигурации:
npm run teardown -- --config <admin config> --public-config <public config> --intake-config <intake config>Сопутствующая конфигурация, которую вы не назвали, считается отсутствующей. Teardown никогда не заимствует сопутствующие файлы установки Dee Wan по умолчанию.
Что он удаляет
Заголовок раздела «Что он удаляет»- админский Worker, публичный Worker чтения и Worker приёма форм вместе с их маршрутами и собственными доменами.
- проект Pages.
- базы данных D1.
- бакеты R2. Каждый сначала очищается, затем удаляется.
- приложение Access.
- DNS-записи и правила ограничения частоты, созданные setup.
- управляемые рендереры, записанные для выбранных сайтов.
Что он сохраняет
Заголовок раздела «Что он сохраняет»Setup сохраняет сведения об установке в файле .dee-wan-cms-install.<account>.json в корне репозитория.
Это тот же файл, что и журнал шагов. Teardown удаляет только ресурсы, которые, согласно записи,
создала эта установка Dee Wan и которые всё ещё соответствуют сохранённым идентификаторам. Он
перечисляет и сохраняет:
- ресурсы, которые setup нашёл уже существующими и принял, включая бакеты R2.
- ресурсы, изменившиеся после того, как setup их записал.
- ресурсы, создание которых setup не подтвердил, например после прерванного запуска. Повторный запуск setup подтверждает их.
- ресурсы, которые он не может прочитать. Teardown ничего не удаляет, пока они не ответят.
- базы данных D1 и бакеты R2, пока развёрнут хотя бы один Worker установки Dee Wan.
Teardown никогда не удаляет ваши локальные файлы конфигурации.
Удаление
Заголовок раздела «Удаление»С --apply вы выбираете, экспортировать ли сначала каждую базу данных D1 в локальный файл .sql.
Затем teardown называет аккаунт Cloudflare и спрашивает «да» или «нет». По умолчанию ответ «нет».
Без участия пользователя передайте --yes, а также --export-dir <directory> или
--skip-export. Без --yes такой запуск отвечает «нет» и ничего не удаляет.
Teardown удаляет в таком порядке: сначала маршруты, собственные домены, DNS-записи и приложение Access, затем Workers и проект Pages, затем бакеты R2 и базы данных D1. Каждое удаление он подтверждает, читая ресурс повторно.
Если что-то не удалось, запись об установке остаётся, и teardown перечисляет, что осталось. Устраните причину и запустите его снова. Запись удаляется, только когда исчезло всё, что в ней перечислено.
Запись об установке, созданная более старой версией установщика, отклоняется с сообщением. Перед запуском teardown переместите этот файл в сторону.
npm run install:cms -- teardown запускает тот же скрипт для выбранной конфигурации и аккаунта. Он
передаёт --apply, --yes, --public-config, --intake-config, --export-dir и
--skip-export.
Устранение неполадок
Заголовок раздела «Устранение неполадок»Начните с npm run doctor и npm run plan. doctor называет, чего не хватает и как это
исправить. plan показывает, какой шаг выполнен, остался, заблокирован или не определён, не
обращаясь к сети.
Сборка интерфейса управления падает, потому что не найден пакет или vite. Зависимости
интерфейса управления не установлены. Запустите node scripts/install-dependencies.mjs frontend.
Установщик сообщает, что DOMAIN задан, а DOMAIN_MODE нет. Домен без режима отклоняется, а
не считается собственным доменом. В vars в backend/wrangler.jsonc задайте
"DOMAIN_MODE": "custom", чтобы использовать этот домен, или "DOMAIN_MODE": "cloudflare" и
удалите DOMAIN. Затем запустите снова. Ничего не было создано.
Запуск остановился на полпути. Продолжите его командой npm run install:cms -- resume.
Выполненные шаги не повторяются. resume отказывает, если ещё
ничего не выполнено. В этом случае используйте apply.
Код выхода 4 (incomplete). Запуск не завершился ошибкой; его можно безопасно повторить с теми же параметрами. Прочитайте в выводе, что осталось, — обычно что-то, что нужно исправить в Cloudflare, — и продолжите.
Код выхода 3 (failed). Прочитайте вывод, устраните причину и запустите снова.
Код выхода 5 или шаг с отметкой ? (unresolved). Предыдущий запуск что-то запросил у
Cloudflare и так и не записал ответ, или запрос завершился ошибкой. Установщик проверяет аккаунт
перед повтором шага и отказывает, если не может определить результат. Посмотрите на названный
ресурс в своём аккаунте Cloudflare, разберитесь с ним и запустите снова.
Предварительная проверка не проходит. setup останавливается до того, как что-либо создано.
Исправьте строки с отметкой FAIL в отчёте и запустите снова.
Токен не удаётся проверить. Проверьте его права доступа, срок действия и то, что он охватывает аккаунт. Пока токен не пройдёт проверку, ничего не создаётся.
«the API token lacks Zone → WAF → Edit». Правило ограничения частоты пропущено. Установка
продолжается без него. Добавьте это право и снова запустите setup, если правило вам нужно.
Запуск без участия пользователя останавливается из-за отсутствующего ответа. Сообщение называет
настройку, которую нужно добавить в backend/wrangler.jsonc (или переменную окружения, которую
нужно экспортировать). Добавьте её и запустите снова. См.
Запуск без участия пользователя.
«Setup did not complete: this deployment has no way in.» Не удалось создать ссылку активации,
или не установлен секрет подписи сеансов. Задайте BOOTSTRAP_ADMIN_EMAIL в vars в
backend/wrangler.jsonc (ровно один адрес), устраните причину, названную в выводе, если она есть,
и снова запустите setup.
deploy отказывает из-за неприменённых миграций. Примените их командой npm run migrate:d1,
затем разверните снова. См. Обновление.
Ссылка активации истекла. Снова запустите установщик, чтобы создать новую. См. Активация установки.
Следующий шаг
Заголовок раздела «Следующий шаг»Откройте ссылку активации и настройте первого администратора.
Стабильная версия ещё не выпущена (pre-MVP)
Коммит исходного кода: e207e63239a627fbd2ae9c414ef7c6eb19fcfe5a (с локальными изменениями)
Дата сборки (UTC): 2026-10-21T09:28:24.214Z
Коммит для обновления: не определён: в рабочей копии есть изменения. Примечания к выпуску