Cloudflare Pages — сервис для сборки и размещения статических сайтов. Он подключается к GitHub или GitLab, автоматически собирает и разворачивает изменения и создаёт отдельные preview-деплои для остальных веток. Готовые файлы также можно загружать напрямую через Wrangler.
Материал пригодится владельцу существующего Pages-проекта или разработчику, которому подходит этот процесс сборки. Понадобятся права на репозиторий, понятная команда сборки и папка результата. Для нового проекта Cloudflare рекомендует начать с Workers Static Assets; Pages продолжает обслуживать существующие проекты. Это рекомендация платформы, а не объявление о закрытии Pages. Текущая позиция Cloudflare.
Оглавление
Что такое Cloudflare Pages
Cloudflare Pages принимает исходный код из Git-репозитория или готовую папку со статическими файлами, а затем размещает результат в глобальной сети Cloudflare. Для Git-проекта сервис запускает новую сборку при каждом разрешённом изменении репозитория.
Фреймворк использовать необязательно. Можно развернуть обычные HTML-, CSS- и JavaScript-файлы либо проект, для которого команда сборки создаёт отдельную выходную папку.
Статические запросы, которые не вызывают Pages Functions, бесплатны и не ограничиваются по количеству на Free и платных планах. Серверный код учитывается отдельно по правилам Cloudflare Workers.
Основные возможности
| Возможность | Что даёт |
| Git-интеграция | Автоматические сборки и деплои из публичных и приватных репозиториев GitHub или GitLab |
| Production branch | Выбранная ветка используется для рабочей версии сайта; обычно это main или master |
| Preview-деплои | Остальные ветки получают отдельные версии сайта для проверки изменений |
| Настройки сборки | Можно указать команду сборки, выходную и корневую папки проекта |
| Переменные окружения | Значения для сборки задаются при настройке проекта и изменяются после первой сборки |
| Direct Upload | Готовые файлы загружаются через Wrangler или перетаскиванием в панели Cloudflare |
| Pages Functions | Серверная логика выполняется на Cloudflare Workers и использует квоту соответствующего Workers-плана |
| Пользовательский домен | На Free-плане к одному Pages-проекту можно подключить до 100 доменов |
Деплой из GitHub или GitLab
1. Подготовьте репозиторий
В репозитории должна находиться статика либо проект с рабочей командой сборки. Перед подключением отправьте в репозиторий хотя бы одну ветку: иначе её нельзя будет выбрать как production branch.
2. Подключите Git-провайдера
- Откройте Workers & Pages в панели Cloudflare.
- Выберите Create application → Pages → Connect to Git.
- Войдите через GitHub или GitLab.
- Предоставьте Cloudflare доступ к нужному репозиторию.
- Выберите репозиторий и перейдите к настройке проекта.
Для GitLab требуется роль Maintainer или выше. Авторизация GitLab предоставляет Pages доступ ко всем репозиториям аккаунта; в многопользовательском аккаунте Cloudflare другие его участники также смогут разворачивать доступные репозитории.
3. Настройте сборку
| Параметр | Что указать |
| Production branch | Ветку рабочей версии сайта, обычно main или master |
| Build command | Команду, которую предоставляет выбранный фреймворк |
| Build output directory | Папку с файлами, которые нужно опубликовать |
| Root directory | Папку проекта внутри репозитория, если код находится не в корне |
| Environment variables | Переменные, необходимые во время сборки |
В панели есть готовые настройки для ряда фреймворков. Например, для Gatsby официальная документация приводит команду gatsby build. Точные значения для остальных инструментов лучше брать из актуального руководства конкретного фреймворка.
Если сборка не нужна, оставьте поле Build command пустым. Cloudflare считает корень репозитория рабочей папкой, пока вы не зададите другой путь в Root directory.
4. Запустите первый деплой
Нажмите Save and Deploy. В журнале будет видно, как Cloudflare устанавливает зависимости, собирает проект и размещает выходную папку. После успешного завершения сервис покажет уникальный адрес сайта на поддомене pages.dev.
5. Проверьте результат
Откройте полученный URL и убедитесь, что:
- главная страница загружается;
- стили, скрипты и изображения доступны;
- в проекте отображаются успешный статус деплоя и связанный коммит;
- новое изменение production-ветки запускает следующую сборку, если автоматические деплои включены.
Если сразу после первого деплоя возникает ошибка DNS, документация Cloudflare рекомендует дождаться распространения записи или проверить адрес через другую сеть.
Direct Upload без Git-интеграции
Direct Upload подходит, когда проект собирается локально или в собственной системе CI/CD. До загрузки нужно самостоятельно выполнить команду сборки и подготовить папку с готовыми файлами.
Загрузка через Wrangler
Используйте поддерживаемую LTS-версию Node.js ≥22: этого требует проверенный Wrangler 4.147.0. Сначала выполните сборку локально и убедитесь, что dist/index.html и ресурсы существуют. Если проект выдаёт другую папку, замените ./dist на её путь. Команды login, создания проекта и deploy ниже обращаются к аккаунту Cloudflare; они нужны только при готовности публиковать выбранный проект.
# Авторизация
npx wrangler login
# Создание Pages-проекта
npx wrangler pages project create
# Загрузка готовых файлов
npx wrangler pages deploy ./distWrangler запросит название проекта и production branch. Для preview-окружения укажите ветку:
npx wrangler pages deploy ./dist --branch=stagingПолучить список проектов и уникальных preview-URL можно командами:
npx wrangler pages project list --json
npx wrangler pages deployment listWrangler принимает одну папку с файлами, но не ZIP-архив. Загрузка перетаскиванием в панели принимает папку или ZIP.
Папка functions при Direct Upload компилируется только при загрузке через Wrangler. Перетаскивание в панели её не поддерживает; файл _worker.js поддерживается обоими способами.
Preview-деплои
В Git-интегрированном проекте production branch создаёт рабочую версию сайта, а остальные ветки используются для preview-деплоев. Cloudflare также может добавлять сведения о preview-деплое в запрос на слияние (pull request).
Preview-адреса по умолчанию публичны. Заголовок X-Robots-Tag: noindex исключает их из поискового индекса, но не ограничивает доступ. Для закрытого просмотра включите Cloudflare Access и проверьте его в чистом сеансе браузера. Этот переключатель защищает preview, а не автоматически основной pages.dev и пользовательский домен.
Хеш-адрес относится к отдельному деплою; адрес вида staging.project.pages.dev — изменяемый псевдоним ветки, который указывает на её последний деплой.
Количество одновременно активных preview-деплоев для проекта не ограничено. Для Direct Upload preview можно создать через флаг --branch или выбрать preview-окружение при загрузке из панели.
Preview полезен, чтобы проверить сборку и показать изменения до объединения ветки. Успешная проверка означает, что отдельный preview-URL открывается и соответствует нужной ветке или коммиту.
Pages Functions
Pages Functions добавляет серверную обработку к сайту и работает на платформе Cloudflare Workers. Вызовы функций расходуют общую квоту Workers-плана аккаунта, включая обращения функции к KV и Durable Objects.
На Workers Free доступно 100 000 запросов в сутки. Это общая квота: например, 50 000 запросов Pages Functions и 50 000 других Workers-запросов исчерпают дневной лимит. Квота сбрасывается в полночь по UTC.
Запрос считается статическим и остаётся бесплатным и неограниченным только тогда, когда он не вызывает Function. Поэтому маршруты функций следует настраивать так, чтобы обычные файлы не попадали в серверную обработку без необходимости.
Лимиты
Значения из официальной документации, сверенные 3 октября 2026 года:
| Параметр | Free | Pro | Business |
| Одновременные сборки | 1 | 5 | 20 |
| Сборки в месяц | 500 | 5 000 | 20 000 |
| Домены на проект | 100 | 250 | 500 |
| Файлы на сайт | 20 000 | 100 000 | 100 000 |
| Размер одного файла | 25 MiB | 25 MiB | 25 MiB |
Для лимита 100 000 файлов на платном плане требуется переменная PAGES_WRANGLER_MAJOR_VERSION=4. Одна сборка завершается по тайм-ауту через 20 минут, а параллельные сборки считаются на уровне аккаунта.
Дополнительные ограничения:
- до 100 Pages-проектов на аккаунт;
- до 1 000 файлов при Direct Upload перетаскиванием;
- до 20 000 файлов при загрузке через Wrangler на Free;
- неограниченное количество активных preview-деплоев;
- до 100 правил в файле
_headers; - до 2 000 статических и 100 динамических правил в
_redirects.
Для файлов крупнее 25 MiB Cloudflare рекомендует использовать R2. Лимиты могут меняться, поэтому перед миграцией большого проекта проверьте официальную страницу.
Полезные сценарии
Статический сайт из GitHub
Задача: разместить статический сайт с автоматическим обновлением из репозитория. Исходные данные — репозиторий с готовой статикой или проектом, создающим выходную папку. Подключите репозиторий, задайте production branch и параметры сборки. Результат проверяется по успешному статусу деплоя, связанному коммиту и рабочему адресу pages.dev. До изменения сохраните адрес предыдущего production-деплоя; для возврата используйте штатный rollback к проверенной версии. Preview не меняет основной сайт.
Сценарий не подходит без дополнительной архитектуры, если приложению нужен отдельный серверный процесс, который нельзя реализовать через Pages Functions или Workers.
Предпросмотр изменений до объединения ветки
Задача: проверить изменения до их объединения с production-веткой. Создайте отдельную ветку и запрос на слияние (pull request). Pages соберёт preview-версию, которую можно проверить и передать коллегам. Наблюдаемый результат — отдельный URL с содержимым выбранной ветки.
Учитывайте месячный лимит сборок: частые изменения во множестве веток увеличивают число сборок.
Деплой из собственной системы CI/CD
Задача: самостоятельно выбирать момент развёртывания и среду сборки. Соберите проект в своей системе непрерывной интеграции и доставки (CI/CD) и передайте выходную папку через npx wrangler pages deploy ./dist. Этот вариант позволяет самостоятельно выбирать инструменты и момент развёртывания. Успех подтверждается записью в списке деплоев и доступностью опубликованной версии.
Тип проекта следует выбрать заранее: Direct Upload впоследствии нельзя преобразовать в Git-интегрированный проект.
Статический сайт с небольшим API
Задача: разместить интерфейс и несколько серверных маршрутов. Разместите интерфейс как статические файлы, а серверные маршруты реализуйте через Pages Functions. Проверьте статические страницы и каждый маршрут функции отдельно. Следите за общей дневной квотой Workers Free и не направляйте все запросы через функцию без необходимости.
Проверка результата и частые ошибки
Сборка завершается с ошибкой
Откройте журнал конкретного деплоя и проверьте команду сборки, выходную и корневую папки, зависимости и переменные окружения. Запустите ту же сборку локально до повторного деплоя.
Сайт открывается, но файлов нет
Чаще всего указана неверная выходная папка. Убедитесь, что после сборки она существует и содержит главную страницу и остальные ресурсы.
Репозиторий или production branch нельзя выбрать
Проверьте разрешения Git-провайдера и наличие хотя бы одной отправленной ветки. Для GitLab у подключающего пользователя должна быть роль Maintainer или выше.
Functions отсутствуют после Direct Upload
Используйте Wrangler и запускайте команду из папки, рядом с которой находится каталог functions. Загрузка перетаскиванием этот каталог не компилирует.
Деплои не запускаются автоматически
Проверьте Git-конфигурацию и настройки автоматических деплоев веток. Если они были отключены, отправляйте версию вручную через Wrangler либо снова разрешите автоматическую сборку.
Официальные источники
Следующий шаг
Для подключения собственного домена и дальнейшего обслуживания сайта откройте Домен, почта, редиректы и обновление сайта.
При выборе размещения сначала определите, что собирает сайт, какая папка публикуется и нужен ли серверный код.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov


