АРХИТЕКТУРНЫЙ БЛОЧНЫЙ СКЕЛЕТ: AI-АГЕНТ → GITHUB → CLOUDFLARE

мультидоменные лендинги — комментарии сохранены из исходной схемы

БЛОК 6: КОМАНДНЫЙ СЛОЙ АГЕНТА (Hermes / OpenCode)
«создать лендинг X»
«поправить файл в лендинге Y»

токенов CF агент НЕ хранит
вызывает только GitHub-примитивы
БЛОК 5: ИСТОЧНИК (GitHub)
monorepo + matrix (10 лендингов в 1 репо)
• create_repository
• push_files / create_or_update_file
• Версионность + правки, независимость от локалки (ТГ-команды)
• Secrets (per env в monorepo):
  • CLOUDFLARE_API_TOKEN_<domain>
  • CLOUDFLARE_ACCOUNT_ID
  • PROJECT_NAME
push / workflow_dispatch
БЛОК 4: CI/CD ТРИГГЕР (GitHub Actions)
job: build → статические файлы лендинга
job: deploy → wrangler pages deploy
(Direct Upload, не Git-интеграция)
REST API вызовы с account-токеном
БЛОК 1: API-ТОКЕНЫ (ключевой узел прав)
ACCOUNT-ТОКЕН (общий)
scope: Account
perm: Cloudflare Pages: Edit
       Workers Scripts: Edit

⚠ видит ВСЕ Pages-проекты
аккаунта (нет per-project / per-domain scope у Pages)
ZONE-ТОКЕН (один на домен)
scope: Specific zone <domain>
perm: DNS Edit
       SSL/Certificates Edit

✓ видит ТОЛЬКО свою зону
(реально изолирован)
БЛОК 3: PAGES PROJECT (1..N)
landing-a   landing-b   landing-c
<p>.pages.dev на каждый

POST /accounts/{id}/pages/projects
POST .../deployments
GET .../upload-token (эфемерный)
БЛОК 3b: ZONE / DNS (1..N)
a.com   b.com   c.com
CNAME → Pages project

(создаётся автоматически
при добавлении custom domain)
БЛОК 3c: CUSTOM DOMAIN BINDING
Pages Project ↔ Zone
(домен обязан быть зоной в ТОМ ЖЕ аккаунте Cloudflare)
привязка через сам Pages-проект,
не через отдельный API-скоуп
БЛОК 2: GOVERNANCE / ЛИМИТЫ (верифицировано с докой CF)
• 1200 запросов / 5 мин на один токен
• до 500 account-level токенов, 50 user-level токенов
• Pages/Workers = account-scoped ресурсы, БЕЗ per-resource RBAC
• CI/CD-автоматизация через API-токены официально разрешена CF
БЛОК 0: ГРАНИЦА ИЗОЛЯЦИИ (организационный уровень)
Если нужна ПОЛНАЯ изоляция контента лендинга по домену:
→ единица изоляции = отдельный Cloudflare-аккаунт на клиента
   (а не токен, не проект — токен и проект изолировать нельзя)

Если изоляция нужна только на уровне DNS/SSL:
→ достаточно Zone-токена на каждый домен (Блок 1, правая часть)

solutions.dpdns.org — статическая публикация диаграммы • без хедера • комментарии из исходника сохранены