Библиотека · Подключения: API, MCP и работа круглосуточно

Деплой 24/7 — как выложить проект в интернет: Cloudflare Workers, GitHub и Vercel

Строитель75 минОбновлено: октябрь 2026
27 из 105 в библиотеке

Модуль: 5 — Технические инструменты | Время: ~30 мин теории + 45 мин практики


Суть урока

Представь: ты построил механического почтальона, который отлично работает у тебя дома. Теперь нужно отправить его работать самостоятельно — в офис, где он будет приходить каждый день в 9 утра, независимо от тебя. Деплой (развёртывание) — это именно это: перенос твоей автоматизации из "работает на моём компьютере" в "работает всегда, в облаке, без меня".


Ключевые концепции

  • Разница между локальным запуском и деплоем в облако
  • Cloudflare Workers как edge-платформа (вычисления на ближайших к пользователю серверах) для автоматизаций 24/7
  • Детерминированность деплоя: код работает точно, без самоисправления
  • Rate limiting (ограничение частоты запросов) и квоты API (эй-пи-ай — интерфейс программирования приложений) ключей в продакшене
  • Vercel для деплоя веб-приложений
  • Альтернативы: Trigger.dev, Modal, Railway (сравнение)

Теория

Что меняется при деплое

Когда ты разрабатываешь воркфлоу (рабочий процесс) с Claude Code — агент (автономная программа-исполнитель) может исправить ошибку прямо в процессе работы. Написал неверный путь к файлу? Агент заметит, поправит, продолжит. Это называется адаптивное выполнение.

В деплое этого нет. Ты деплоишь код и инструменты — не самого агента с его способностью рассуждать и исправлять. Код выполняется детерминированно: шаг 1 → шаг 2 → шаг 3. Если на шаге 2 что-то пошло не так — падает ошибка. Никакого "подожди, я переосмыслю".

🎨 Образ: разработка с Claude — как репетиция с режиссёром рядом. Ошибся — режиссёр поправил, продолжаешь. Деплой — как живой спектакль без режиссёра в зале. Ошибся в третьем акте — спектакль упал, занавес.

Вывод: всё тестирование нужно делать во время разработки, а не надеяться что "в продакшене разберётся".


Cloudflare Workers — твоя фабрика автоматизаций на edge

🎨 Образ: Cloudflare Workers — это фабрика которая никогда не спит. Ты уходишь домой в 18:00, а конвейер продолжает работать: собирает данные, отправляет отчёты, пишет в базу. Тебя нет — производство идёт.

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 проект

bash
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 (си-эл-ай — интерфейс командной строки), не в файлы:

bash
wrangler secret put ANTHROPIC_API_KEY
# Вводишь ключ в терминале — он шифруется и хранится в Cloudflare
wrangler secret put TELEGRAM_BOT_TOKEN

🎨 Образ: секреты в wrangler secret put — как сейф в банке. Ключ есть, но он хранится не у тебя в кармане, а в защищённом хранилище. Никто не вытащит его из git (гит — система контроля версий)-репозитория или папки проекта.

Никогда не храни ключи в коде. Только через wrangler secret put.

Шаг 3: Настроить расписание в wrangler.toml

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

typescript
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: Деплой и мониторинг

bash
# Деплой
wrangler deploy

# Мониторинг в реальном времени
wrangler tail

Тестовый запуск cron делается локально: запусти npx wrangler dev --test-scheduled, а в другом окне терминала выполни:

bash
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 документации
  • Новые аккаунты начинают с низкого уровня, лимиты растут по мере использования

🎨 Образ: rate limit — это очередь на кассе. Если ты слишком быстро подбегаешь с новым товаром — кассир говорит "подожди". Без retry (повторная попытка) логики ты разворачиваешься и уходишь. С retry — ждёшь секунду, пробуешь ещё раз.

Если лимит превышен: API вернёт ошибку 429. Без retry логики — воркфлоу упадёт.

Решение: добавить задержки между запросами, использовать retry с экспоненциальным ожиданием:

typescript
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

Частые ошибки при деплое

  1. Забыть установить секреты через wrangler secret put. Самая частая ошибка: скопировал код, задеплоил, Worker падает с "undefined" — потому что API ключи не заданы. Всегда проверяй wrangler secret list перед деплоем.

  2. Не тестировать локально перед деплоем. wrangler dev запускает Worker локально — используй это. Один прогон через wrangler dev сэкономит час дебага (дебаг — отладка кода) в production.

  3. Хранение секретов в wrangler.toml. Файл wrangler.toml часто попадает в git. Секреты (API ключи, токены) — только через wrangler secret put, никогда в wrangler.toml или в коде.

  4. Игнорирование CPU time лимита. Free tier = 10ms CPU time. Ожидание сети в него не входит, но разбор больших ответов и сложная логика легко его превысят. Проверяй через wrangler tail сколько CPU time тратит Worker.

  5. Забыть про retry при 429 ошибках. В production API сервисы отдают 429 (rate limit) регулярно. Без retry логики Worker просто упадёт в 3 ночи и ты узнаешь утром.


Реальный wrangler.toml — конфигурация Worker

toml
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

  1. Установи Node.js (нужен для команд ниже). Wrangler входит в проект, глобально ставить не обязательно: используй npx wrangler ...
  2. Создай проект: npm create cloudflare@latest -- quote-bot (Hello World, Worker only, TypeScript)
  3. Авторизуйся: npx wrangler login
  4. Напиши Worker: каждые 5 минут получать запись с публичного тестового API (например jsonplaceholder.typicode.com) и логировать результат
  5. Настрой cron в конфиге Wrangler: crons = ["*/5 * * * *"]
  6. Протестируй локально: wrangler dev --test-scheduled
  7. Задеплой: wrangler deploy
  8. Наблюдай за выполнением: wrangler tail
  9. Бонус: добавь секрет (wrangler secret put MY_SECRET) и используй его в Worker как env.MY_SECRET
  10. Бонус 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

Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс