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

Установка 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.git
cd dee-wan
node scripts/install-dependencies.mjs
node 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.

Установщику нужен 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 prompt
export CLOUDFLARE_ACCOUNT_ID=… # skips the account picker

Учётные данные выбираются в следующем порядке: переменная, экспортированная в вашей оболочке, затем файл .env репозитория, затем значения в backend/wrangler.jsonc. Когда окружение переопределяет другое значение из конфигурации, установщик об этом сообщает.

Токен проверяется до того, как что-либо создаётся. Интерактивный запуск допускает три попытки. Неинтерактивный останавливается на первой неудаче. В любом случае, если токен не удаётся проверить, ресурсы Cloudflare не создаются.

Секреты приложения никогда не хранятся в wrangler.jsonc. См. Секреты.

Окно терминала
npm run setup

setup проводит вас через установку и сохраняет каждый ответ в backend/wrangler.jsonc по ходу дела, поэтому второй запуск не спрашивает снова. По порядку он:

  1. Находит или создаёт backend/wrangler.jsonc и определяет токен и аккаунт. Если токен даёт доступ к нескольким аккаунтам, спрашивает, какой использовать.
  2. Спрашивает, на каком тарифе D1 аккаунт (Free — 500 MB на базу данных. Paid — 10 GB на базу данных).
  3. Выполняет предварительную проверку и выводит отчёт. Если проверка не пройдена, останавливается до создания чего-либо («Setup stopped before creating any Cloudflare resources. Fix the FAIL rows above.»). Если ресурсы будут созданы или изменены, просит подтверждения.
  4. Спрашивает, где будет работать установка Dee Wan (на вашем собственном домене или на адресах, которые выдаёт Cloudflare), затем домен, поддомен админки (по умолчанию cms) и поддомен публичного API контента (по умолчанию content).
  5. Спрашивает, настраивать ли DNS, настраивать ли Cloudflare Access (по умолчанию нет) и устанавливать ли правило ограничения частоты запросов для публичного API (по умолчанию нет).
  6. Спрашивает имя проекта Pages и имя Worker.
  7. Спрашивает провайдера хранилища: Cloudflare R2 или Cloudflare Images. Для R2 создаёт бакет (по умолчанию dee-wan-cms-images), включает публичный доступ через управляемый адрес r2.dev или собственный домен для медиа и проверяет, что загруженные файлы действительно отдаются.
  8. Спрашивает, включить ли импорт данных, — это создаёт закрытый бакет R2 для загружаемых архивов (по умолчанию нет).
  9. Создаёт базу данных D1 и предлагает применить схему (по умолчанию да). Свежей установке не нужен отдельный шаг миграции.
  10. Собирает и разворачивает интерфейс управления, админский Worker, публичный Worker чтения и Worker приёма форм, сохраняет секреты Worker и подключает выбранные вами маршрут, DNS-записи и приложение Access. Он записывает backend/wrangler.public.jsonc и backend/wrangler.intake.jsonc, когда аккаунт, зона и id базы данных определены, и никогда не перезаписывает существующий файл.
  11. Предлагает запустить проверки работоспособности.
  12. Спрашивает 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 -- --json

plan показывает все шаги предстоящей установки и текущее состояние каждого из них. Он работает только с конфигурацией и журналом шагов на диске: не обращается к сети, ничего не создаёт и ничего не стоит. --json выводит машиночитаемый план с planVersion.

У каждого шага одно из этих состояний:

Отметка Состояние Значение
✓ done Записан как выполненный.
• to do Будет выполнен.
– not applicable Пропущен для этой конфигурации, с указанием причины.
✗ blocked Пока не может быть выполнен, например потому что не найден API-токен Cloudflare.
? unresolved Предыдущий запуск отправил запрос, но не сохранил ответ, либо запрос завершился ошибкой. Перед повтором apply проверяет аккаунт и останавливается, если результат нельзя установить достоверно.
↻ re-checked Проверка, которая выполняется при каждом apply.
Окно терминала
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

Имена ресурсов по умолчанию (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 Worker
npm run health

deploy отказывается работать без 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 pull
npm run submodules:sync # update packages/ to the new pins
node scripts/install-dependencies.mjs # reinstall root and backend dependencies
node scripts/install-dependencies.mjs frontend # reinstall admin UI dependencies
npm run build:packages && npm run prisma:generate # rebuild the vendored packages and Prisma client
npm run migrate:d1 # apply new migrations to the control database
npm run tenant:upgrade # only if you used npm run provision:site
npm run deploy
npm 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 отменяет эту проверку. Используйте его, только если точно знаете, что новому коду не нужны неприменённые миграции.

Что делают команды миграции и как восстановиться после неудачной миграции, описано в разделе Миграции базы данных.

npm run teardown удаляет то, что setup создал для установки Dee Wan. Без --apply это пробный прогон: он перечисляет каждый ресурс, который удалил бы, и каждый ресурс, который сохранит, с причиной, и ничего не меняет.

Окно терминала
npm run teardown # dry run of the default installation
npm run teardown -- --apply # delete it

Без параметров 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
Коммит для обновления: не определён: в рабочей копии есть изменения. Примечания к выпуску