Cloudflare DNS + Workers + Tunnels — три сервиса, которые закрывают большую часть инфраструктуры разработчика на бесплатном тарифе: домены и проксирование, серверный код на Edge, доступ к localhost из интернета без белого IP. Каждый из них работает самостоятельно, но вместе они дают связку, которой раньше нужен был VPS, Nginx, Let’s Encrypt и проброс портов.

Если вы запускаете пет-проект, делаете MVP для клиента или поднимаете self-hosted инструменты (n8n, Gitea, Home Assistant, Grafana) — эта тройка закрывает почти всё. Платный тариф нужен только когда вы упираетесь в лимиты или хотите завести команду из десятков человек за Cloudflare Access.

Этот материал — практический разбор всех трёх сервисов в одном месте. Что внутри каждого, как устроено, какие лимиты на бесплатном тарифе, как быстро поднять и какие подводные камни ждут на каждом шаге. В конце — общий чеклист и ссылки на документацию.

Что это

Это связка из трёх бесплатных сервисов Cloudflare, которая закрывает задачи, для которых раньше нужны были отдельный VPS, Nginx, Let’s Encrypt и настройка файрвола.

  • Cloudflare DNS — самый быстрый публичный DNS-хостинг в мире. Бесплатный, без лимитов на число записей. Даёт DDoS-защиту, проксирование трафика, автоматический SSL и доступ ко всем остальным сервисам Cloudflare.
  • Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Пишете функцию на JavaScript или TypeScript, деплоите — она работает по всему миру без серверов, без контейнеров, без DevOps.
  • Cloudflare Tunnels — сервис, который создаёт зашифрованное соединение от вашего локального сервера к сети Cloudflare. Без белого IP, без проброса портов, без настройки NAT. localhost становится доступен по вашему домену.

Зачем нужно

Связка DNS + Workers + Tunnels закрывает почти все базовые задачи, для которых раньше нужен был платный VPS, отдельный Nginx и ручной выпуск сертификатов.

  • Поднять сайт с custom-доменом за 10 минут — DNS + Pages дают HTTPS из коробки без Let’s Encrypt и cron.
  • Скрыть API-ключи от внешних сервисов — Workers проксирует запросы и хранит секреты в зашифрованных переменных окружения.
  • Поднять Telegram-бот или обработчик вебхуков без своего сервера — Worker на Edge работает по всему миру с cold start меньше миллисекунды.
  • Показать заказчику localhost по красивому URL — Tunnel даёт временный или постоянный домен без белого IP и проброса портов.
  • Поднять self-hosted сервисы (n8n, Gitea, Grafana, Home Assistant) и закрыть их авторизацией через Cloudflare Access — до 50 пользователей бесплатно.
  • Получить глобальный CDN, защиту от DDoS и SSL без переговоров с хостером — оранжевое облако включается одним кликом.

Как устроено

Cloudflare DNS

DNS (Domain Name System) — система, которая превращает доменное имя (mysite.ru) в IP-адрес сервера. Cloudflare DNS — один из самых быстрых и надёжных публичных DNS-хостингов в мире. Бесплатный, без ограничений по числу записей и доменов. Серверы Cloudflare стоят в 330+ дата-центрах, и запрос пользователя отвечает ближайший — поэтому разрешение имён идёт за единицы миллисекунд.

Когда вы переносите домен на Cloudflare DNS, вы получаете не только быстрый DNS, но и DDoS-защиту на уровне DNS, проксирование трафика через Cloudflare (CDN, WAF, автоматический SSL), удобную панель записей и интеграцию со всеми остальными сервисами — Workers, Pages, Tunnels, Access.

Ключевое правило: Cloudflare DNS — фундамент. Без переноса домена на Cloudflare нельзя использовать Workers Routes, автоматический SSL для Pages и привязку домена к Tunnel. Можно держать домен у регистратора и прописать Cloudflare secondary, но часть функций тогда отключается.

Типы DNS-записей

Каждая DNS-запись — инструкция для интернета: куда отправлять запросы к вашему домену. Базовых типов семь, для большинства проектов хватает четырёх.

ТипДля чегоПример значения
AУказывает IPv4-адрес сервера203.0.113.50
AAAAУказывает IPv6-адрес сервера2001:db8::1
CNAMEАлиас — перенаправляет на другой доменmysite.pages.dev
MXПочтовый сервер для доменаmx1.mailprovider.com
TXTТекстовая запись (SPF, DKIM, верификация)v=spf1 include:_spf.google.com ~all
NSNameserver-серверы доменаanna.ns.cloudflare.com
SRVСлужебная запись (порт + приоритет)Для VoIP, игровых серверов
CAAКакие центры сертификации могут выпускать SSLletsencrypt.org

Оранжевое облако: проксирование vs DNS-only

Главная фича Cloudflare DNS — переключатель проксирования (оранжевое или серое облако). Именно он решает, идёт ли трафик через CDN и защиту Cloudflare или напрямую к вашему серверу.

flowchart LR
 A["Посетитель"] --> B{"Оранжевое облако?"}
 B -->|Да| C["Cloudflare CDN"]
 C --> D["Ваш сервер"]
 B -->|Нет| D

Оранжевое облако (Proxied)

  • IP сервера скрыт — в логах видны только IP Cloudflare, реальный адрес не утекает.
  • Работает CDN — статика кэшируется на 330+ дата-центрах и отдаётся ближайшим.
  • Включается DDoS-защита, WAF и Bot Fight Mode.
  • Автоматический SSL-сертификат — Cloudflare сам выпускает и обновляет.
  • Работают Page Rules, Redirect Rules, Transform Rules.

Серое облако (DNS only)

Cloudflare работает как обычный DNS — возвращает реальный IP сервера и не вмешивается в трафик. Нет CDN, нет защиты, нет SSL от Cloudflare. Посетитель подключается к серверу напрямую, и IP видно всем.

Когда что включать

ЗаписьОблакоПочему
A / CNAME для сайтаОранжевоеCDN, защита, SSL
A / CNAME для APIОранжевоеЗащита, скрытие IP
MX (почта)СероеПочтовые серверы не работают через прокси
A для SSH / FTPСероеCloudflare проксирует только HTTP/HTTPS
CNAME для TunnelОранжевоеTunnel работает через прокси
TXT (SPF, DKIM)TXT не поддерживает проксирование

Важно: никогда не включайте оранжевое облако для MX-записей. Почта перестанет работать. Cloudflare проксирует только HTTP/HTTPS — для SMTP, IMAP, POP3 нужен прямой доступ к почтовому серверу.

Перенос домена на Cloudflare DNS

Перенос означает: вы меняете nameservers у регистратора домена, чтобы Cloudflare стал авторитетным DNS-сервером. Сам домен остаётся у регистратора — меняется только то, кто отвечает за DNS.

  1. Откройте dash.cloudflare.com и нажмите Add a site. Введите домен и выберите план Free. Cloudflare просканирует существующие DNS-записи.
  2. Проверьте записи. Cloudflare импортирует их автоматически, но сверьте: A-запись основного домена, CNAME для www, MX-записи (облако должно быть серым), TXT-записи (SPF, DKIM, верификация Google или Яндекс).
  3. Замените nameservers у регистратора. Cloudflare выдаст два NS-адреса вида anna.ns.cloudflare.com и bob.ns.cloudflare.com (имена уникальны для каждого домена) — их нужно прописать в панели регистратора.
РегистраторГде менять
Reg.ruДомены → Управление → DNS-серверы
NamecheapDomain List → Manage → Nameservers → Custom DNS
GoDaddyMy Products → DNS → Nameservers → Change
BegetДомены → DNS
TimeWebДомены и поддомены → NS серверы
  1. Дождитесь активации. Обычно 10–30 минут, максимум 24 часа. Cloudflare пришлёт email. После активации домен управляется через Cloudflare, автоматически выпускается SSL-сертификат и доступны все остальные сервисы Cloudflare.

Практические настройки DNS

Подключение сайта к серверу. Тип A, имя @, значение — IPv4 сервера, облако оранжевое. Для www — CNAME на основной домен, облако оранжевое.

Подключение Cloudflare Pages. Тип CNAME, имя @ (или нужный поддомен), значение — your-project.pages.dev, облако оранжевое.

Настройка почты через Google Workspace. Тип MX, имя @, значение aspmx.l.google.com с приоритетом 1, облако серое. Плюс TXT с v=spf1 include:_spf.google.com ~all.

Email Routing (пересылка на Gmail). Настраивается в разделе Email → Email Routing — Cloudflare сам создаст нужные MX-записи.

Подключение Tunnel. Если создаёте Tunnel через дашборд, Cloudflare автоматически создаст CNAME-запись с tunnel-id.cfargotunnel.com. Вручную добавлять не нужно.

Полезные фичи DNS

  • DNSSEC — защита от подмены DNS-ответов. Включается одной кнопкой: DNS → Settings → Enable DNSSEC. После включения нужно добавить DS-запись у регистратора (Cloudflare покажет параметры).
  • Always Use HTTPS — перенаправляет все HTTP-запросы на HTTPS. Включается в SSL/TLS → Edge Certificates → Always Use HTTPS.
  • Wildcard-записи — запись *.mysite.ru перенаправляет все поддомены на один IP или CNAME. Полезно для мультитенантных приложений.

Cloudflare Workers

Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Код выполняется на ближайшем к пользователю сервере из 330+ дата-центров. Проще говоря: пишете функцию на JavaScript или TypeScript, деплоите — и она работает по всему миру без серверов, без контейнеров, без DevOps.

Чаще всего Workers используют для:

  • API-прокси — скрыть ключи от клиента, добавить CORS.
  • Редиректы — сложная логика перенаправлений без Page Rules.
  • Обработка вебхуков — принять данные от Telegram, Stripe, GitHub.
  • Telegram-бот — бот целиком на Workers, без сервера.
  • SSR — серверный рендеринг для фронтенд-фреймворков.
  • A/B тестирование — разные версии страницы для разных пользователей.
  • Геолокация — контент на основе страны или города посетителя.

Быстрый старт: первый Worker за 5 минут

Шаг 1. Установите CLI и авторизуйтесь.

npm install -g wrangler
wrangler login

Шаг 2. Создайте проект из шаблона Hello World.

npm create cloudflare@latest my-worker
cd my-worker

Шаг 3. Откройте src/index.ts и замените содержимое.

export default {
  async fetch(request) {
    return new Response("Привет из Cloudflare Workers!", {
      headers: { "Content-Type": "text/plain;charset=UTF-8" },
    });
  },
};

Шаг 4. Запустите локально и проверьте ответ на http://localhost:8787.

wrangler dev

Шаг 5. Задеплойте. Worker будет доступен по адресу https://my-worker..workers.dev. Домен *.workers.dev бесплатный, но Worker можно привязать к своему домену через Workers Routes в дашборде.

wrangler deploy

Хранилища Workers

У Workers четыре типа хранилищ. Для большинства задач хватает KV, но у каждого своя ниша.

ХранилищеТипДля чегоБесплатно
KVKey-valueКонфиги, кэш, сессии1 ГБ, 100K чтений/день
R2Object storageФайлы, картинки, бэкапы10 ГБ, egress бесплатно
D1SQLiteРеляционные данные5 ГБ
Durable ObjectsStatefulЧаты, счётчики, координацияТолько платный план

KV — key-value хранилище

Workers KV — глобальное хранилище ключ-значение. Данные реплицируются по всем Edge-серверам. Идеально для конфигурации, кэша и небольших данных.

Создание namespace:

wrangler kv namespace create MY_KV

Привязка в wrangler.toml:

[[kv_namespaces]]
binding = "MY_KV"
id = "<namespace-id>"

Использование в коде:

export default {
  async fetch(request, env) {
    // Записать
    await env.MY_KV.put("user:123", JSON.stringify({
      name: "Sergey",
      plan: "free"
    }));

    // Прочитать
    const user = await env.MY_KV.get("user:123", "json");

    // Удалить
    await env.MY_KV.delete("user:123");

    return Response.json(user);
  },
};

Лимиты KV и Workers на бесплатном тарифе

ПараметрFreePaid ($5/мес Workers)
KV: чтений в день100 000Безлимитно
KV: записей в день1 000Безлимитно
KV: хранилище1 ГББезлимитно
KV: макс. размер значения25 МБ25 МБ
KV: макс. размер ключа512 байт512 байт
Workers: запросов в день100 00010 миллионов (включено)
Workers: CPU time / запрос10 мс30 с
Workers: размер скрипта1 МБ10 МБ
Workers: количество Workers100500
Workers: Cron Triggers55
Workers: cold start< 1 мс< 1 мс

100 000 запросов в день — это много. Для API-прокси, ботов, редиректов и обработки форм бесплатного тарифа хватает с большим запасом. KV оптимизирован под чтение — записи eventual-consistent, изменение может стать видимым на всех серверах через 30–60 секунд. Для частых записей используйте Durable Objects или D1.

Cloudflare Tunnels

Cloudflare Tunnel (раньше назывался Argo Tunnel) — сервис, который создаёт зашифрованное соединение между вашим локальным сервером и глобальной сетью Cloudflare. Без белого IP, без проброса портов, без настройки NAT.

flowchart LR
 A["Посетитель"] --> B["Cloudflare CDN"]
 B --> C["Tunnel"]
 C --> D["cloudflared на вашем сервере"]
 D --> E["localhost:3000"]

На вашем сервере запускается демон cloudflared. Он устанавливает исходящее соединение с Cloudflare (не входящее!), Cloudflare привязывает поддомен к этому туннелю. Посетитель заходит на app.mysite.ru → Cloudflare → туннель → ваш localhost. Весь трафик идёт через Cloudflare с SSL, CDN и защитой. Ваш IP скрыт. Порты закрыты.

Важно: cloudflared устанавливает только исходящие подключения. Не нужно открывать порты на файрволе или роутере. Это безопаснее, чем проброс портов — ваш сервер вообще не светится в интернете.

Зачем нужен Tunnel

  • Показать localhost заказчику — разрабатываете на ноутбуке, клиент видит результат по красивому URL.
  • Домашний NAS — доступ к Synology, TrueNAS, Raspberry Pi из интернета без белого IP.
  • Webhook для разработки — Telegram, Stripe, GitHub шлют вебхуки на ваш localhost.
  • Self-hosted инструменты — Grafana, Gitea, n8n, Home Assistant доступны по HTTPS.
  • Staging-сервер — показать staging-версию проекта без деплоя на хостинг.
  • SSH без белого IP — безопасный доступ к серверу через Cloudflare Access.

Быстрый старт: Tunnel за 5 минут

Вариант 1. Через дашборд (рекомендуется для новичков):

  1. Откройте dash.cloudflare.com → Zero Trust → Networks → Tunnels.
  2. Нажмите Create a tunnel, выберите Cloudflared, задайте имя.
  3. Скопируйте команду установки cloudflared для вашей ОС и запустите её на сервере — туннель подключится автоматически.
  4. Добавьте Public hostname: поддомен → http://localhost:3000. Готово — app.mysite.ru ведёт на localhost:3000.

Вариант 2. Через CLI. Установка cloudflared:

# macOS
brew install cloudflared

# Ubuntu/Debian
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb

# Windows
winget install Cloudflare.cloudflared
# Авторизация
cloudflared tunnel login

# Создание туннеля
cloudflared tunnel create my-tunnel

# Привязка DNS
cloudflared tunnel route dns my-tunnel app.mysite.ru

# Запуск
cloudflared tunnel --url http://localhost:3000 run my-tunnel

Конфигурация через файл

Для постоянной работы создайте ~/.cloudflared/config.yml. Один туннель может обслуживать несколько поддоменов — в ingress перечислите все hostname, cloudflared будет маршрутизировать запросы к нужному сервису.

tunnel: <tunnel-id>
credentials-file: /root/.cloudflared/<tunnel-id>.json

ingress:
  # Веб-приложение
  - hostname: app.mysite.ru
    service: http://localhost:3000

  # NAS
  - hostname: nas.mysite.ru
    service: https://192.168.1.100:5001
    originRequest:
      noTLSVerify: true

  # Grafana
  - hostname: grafana.mysite.ru
    service: http://localhost:3001

  # Обязательное правило по умолчанию
  - service: http_status:404
cloudflared tunnel run my-tunnel

Tunnel как системный сервис

Чтобы туннель пережил перезагрузку сервера, ставим его как системный сервис.

# Linux
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

# macOS
sudo cloudflared service install
sudo launchctl load /Library/LaunchDaemons/com.cloudflare.cloudflared.plist

Quick Tunnel

Для быстрого показа localhost без настройки домена и авторизации — Quick Tunnel. Cloudflare выдаст временный URL вроде https://random-words.trycloudflare.com. Работает, пока запущена команда.

cloudflared tunnel --url http://localhost:3000

Подходит для быстрой демонстрации, тестирования вебхуков, показа прототипа коллеге. Для постоянного доступа используйте именованный туннель с привязкой к домену — Quick Tunnel временный, URL меняется при каждом запуске.

Практические сценарии

  • Домашний NAS (Synology). Установите cloudflared на NAS (Docker или пакет), создайте туннель через дашборд, добавьте hostname nas.mysite.ru → https://localhost:5001, включите noTLSVerify: true (у Synology самоподписанный сертификат). Опционально: добавьте Cloudflare Access для авторизации.
  • Webhook для разработки. Запустите Quick Tunnel, получите URL, укажите его как webhook URL в Telegram, Stripe или GitHub — запросы приходят на ваш localhost.
  • Home Assistant. Создайте туннель, hostname home.mysite.ru → http://localhost:8123, в configuration.yaml добавьте http.use_x_forwarded_for: true и trusted_proxies с 0.0.0.0/0.
  • n8n (self-hosted автоматизация). Hostname n8n.mysite.ru → http://localhost:5678. Добавьте Cloudflare Access, чтобы закрыть доступ посторонним.

Tunnel + Cloudflare Access

Cloudflare Access позволяет закрыть доступ к Tunnel за авторизацию. Бесплатно до 50 пользователей. Настройка: Zero Trust → Access → Applications → Add an application, тип Self-hosted, домен grafana.mysite.ru, политика Allow → Emails ending in @mycompany.com. Теперь при заходе на grafana.mysite.ru Cloudflare покажет экран авторизации — только разрешённые пользователи попадут дальше.

Tunnel vs альтернативы

ПараметрCloudflare TunnelngrokTailscale Funnel
ЦенаБесплатноБесплатно (с лимитами)Бесплатно (с лимитами)
Свой доменДаТолько платноНет
Несколько хостовДа (ingress)Один на туннельОдин
CDN и защитаВключеныНетНет
Access (авторизация)50 пользователей бесплатноOAuth (платно)Tailscale ACL
Постоянный URLДаТолько платноДа
Системный сервисДаДа (платно)Да

Когда использовать

СитуацияПодходит ли связкаПочему
Пет-проект или MVP с custom-доменомДаDNS + Pages + Tunnel закрывают всё, хостинг не нужен
Telegram-бот, вебхук-обработчикДаWorker на Edge + Tunnel для разработки, всё бесплатно
Self-hosted n8n / Grafana / Gitea для командыДаTunnel даёт HTTPS, Access закрывает авторизацию
Сайт с глобальной аудиторией и CDNДа330+ дата-центров, оранжевое облако включено по умолчанию
Демонстрация прототипа заказчикуДаQuick Tunnel за одну команду, без регистрации домена
Высоконагруженный бэкенд с длинными запросамиНетWorker CPU time ограничен 10 мс на Free, для долгих задач нужен VPS
Реляционные данные с миллионами строкНетD1 ограничен 5 ГБ, для серьёзных нагрузок нужен внешний Postgres
Корпоративный сайт с комплаенсом в РФОсторожноНужно проверить требования по хранению данных и сертификации

Пример

Полный пример: API-прокси на Workers, который скрывает ключ от внешнего сервиса, плюс редирект для пользователей из России, плюс обработчик Telegram-бота в одном файле.

// Worker: API-прокси с редиректом по геолокации
// Развёртывание: wrangler deploy
// Секреты задаются через: wrangler secret put API_KEY
//                       wrangler secret put BOT_TOKEN

export default {
  async fetch(request, env) {
    const url = new URL(request.url);

    // Редирект старых URL
    const redirects = {
      "/old-page": "/new-page",
      "/blog/2024": "/archive/2024",
    };

    if (redirects[url.pathname]) {
      return Response.redirect(
        `${url.origin}${redirects[url.pathname]}`,
        301
      );
    }

    // Геолокация: русскоязычных — на /ru
    const country = request.cf?.country;
    if (url.pathname === "/" && country === "RU") {
      return Response.redirect(`${url.origin}/ru`, 302);
    }

    // Telegram-бот: POST /bot
    if (url.pathname === "/bot" && request.method === "POST") {
      const update = await request.json();
      const chatId = update.message?.chat?.id;
      const text = update.message?.text;

      if (chatId && text) {
        await fetch(
          `https://api.telegram.org/bot${env.BOT_TOKEN}/sendMessage`,
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              chat_id: chatId,
              text: `Вы написали: ${text}`,
            }),
          }
        );
      }

      return new Response("OK");
    }

    // API-прокси: GET /api/data
    if (url.pathname === "/api/data") {
      const response = await fetch("https://api.example.com/data", {
        headers: {
          "Authorization": `Bearer ${env.API_KEY}`,
          "Content-Type": "application/json",
        },
      });

      return new Response(response.body, {
        headers: {
          "Content-Type": "application/json",
          "Access-Control-Allow-Origin": "*",
        },
      });
    }

    return new Response("Not found", { status: 404 });
  },
};

Установка вебхука. Чтобы Telegram знал, куда слать сообщения, выполните один раз:

curl 'https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://my-bot.example.workers.dev'

Привязка к своему домену: откройте домен в Cloudflare → Workers Routes → добавьте маршрут api.mysite.ru/* → выберите Worker. Убедитесь, что DNS-запись для api.mysite.ru существует (A или CNAME с оранжевым облаком). Теперь https://api.mysite.ru/любой-путь обрабатывается Worker.

Ограничения

Ограничения

Что учитывать

Бесплатный тариф имеет жёсткие лимиты, которые важно знать до запуска.

Workers CPU time на Free

— только 10 мс на запрос — тяжёлые вычисления не помещаются, нужен платный тариф ($5/мес).

Workers KV оптимизирован под чтение

— записи eventual-consistent, изменение видно на всех серверах через 30–60 секунд.

D1 ограничен 5 ГБ

— для серьёзных реляционных данных нужен внешний Postgres (Neon, Supabase, Turso).

Durable Objects только на платном плане

— для стейтфул-логики (чаты, счётчики, координация) нужен Workers Paid.

Cloudflare проксирует только HTTP/HTTPS

— для почты (MX), SSH, FTP нужно ставить серое облако или использовать отдельные сервисы.

Quick Tunnel

— временный, URL меняется при каждом запуске, не подходит для продакшена.

Cloudflare Access бесплатен до 50 пользователей

— для команды больше нужен платный план.

Cloudflare как компания подчиняется законам США

— для проектов с жёсткими требованиями к локализации данных нужно проверять комплаенс.

Антипаттерны

Антипаттерны

Чего не делать

Частые ошибки, которые ломают работу связки или открывают дыры в безопасности.

Не включать оранжевое облако для MX-записей

— почта перестанет ходить, Cloudflare проксирует только HTTP/HTTPS.

Не оставлять дефолтный SSL-режим Flexible — между Cloudflare и сервером трафик идёт по HTTP, ключ API можно перехватить.

Всегда ставьте Full (Strict).

Не открывать SSH/FTP через оранжевое облако — Cloudflare их не проксирует, а серое облако отдаёт IP сервера всем желающим.

Для SSH используйте Cloudflare Access.

Не хранить секреты в коде Worker — только в wrangler secret или Settings

→ Variables. Код публикуется в Cloudflare и виден в дашборде.

Не использовать KV для частых записей

— записи eventual-consistent, изменение видно через 30–60 секунд, счётчики и логи теряют точность.

Не делать Quick Tunnel для продакшена

— URL временный и меняется при каждом запуске, для постоянного доступа нужен именованный туннель с привязкой к домену.

Не забывать про ingress-правило по умолчанию — без - service:

http_status:404 cloudflared падает или маршрутизирует запросы некорректно.

Не ставить самоподписанный сертификат на бэкенд без noTLSVerify:

true в ingress — cloudflared не сможет подключиться и вернёт 502.

Чеклист

Чеклист

Проверка перед запуском

Перед запуском пройдитесь по чеклисту — если что-то не отмечено, рабочая связка скорее всего сломается в первый же день.

Домен добавлен в Cloudflare

— nameservers заменены у регистратора, активация подтверждена email.

DNS-записи проверены

— A, CNAME, MX, TXT импортированы корректно, оранжевое облако включено для веб-записей и выключено для MX.

SSL/TLS режим установлен в Full (Strict)

— не Flexible, иначе между Cloudflare и сервером трафик идёт без шифрования.

DNSSEC включён в настройках DNS и DS-запись добавлена у регистратора.

Always Use HTTPS включён в SSL/TLS

→ Edge Certificates.

wrangler установлен и авторизован

— wrangler whoami возвращает ваш account ID.

Первый Worker задеплоен и отвечает Hello на *.workers.dev

— sanity check перед привязкой к домену.

Секреты хранятся в Environment Variables

— wrangler secret put API_KEY, никаких ключей в коде.

Worker привязан к домену через Workers Routes

— DNS-запись для поддомена существует и имеет оранжевое облако.

KV namespace создан

— wrangler kv namespace create MY_KV, привязка прописана в wrangler.toml.

cloudflared установлен на сервере

— cloudflared —version возвращает версию.

Туннель создан и подключён — виден в Zero Trust

→ Networks → Tunnels с статусом Healthy.

Public hostname настроен

— app.mysite.ru ведёт на нужный localhost-порт и реально открывается в браузере.

cloudflared работает как сервис

— systemctl status cloudflared показывает active, переживает перезагрузку.

Cloudflare Access настроен для приватных сервисов

— Grafana, n8n, Home Assistant закрыты авторизацией через email или SSO.

Ссылки

Ссылки