Установка Dee Wan
Это руководство устанавливает Dee Wan CMS в ваш собственный аккаунт Cloudflare. Инсталляция — это админский Worker, публичный Worker чтения, интерфейс управления на Cloudflare Pages, одна управляющая база данных D1, хранилище медиа и учётные данные, на которых всё это держится. Она создаётся один раз, имеет одну ссылку активации и обслуживает много сайтов (см. словарь продукта).
Есть один движок установщика с двумя интерфейсами:
- веб-установщик — мастер из четырёх шагов, который запускается на вашей машине (
npm run install:web); - CLI-установщик:
npm run setupдля интерактивного запуска иnpm run install:cms <verb>для запланированных, возобновляемых и скриптуемых запусков.
Оба читают и пишут один и тот же файл конфигурации, backend/wrangler.jsonc, и один и тот же
журнал шагов, и оба выполняют один и тот же список шагов, который выводит npm run plan.
Dee Wan 1.0 ещё не выпущен. Установка в реальный Cloudflare — один из критериев приёмки, которые остаются открытыми. Что входит и что не входит в продукт, описано в границе продукта 1.0.
Перед началом
Заголовок раздела «Перед началом»Что понадобится
Заголовок раздела «Что понадобится»- Аккаунт Cloudflare с Workers, D1, Pages и R2 или Cloudflare Images.
- Node.js 22.14 или новее в линейке 22 либо 24.10 или новее в линейке 24. В репозитории есть
.nvmrc(24.18.1), поэтомуnvm useвыбирает нужную версию. - npm ровно той версии, которую объявляет
package.json(11.16.0), — это npm, который поставляется с Node из.nvmrc. - Git, чтобы клонировать репозиторий вместе с сабмодулями.
- По желанию — собственный домен. Чтобы его использовать, домен должен быть зоной в том же
аккаунте Cloudflare. Без него инсталляция использует адреса, которые выдаёт Cloudflare
(
pages.devиworkers.dev). - По желанию — API-ключ DeepInfra, если вам нужны функции ИИ. Он добавляется после установки.
Cloudflare Access (Zero Trust) не обязателен. Оба установщика предлагают его как дополнительный периметр перед админкой, и он выключен, пока вы его не включите.
Получите код и установите зависимости
Заголовок раздела «Получите код и установите зависимости»git clone --recurse-submodules <repository-url> dee-wan-cmscd dee-wan-cmsnode scripts/install-dependencies.mjsВсегда устанавливайте зависимости через 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 на админском и публичном Workers. |
| Подключить маршрут Worker | Маршрут 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-установщик | |
|---|---|---|
| Запуск | npm run install:web |
npm run setup или npm run install:cms -- <verb> |
| Интерфейс | Страница в браузере на 127.0.0.1, которую отдаёт ваша машина |
Вопросы в терминале или без вопросов с --yes |
| Учётные данные Cloudflare | Вход через Cloudflare (OAuth), хранится в памяти на время сеанса | API-токен, который вы создаёте, из окружения, .env или по запросу |
| Требуется | Приложение Cloudflare OAuth, настроенное для этой сборки (см. ниже) | API-токен Cloudflare с перечисленными правами |
| Планирование и скрипты | Показывает, что будет создано, до установки | plan, вывод --json и фиксированные коды выхода |
| Возобновление после остановки | Кнопка Продолжить | npm run install:cms -- resume или повторный запуск setup |
Для входа через Cloudflare в веб-установщике нужно зарегистрированное приложение Cloudflare OAuth.
Установщик читает его client id из DEEWAN_CF_OAUTH_CLIENT_ID. Dee Wan 1.0 не поставляется с
зарегистрированным приложением, поэтому, если у вас его нет и эта переменная не задана, шаг
Cloudflare показывает «Вход через Cloudflare нужно настроить.» и предлагает вместо этого запустить
CLI-установщик. Пройти мастер всё равно можно с помощью npm run install:web:dry-run — он ничего
не затрагивает.
Веб-установщик
Заголовок раздела «Веб-установщик»npm run install:webСервер слушает только 127.0.0.1, на порту 8976, если не задан DEEWAN_INSTALL_PORT. Он
выводит одну ссылку:
Dee Wan installerOpen this link. It is bound to this session and is not written to disk:
http://127.0.0.1:8976/?t=<session-token>Токен в ссылке генерируется для этого запуска. Каждый запрос должен его содержать, поэтому другая страница или программа на той же машине не может управлять установщиком. Запрос без токена получает «This installer is bound to one session. Open the link printed in the terminal.» Когда закончите, нажмите Ctrl-C в терминале.
После входа Cloudflare возвращает браузер на http://127.0.0.1:<port>/oauth/cloudflare, и этот
адрес должен в точности совпадать с адресом, зарегистрированным в приложении OAuth.
DEEWAN_CF_OAUTH_REDIRECT его переопределяет.
На странице есть селектор Язык с английским, тайским, русским, испанским, французским и немецким. Язык, на котором вы устанавливаете, также становится языком по умолчанию первого сайта.
В мастере четыре шага: Сайт, Cloudflare, Администратор и Установка. Продолжить сохраняет текущий шаг перед переходом дальше, а Назад возвращает к предыдущему.
Шаг 1: Сайт
Заголовок раздела «Шаг 1: Сайт»
У вопроса Где это будет жить? два ответа:
- На моём собственном домене: введите его в поле Ваш домен, например
example.com. - На адресах, которые выдаёт Cloudflare: оставьте домен пустым.
Больше здесь ничего не спрашивается. У имён инфраструктуры и необязательных функций есть рабочие значения по умолчанию, и они находятся на шаге «Установка».
Шаг 2: Cloudflare
Заголовок раздела «Шаг 2: Cloudflare»
- В разделе Подключить Cloudflare выберите Авторизовать Cloudflare. Cloudflare откроется в новой вкладке. Пока у вас есть несохранённые изменения, ссылка отключена («Сохраните настройки перед подключением.»).
- Подтвердите запрос. Вкладка покажет Connected и сообщит, что установщик хранит учётные данные Cloudflare только на этот сеанс. Закройте её и вернитесь в установщик, где карточка показывает Подключено только для этого сеанса.
- Выберите аккаунт в разделе Какой аккаунт Cloudflare и нажмите Использовать этот аккаунт. Если ваш вход даёт доступ только к одному аккаунту, он выбирается за вас. Всё, что создаёт инсталляция, оплачивается с этого аккаунта.
- Выберите Тариф базы данных D1: Бесплатный или Платный. Cloudflare не даёт способа узнать, какой тариф у аккаунта, а два тарифа допускают разный объём хранимого контента, поэтому установщик спрашивает, а не угадывает.
Какие права запрашиваются? перечисляет точные области доступа Cloudflare, которые запрашивает вход. Они зависят от ваших ответов:
| Когда | Области доступа |
|---|---|
| Всегда | account-settings.read, d1.write, workers-scripts.write, page.write, workers-r2.write |
| С собственным доменом | zone.read, workers-routes.write |
| С собственным доменом и включённой настройкой DNS | dns.write |
| С включённым Cloudflare Access | access.write, access-acct.read, access-service-token.write |
Если позже вы измените настройку, которая меняет нужный доступ, установщик сбросит старую авторизацию и сообщит «Сохранено. Это меняет требуемый доступ, поэтому подключите Cloudflare заново.»
«Продолжить» не срабатывает, пока Cloudflare не подключён и аккаунт не выбран.
Учётные данные хранятся в памяти установщика и не записываются на диск. Если срок их действия истечёт, страница сообщит «Подключение истекло. Подключитесь снова.» Повторная авторизация не затрагивает ничего из уже созданного.
Шаг 3: Администратор
Заголовок раздела «Шаг 3: Администратор»Введите одну Электронную почту администратора. Первая ссылка для входа (ссылка активации) привязывается к этому адресу, и только этот адрес может активировать инсталляцию.
Шаг 4: Установка
Заголовок раздела «Шаг 4: Установка»
Проверка перечисляет принятые вами решения: адрес, Планируемый адрес входа, Планируемый адрес сайта, аккаунт Cloudflare, тариф базы данных D1 и администратора. Будет создано перечисляет каждый шаг, который что-то создаст и ещё не выполнен.
Настроить инфраструктуру открывает остальные настройки:
| Настройка | По умолчанию |
|---|---|
| Где вы входите (поддомен админки) | cms |
| Откуда читает ваш сайт (поддомен публичного API) | content |
| Направить ваш домен на эту установку | Включено. Нужен собственный домен. |
| Спрашивать вход Cloudflare перед панелью управления (Cloudflare Access) | Выключено. Нужен собственный домен. |
| Ограничить, как часто один посетитель читает ваш контент | Выключено. Нужен собственный домен. |
| Имя службы (админский Worker) | dee-wan-cms-backend |
| Имя проекта (проект Pages) | dee-wan-cms |
| Ваш поддомен workers.dev | Пусто. Используется для адреса публичного API, если у вас нет домена. |
| Сколько секунд хранить ответы сайта | 0 — каждый читатель видит самый свежий контент |
| Также подготовить хранилище для переноса содержимого из другой системы | Выключено |
Админке и сайту нужны разные поддомены. Если вы включаете Access, обратите внимание на два предупреждения на странице: каждому, кого вы приглашаете, также нужна запись в политике Cloudflare Access, а если приложение Access удалено или настроено неправильно, доступ теряют все. Ограничение для посетителей действует и на приватные чтения, включая сборку сайта, которая читает с одного IP-адреса.
В проверке также сказано, что отчёты об ошибках отправляются в проект Sentry команды Dee Wan (тип
ошибки, очищенное сообщение, стек вызовов и маршрут; никогда — контент, значения форм, адреса
электронной почты или учётные данные). Позже это можно выключить в Settings → Integrations → Error
reports или задав переменной Worker DEEWAN_ERROR_REPORTING значение off.
Если вы меняете настройку на этом шаге, основная кнопка становится Сохранить изменения. Когда всё сохранено, выберите Установить.
Установщик отказывается начинать запуск с настройками, которые вы не проверили. Если файл конфигурации изменился, пока страница была открыта, он сообщает «Настройки изменились, пока страница была открыта. Ничего не запущено. Проверьте их и повторите.»
Что записывает веб-установщик
Заголовок раздела «Что записывает веб-установщик»Каждое сохранение записывает ваши ответы в backend/wrangler.jsonc (или в файл, указанный через
--config) и сохраняет комментарии в нём. Если файла нет, создаётся новый. Выбор аккаунта
записывает account_id. Файл находится в gitignore, потому что содержит ваши реальные значения.
Веб-установщик не умеет редактировать конфигурацию wrangler.toml; переведите её в
wrangler.jsonc или используйте CLI-установщик.
Сам запуск установки — это движок командной строки: страница запускает install:cms apply (или
resume) с --yes, передавая учётные данные Cloudflare из вашего входа. Он делает всё, что делает
npm run setup, включая запись backend/wrangler.public.jsonc для публичного Worker чтения.
Наблюдение за запуском, повтор и возобновление
Заголовок раздела «Наблюдение за запуском, повтор и возобновление»Панель рядом с мастером показывает Что будет сделано до запуска, Ход выполнения во время него и Что сделано по завершении. Технические подробности показывают журнал установщика с удалёнными учётными данными.
Пока идёт запуск, страница продолжает опрашивать установщик. Если перезагрузить её, она вернётся к запуску. Если она теряет связь с установщиком, то сообщает «Связь с установщиком потеряна. Он может продолжать работу — перезагрузите страницу.»
Если запуск остановился, панель сообщает, где («Остановлено на шаге: …»), и что делать дальше:
- Если какие-то шаги были выполнены: «Прогресс сохранён. Продолжите, когда будете готовы.» Выберите Продолжить. Выполненные шаги не повторяются.
- Если ничего не было создано: «Ничего не создано. Запустите установку снова, когда будете готовы.» Выберите Установить.
Запуск, который завершился с оставшейся работой (код выхода 4, incomplete), отображается как «Не завершено», а не как успех. Проверьте журнал, исправьте то, что в нём названо, и продолжите.
Когда установка завершена
Заголовок раздела «Когда установка завершена»
Панель перечисляет Worker, адрес админки и адрес публичного API, которые ответили, а страница показывает Создать администратора. Кнопка открывает ссылку активации в новой вкладке, где вы задаёте пароль. См. Активация инсталляции.
Ссылка активации никогда не показывается в журнале. Страница предлагает её через эту кнопку, только пока ссылка действительна, и только один раз.
Предпросмотр мастера без обращения к Cloudflare
Заголовок раздела «Предпросмотр мастера без обращения к Cloudflare»npm run install:web:dry-runЭта команда отдаёт ту же страницу для ознакомления, заменяя каждое внешнее действие. Конфигурация и
журнал шагов находятся во временной папке, которая удаляется по Ctrl-C, поиск аккаунтов и запуск
установки разыграны по сценарию, и ничего не доходит до Cloudflare. Сервер слушает порт 8978, если
не задан DEEWAN_INSTALL_PORT. Вход завершается, когда вы открываете ссылку для входа, выведенную
при старте; не нажимайте Авторизовать Cloudflare — эта кнопка открывает Cloudflare с
client id-заглушкой.
CLI-установщик
Заголовок раздела «CLI-установщик»Учётные данные
Заголовок раздела «Учётные данные»CLI-установщику нужен API-токен Cloudflare. npm run setup запрашивает его, если токен не задан,
и выводит права доступа с причиной для каждого, а также ссылку на редактор токенов Cloudflare, в
котором они уже выбраны. Он также просит включить все аккаунты и зоны.
| Право доступа | Зачем |
|---|---|
| Account · Account Settings · Read | Найти аккаунт, которому принадлежат ресурсы. |
| Account · D1 · Edit | Создать базу данных и применить миграции. |
| Account · Workers Scripts · Edit | Развернуть Worker API. |
| Account · Cloudflare Pages · Edit | Создать и развернуть проект интерфейса управления. |
| Account · Workers R2 Storage · Edit | Создать бакет для медиа. |
| Account · Access: Service Tokens · Edit | Выпустить сервисный токен, который используют Workers. |
| Account · Zero Trust · Edit | Создать приложение Access, которое защищает админку. |
| Zone · Zone · Read | Определить зону, к которой относится ваш домен. |
| Zone · DNS · Edit | Направить имя хоста на Worker. |
| Zone · Workers Routes · Edit | Направить маршрут имени хоста на Worker. |
| User · API Tokens · Edit | Проверить сам токен. |
| Zone · WAF · Edit (optional) | Установить правила ограничения частоты для аутентификации и, по желанию, для публичного API. |
npm run doctor выводит тот же список, если токена нет или ему не хватает права доступа. Оба
списка берутся из scripts/cloudflare-token-scopes.ts, поэтому токен, собранный по тому, что
просит doctor, принимается setup. Если вы используете 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.»). Если ресурсы будут созданы или изменены, просит подтверждения.
- Спрашивает, где будет работать инсталляция (на вашем собственном домене или на адресах, которые
выдаёт 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 и подключает выбранные вами маршрут, DNS-записи и приложение Access.
Он записывает
backend/wrangler.public.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> |
С какой инсталляцией работать. По умолчанию 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 каждый вопрос получает ответ по умолчанию.
Вопрос без безопасного значения по умолчанию превращается в ошибку, которая называет настройку,
которую нужно добавить, вместо догадки:
- Где будет работать инсталляция: задайте
"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 и так далее) фиксированы,
поэтому две инсталляции в одном аккаунте Cloudflare конфликтуют. Задайте DEEWAN_RESOURCE_PREFIX,
чтобы вынести в отдельное пространство имён каждый ресурс, который создаёт запуск:
DEEWAN_RESOURCE_PREFIX=test-a1b2 npm run setup # creates test-a1b2-dee-wan-cms-db, …DEEWAN_RESOURCE_PREFIX=test-a1b2 npm run teardown # dry run; only touches test-a1b2-*Префикс должен состоять из строчных букв, цифр и дефисов, начинаться с буквы или цифры и быть не
длиннее 24 символов. Когда он задан, teardown пропускает и перечисляет в отчёте любой ресурс, в
имени которого его нет.
Задавайте его для новой инсталляции, а не для существующей. Wrangler находит базу данных D1 по имени
в backend/wrangler.jsonc, поэтому префикс работает только после того, как setup записал имена с
префиксом в этот файл. См. Запуск установщика на общем аккаунте.
После установки
Заголовок раздела «После установки»Активация инсталляции
Заголовок раздела «Активация инсталляции»Пока инсталляция не активирована, аккаунта нет ни у кого. Установщик выпускает одноразовую ссылку активации, привязанную к email администратора:
- веб-установщик предлагает её через Создать администратора;
npm run setupвыводит её один раз вместе с адресом, которому она принадлежит, и сроком действия.
Откройте её и задайте пароль длиной не менее 12 символов. Это создаст суперадминистратора, и вы войдёте в систему. Ссылка истекает через 15 минут и показывается ровно один раз; хранится только её хеш, поэтому вывести её снова нельзя.
Если ссылка истекла до того, как ею кто-то воспользовался, снова запустите установщик
(Продолжить в веб-установщике, npm run install:cms -- resume или npm run setup). Истёкшая
ссылка активации считается невыполненным шагом, поэтому запуск выпустит новую, пока инсталляция не
активирована.
npm run claim:link -- --remote --email <address> — аварийный путь на будущее: он выпускает ссылку
для задания пароля только для единственного активного суперадминистратора. Создать первого
администратора он не может. См.
Вход и восстановление доступа.
Проверьте, что всё работает
Заголовок раздела «Проверьте, что всё работает»npm run healthвыполняет проверки после развёртывания по развёрнутым адресам. Если включён Access, он также проверяет периметр.npm run verify -- --read-only --public <public-api-url>проверяет развёртывание, ничего не записывая. Добавьте--model <slug>, чтобы прочитать одну опубликованную модель.npm run verifyбез--read-onlyсоздаёт сайт, модель и контент. Используйте его только на одноразовом развёртывании.npm run doctor— предварительная проверка только для чтения, которая называет всё, чего не хватает, и как это исправить.npm run planдолжен сообщать, что делать больше нечего.
Добавьте секреты для необязательных функций
Заголовок раздела «Добавьте секреты для необязательных функций»Секреты задаются через wrangler secret put из каталога backend/, никогда не в файле. Например,
функциям ИИ нужен ключ DeepInfra:
npx wrangler secret put DEEPINFRA_API_KEYПолный список — в разделе Секреты.
Разворачивайте обновления и применяйте миграции
Заголовок раздела «Разворачивайте обновления и применяйте миграции»Установщик разворачивает всё один раз. После изменения кода или конфигурации разверните снова:
npm run deploy # admin Worker, admin UI and the public read Workernpm run healthdeploy отказывается работать без backend/wrangler.public.jsonc. Инсталляция, которая намеренно
не отдаёт публичный контент, разворачивается командой npm run deploy -- --admin-only. См.
Развёртывание.
Когда в более позднем релизе появятся миграции базы данных, примените их командой
npm run migrate:d1. См. Миграции базы данных.
Начать заново или удалить инсталляцию
Заголовок раздела «Начать заново или удалить инсталляцию»npm run teardown удаляет ресурсы, названные в конфигурации инсталляции: Workers, проект Pages,
базы данных D1, бакеты R2, приложение Access и DNS-записи. Это пробный прогон, если вы не передадите
--apply.
npm run teardown -- --config backend/wrangler.jsonc # list what would be deletednpm run teardown -- --config backend/wrangler.jsonc --apply # delete it- Без
--configteardownотказывает, если не заданDEEWAN_RESOURCE_PREFIX, поэтому он никогда случайно не нацелится на инсталляцию по умолчанию. - Перед удалением чего-либо перечисляется каждый ресурс. Ресурсы, которые существуют, но не названы в конфигурации, попадают в отчёт и пропускаются.
- Перед удалением баз данных D1 он предлагает экспортировать каждую в локальный файл
.sql(по умолчанию да). Если запрошенный вами экспорт не удался, ничего не удаляется. - Для подтверждения вы вводите имя аккаунта Cloudflare.
- Без участия пользователя (
--yesилиCI=true) нужно передать--export-dir <directory>или--skip-export, а также--confirm-account <name>. - После этого в
backend/wrangler.jsoncостаются старые идентификаторы. Удалите файл перед повторной установкой.
npm run install:cms -- teardown запускает тот же скрипт для выбранной конфигурации и аккаунта и
передаёт только --apply и --yes. Для параметров запуска без участия пользователя, описанных
выше, запускайте npm run teardown напрямую.
Устранение неполадок
Заголовок раздела «Устранение неполадок»Начните с npm run doctor и npm run plan. doctor называет, чего не хватает и как это
исправить. plan показывает, какой шаг выполнен, остался, заблокирован или не определён, не
обращаясь к сети.
Веб-установщик сообщает, что порт занят. Порт слушает другой процесс, часто второй
установщик. Закройте его или задайте в DEEWAN_INSTALL_PORT свободный порт. Ни в одном аккаунте
ничего не создано. Если вы используете приложение Cloudflare OAuth, его зарегистрированный адрес
перенаправления должен соответствовать новому порту.
Страница сообщает «This installer is bound to one session.» Откройте ровно ту ссылку, которая выведена в терминале. Перезапущенный установщик выводит новую ссылку.
Шаг Cloudflare сообщает «Вход через Cloudflare нужно настроить.» В этой сборке нет приложения
Cloudflare OAuth (DEEWAN_CF_OAUTH_CLIENT_ID не задан). Используйте CLI-установщик с API-токеном.
Веб-установщик не может прочитать или отредактировать конфигурацию. Он редактирует только
wrangler.jsonc. Исправьте backend/wrangler.jsonc, если он повреждён, или переведите
wrangler.toml в wrangler.jsonc, затем перезагрузите страницу.
Запуск остановился на полпути. Продолжите его: Продолжить в веб-установщике или
npm run install:cms -- resume. Выполненные шаги не повторяются. resume отказывает, если ещё
ничего не выполнено; в этом случае используйте apply.
Код выхода 4 (incomplete). Запуск не сломался, и его можно безопасно повторить как есть. Прочитайте в выводе, что осталось, — обычно что-то, что нужно исправить в Cloudflare, — и продолжите.
Код выхода 3 (failed). Прочитайте вывод, устраните причину и запустите снова.
Код выхода 5 или шаг с отметкой ? (unresolved). Предыдущий запуск что-то запросил у
Cloudflare и так и не записал ответ, или запрос завершился ошибкой. Установщик проверяет аккаунт
перед повтором шага и отказывает, если не может определить результат. Посмотрите на названный
ресурс в своём аккаунте Cloudflare, разберитесь с ним и запустите снова.
Предварительная проверка не проходит. setup останавливается до того, как что-либо создано.
Исправьте строки с отметкой FAIL в отчёте и запустите снова.
Токен не удаётся проверить. Проверьте его права доступа, срок действия и то, что он охватывает аккаунт. Пока токен не пройдёт проверку, ничего не создаётся.
Запуск без участия пользователя останавливается из-за отсутствующего ответа. Сообщение называет
настройку, которую нужно добавить в backend/wrangler.jsonc (или переменную окружения, которую
нужно экспортировать). Добавьте её и запустите снова. См.
Запуск без участия пользователя.
«Setup did not complete: this deployment has no way in.» Не удалось выпустить ссылку активации,
или не установлен секрет подписи сеансов. Задайте BOOTSTRAP_ADMIN_EMAIL в vars в
backend/wrangler.jsonc (ровно один адрес), устраните причину, названную в выводе, если она есть,
и снова запустите setup.
Ссылка активации истекла. Снова запустите установщик, чтобы выпустить новую. См. Активация инсталляции.