Суть урока
Представь: ты построил механического почтальона, который отлично работает у тебя дома. Теперь нужно отправить его работать самостоятельно — в офис, где он будет приходить каждый день в 9 утра, независимо от тебя. Деплой (развёртывание) — это именно это: перенос твоей автоматизации из "работает на моём компьютере" в "работает всегда, в облаке, без меня".
Ключевые концепции
- Разница между локальным запуском и деплоем в облако
- Cloudflare Workers как edge-платформа (вычисления на ближайших к пользователю серверах) для автоматизаций 24/7
- Детерминированность деплоя: код работает точно, без самоисправления
- Rate limiting (ограничение частоты запросов) и квоты API (эй-пи-ай — интерфейс программирования приложений) ключей в продакшене
- Vercel для деплоя веб-приложений
- Альтернативы: Trigger.dev, Modal, Railway (сравнение)
Теория
Что меняется при деплое
Когда ты разрабатываешь воркфлоу (рабочий процесс) с Claude Code — агент (автономная программа-исполнитель) может исправить ошибку прямо в процессе работы. Написал неверный путь к файлу? Агент заметит, поправит, продолжит. Это называется адаптивное выполнение.
В деплое этого нет. Ты деплоишь код и инструменты — не самого агента с его способностью рассуждать и исправлять. Код выполняется детерминированно: шаг 1 → шаг 2 → шаг 3. Если на шаге 2 что-то пошло не так — падает ошибка. Никакого "подожди, я переосмыслю".
Вывод: всё тестирование нужно делать во время разработки, а не надеяться что "в продакшене разберётся".
Cloudflare Workers — твоя фабрика автоматизаций на edge
Cloudflare Workers — это edge-функции, которые работают на серверах Cloudflare в сотнях городов по всему миру. Не отдельная SaaS-платформа (программное обеспечение как услуга), а часть инфраструктуры Cloudflare.
Что Workers умеют:
- Cron Triggers (расписание через cron — крон — планировщик задач): каждый понедельник в 08:00, первого числа месяца, каждые 15 минут
- HTTP-вебхуки (вебхук — HTTP-уведомление): пришёл запрос → Worker выполняет логику
- KV Storage (key-value хранилище): хранить данные между запусками (состояние, результаты, кэш)
- Telegram-интеграция: отправлять результаты прямо в Telegram бот
Почему Cloudflare Workers, а не Trigger.dev?
| Cloudflare Workers | Trigger.dev | |
|---|---|---|
| Free tier (бесплатный тариф) | 100,000 запросов/день | Есть бесплатный план, условия на странице цен |
| Платный | от $5/мес (10 млн запросов включено, дальше $0.30 за млн) | Платные планы, см. страницу цен |
| Edge | Сотни городов по миру | Задачи идут на серверах сервиса, не на edge |
| Хранилище | KV (встроен, есть бесплатный объём) | Нужна внешняя БД |
| Мониторинг | wrangler tail + логи |
Дашборд (красивый) |
| GitHub | GitHub Actions или wrangler deploy |
Нативная интеграция |
| Лимит выполнения | Лимит по CPU: 10 мс (free); для cron на paid лимит больше, см. страницу лимитов Cloudflare | Без лимита по длительности |
Цены и лимиты Cloudflare в таблице даны на октябрь 2026. Актуальные цены и версии: Актуальное сейчас.
Когда Trigger.dev лучше: если задача считает или обрабатывает данные дольше, чем позволяют лимиты CPU у Workers (тяжёлый скрейпинг, обработка видео). Для большинства лёгких автоматизаций — Workers дешевле и быстрее.
Trigger.dev — хороший инструмент. Мы используем Workers потому что на небольшом масштабе они обходятся дешевле и встроены в экосистему которую мы уже используем. Сравнивай по своим цифрам.
Процесс деплоя: 5 шагов
Шаг 1: Создать Worker проект
npm create cloudflare@latest -- my-automation
cd my-automationУтилита задаст несколько вопросов: выбери "Hello World example", "Worker only" и язык TypeScript. Она создаст структуру проекта с wrangler.jsonc (конфиг; в старых проектах это wrangler.toml, формат toml тоже поддерживается) и src/index.ts (код). Ниже конфиг показан в формате toml, смысл настроек одинаков.
Шаг 2: Настроить секреты
Секреты добавляются через CLI (си-эл-ай — интерфейс командной строки), не в файлы:
wrangler secret put ANTHROPIC_API_KEY
# Вводишь ключ в терминале — он шифруется и хранится в Cloudflare
wrangler secret put TELEGRAM_BOT_TOKENНикогда не храни ключи в коде. Только через wrangler secret put.
Шаг 3: Настроить расписание в wrangler.toml
name = "weekly-job-scraper"
main = "src/index.ts"
compatibility_date = "2026-10-01" # ставь сегодняшнюю дату
[triggers]
crons = ["0 9 * * 1"] # каждый понедельник в 09:00 UTC
[[kv_namespaces]]
binding = "CACHE"
id = "your-kv-namespace-id"Шаг 4: Написать Worker
export default {
async scheduled(event, env, ctx) {
// 1. Читаем предыдущее состояние из KV
const lastRun = await env.CACHE.get("last-run");
// 2. Вызываем Anthropic API
const response = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": env.ANTHROPIC_API_KEY,
"content-type": "application/json",
"anthropic-version": "2023-06-01"
},
body: JSON.stringify({
model: "claude-sonnet-5-5", // актуальный идентификатор модели смотри в разделе Актуальное сейчас
max_tokens: 1024,
messages: [{ role: "user", content: "Сгенерируй дайджест..." }]
})
});
const data = await response.json();
const result = data.content.map((b) => (b.type === "text" ? b.text : "")).join("");
// 3. Отправляем в Telegram
await fetch(`https://api.telegram.org/bot${env.TELEGRAM_BOT_TOKEN}/sendMessage`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
chat_id: env.TELEGRAM_CHAT_ID,
text: result,
parse_mode: "Markdown"
})
});
// 4. Сохраняем состояние
await env.CACHE.put("last-run", new Date().toISOString());
}
};Шаг 5: Деплой и мониторинг
# Деплой
wrangler deploy
# Мониторинг в реальном времени
wrangler tail
Тестовый запуск cron делается локально: запусти npx wrangler dev --test-scheduled, а в другом окне терминала выполни:
curl "http://localhost:8787/cdn-cgi/local/scheduled"В Cloudflare Dashboard видны логи каждого запуска, ошибки, метрики.
Живой пример: еженедельный дайджест вакансий
Задача: каждую пятницу собирать вакансии и отправлять дайджест в Telegram.
Архитектура Worker: 1. Cron Trigger: "0 17 * * 5" (пятница 17:00 UTC) 2. Читать предыдущие результаты из KV (для дедупликации) 3. Fetch данные с 5 API вакансий 4. Вызвать Anthropic API для структурирования + анализа 5. Дедупликация (убрать дубли из прошлой недели) 6. Сохранить новые результаты в KV 7. Отправить дайджест в Telegram 8. Записать метрики (tokens — токены, минимальная единица текста для AI; cost) в audit KV
Важное ограничение: CPU time (процессорное время) лимит. На Free tier — 10 мс CPU на запуск, на Paid ($5/мес минимум) у cron лимит заметно больше и зависит от того, как часто он запускается (см. страницу лимитов Cloudflare). Ожидание ответа от сети (вызов API, чтение KV) в CPU time не входит, поэтому для большинства API-воркфлоу этого достаточно. Для тяжёлого скрейпинга с Playwright — нужен Trigger.dev или отдельный сервер.
Rate Limiting — невидимая стена
В продакшене ты работаешь с реальными лимитами API:
Anthropic:
- Лимиты по запросам и токенам в минуту зависят от уровня (tier) твоего аккаунта и от модели; точные значения смотри в Claude Console и в разделе Rate limits документации
- Новые аккаунты начинают с низкого уровня, лимиты растут по мере использования
Если лимит превышен: API вернёт ошибку 429. Без retry логики — воркфлоу упадёт.
Решение: добавить задержки между запросами, использовать retry с экспоненциальным ожиданием:
async function callWithRetry(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (e) {
if (e.status === 429 && i < maxRetries - 1) {
await new Promise(r => setTimeout(r, 1000 * Math.pow(2, i)));
continue;
}
throw e;
}
}
}Планирование квот: если воркфлоу обрабатывает 500 документов в день, посчитай сколько токенов уйдёт. Не превышай дневные квоты.
Vercel — для веб-приложений
Cloudflare Workers — для автоматизаций и фоновых задач. Vercel — для веб-приложений и API:
- Деплой Next.js / React приложений
- Serverless functions (серверлесс — без управления сервером): REST API endpoints (точки входа)
- Edge Functions: выполняются рядом с пользователем
- Бесплатный план Hobby: подходит для личных прототипов, но только для некоммерческих проектов. Для коммерческих нужен платный Pro (на октябрь 2026: $20 в месяц за разработчика)
Типичная связка:
Vercel (веб-интерфейс) ←→ Cloudflare Workers (фоновые задачи) ←→ KV Storage
↓
Telegram бот (уведомления)Пользователь нажимает кнопку на сайте → Vercel принимает запрос → Cloudflare Worker запускает задачу → результат в KV + Telegram.
Отдельное замечание про статические сайты: для них и для full-stack приложений Cloudflare теперь рекомендует Workers со статическими файлами (Workers Static Assets), а Pages продолжает работать, но новые функции появляются в Workers (на октябрь 2026).
Cloudflare Workers: тарифы
| Параметр | Free | Paid (от $5/мес) |
|---|---|---|
| Запросов | 100,000/день | без лимита (10 млн/мес включено, дальше $0.30 за млн) |
| CPU time на запрос | 10 мс | больше; см. страницу лимитов |
| KV чтений | дневной объём; см. страницу цен | месячный объём включён; см. страницу цен |
| KV записей | дневной объём; см. страницу цен | месячный объём включён; см. страницу цен |
| Cron Triggers на аккаунт | ограничено; см. страницу лимитов | больше; см. страницу лимитов |
| Workers | ограничено; см. страницу лимитов | больше; см. страницу лимитов |
Для старта: Free tier хватает для 1-3 автоматизаций. Paid (от $5/мес) — для серьёзного использования. Цифры даны на октябрь 2026.
Актуальные цены: Cloudflare Workers Pricing
Сравнение всех платформ деплоя
| Платформа | Для чего | Цена (на октябрь 2026) | Лимит выполнения | Наш выбор? |
|---|---|---|---|---|
| Cloudflare Workers | Cron + API автоматизации | от $5/мес, есть бесплатный план | CPU: 10 мс (free) / больше для cron (paid) | ✅ Primary |
| Trigger.dev | Тяжёлые длинные задачи | Бесплатный и платные планы, см. страницу цен | Без лимита по длительности | Альтернатива |
| Vercel | Веб-приложения + API | Hobby бесплатно (только некоммерческие), Pro $20/мес | По тарифу, см. документацию | Для UI |
| Modal | ML + GPU задачи | Pay-per-use, см. страницу цен | См. документацию | Для AI-тяжёлых |
| Railway | Полноценный сервер | См. страницу цен | См. документацию | Если нужен VPS (виртуальный приватный сервер) |
| Render | Web services + cron jobs | См. страницу цен | См. документацию | Простой deploy |
Частые ошибки при деплое
Забыть установить секреты через
wrangler secret put. Самая частая ошибка: скопировал код, задеплоил, Worker падает с "undefined" — потому что API ключи не заданы. Всегда проверяйwrangler secret listперед деплоем.Не тестировать локально перед деплоем.
wrangler devзапускает Worker локально — используй это. Один прогон черезwrangler devсэкономит час дебага (дебаг — отладка кода) в production.Хранение секретов в
wrangler.toml. Файлwrangler.tomlчасто попадает в git. Секреты (API ключи, токены) — только черезwrangler secret put, никогда вwrangler.tomlили в коде.Игнорирование CPU time лимита. Free tier = 10ms CPU time. Ожидание сети в него не входит, но разбор больших ответов и сложная логика легко его превысят. Проверяй через
wrangler tailсколько CPU time тратит Worker.Забыть про retry при 429 ошибках. В production API сервисы отдают 429 (rate limit) регулярно. Без retry логики Worker просто упадёт в 3 ночи и ты узнаешь утром.
Реальный wrangler.toml — конфигурация Worker
name = "my-weekly-digest"
main = "src/index.ts"
compatibility_date = "2026-10-01" # ставь сегодняшнюю дату
# Расписание: каждый понедельник в 09:00 UTC
[triggers]
crons = ["0 9 * * 1"]
# KV хранилище для состояния между запусками
[[kv_namespaces]]
binding = "CACHE"
id = "abc123def456" # ID из `wrangler kv namespace create CACHE`
preview_id = "xyz789" # для wrangler dev
# Переменные окружения (НЕ секреты — можно в конфиге)
[vars]
TELEGRAM_CHAT_ID = "123456789"
ENVIRONMENT = "production"
# Секреты добавляются через CLI:
# wrangler secret put ANTHROPIC_API_KEY
# wrangler secret put TELEGRAM_BOT_TOKENВнимание: id KV namespace получаешь через wrangler kv namespace create CACHE. Секреты (ANTHROPIC_API_KEY и т.д.) задаются только через wrangler secret put.
Чеклист перед деплоем
Перед тем как деплоить — обязательно проверь:
Практика
Задание: Задеплоить простую автоматизацию на Cloudflare Workers
- Установи Node.js (нужен для команд ниже). Wrangler входит в проект, глобально ставить не обязательно: используй
npx wrangler ... - Создай проект:
npm create cloudflare@latest -- quote-bot(Hello World, Worker only, TypeScript) - Авторизуйся:
npx wrangler login - Напиши Worker: каждые 5 минут получать запись с публичного тестового API (например jsonplaceholder.typicode.com) и логировать результат
- Настрой cron в конфиге Wrangler:
crons = ["*/5 * * * *"] - Протестируй локально:
wrangler dev --test-scheduled - Задеплой:
wrangler deploy - Наблюдай за выполнением:
wrangler tail - Бонус: добавь секрет (
wrangler secret put MY_SECRET) и используй его в Worker какenv.MY_SECRET - Бонус 2: создай KV namespace и сохраняй номер последней записи — чтобы не повторяться
Ожидаемый результат: в wrangler tail видны регулярные успешные запуски с логами записей.
Инструменты и ресурсы
- Cloudflare Workers — edge-платформа для автоматизаций
- Wrangler CLI — CLI для создания, тестирования и деплоя Workers
- Cloudflare KV — key-value хранилище для состояния между запусками
- Cloudflare D1 — SQL база данных (SQLite) для Workers, если KV не хватает
- Cloudflare R2 — хранилище файлов (аналог S3), есть бесплатный объём (условия — на странице цен)
- Cloudflare Workers Pricing — актуальные тарифы
- Vercel — деплой веб-приложений; бесплатный план Hobby только для некоммерческих проектов
- Trigger.dev — альтернатива для длинных задач
- Railway — полноценный сервер, если нужен VPS
- Render — простой деплой web services + cron jobs
- GitHub Actions — альтернатива для CI/CD (непрерывная интеграция и доставка) пайплайнов
Ключевые выводы
В деплое ты отправляешь код, не агента. Код не исправляет сам себя — поэтому тестируй ВО ВРЕМЯ разработки, не после.
Rate limiting — реальная проблема в продакшене. Добавь задержки и retry логику до того как упадёт в 3 ночи.
Cloudflare Workers = edge-скорость + KV хранилище + cron из коробки. На небольшом масштабе заметно дешевле Trigger.dev. Для большинства лёгких задач — хороший выбор.
Связанные уроки
- → Loop vs Scheduled Tasks — расписание запусков Workers через cron и Trigger.dev
- → Headless Mode и CI/CD — автоматический деплой Workers через GitHub Actions
- ← API и интеграции — Workers делают API-вызовы к внешним сервисам, понимание API обязательно
Следующий урок
→ Мультимодальность: картинки, PDF и аудио в работе Claude
Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс