wl·solution
Гайды · Домены и TLS
6 мин чтенияобновлено 2026-06-30

Cloudflare orange-cloud для тенантов: настройка и предсказуемые ошибки

Зачем включён proxied=true по умолчанию, какие токены и zone_id нужны, что делать если у клиента свой регистратор и его NS-записи не делегированы нам.

Когда мы создаём поддомен для нового тенанта на нашем apex (brand.apps.wl-solution.com), мы по умолчанию создаём A-запись в Cloudflare с proxied=true. Это «оранжевое облако» — трафик идёт через CDN Cloudflare, а не напрямую на VPS клиента.

Реализация в api/internal/deployments/dns.go: функция ensureRecord проверяет, что cloudflare.token и cloudflare.zone_id заданы, и шлёт POST /zones/<id>/dns_records с proxied: true. Если оператор оставил настройки пустыми, шаг скипается, и клиент получает поддомен с прямым IP — без CDN-защиты.

Что даёт оранжевое облако

  • DDoS-защита L4/L7 «из коробки» — Cloudflare держит фронт, до нашего VPS пакеты не доходят
  • Кеширование статики (/_next/static, /assets/*) — экономия трафика на VPS
  • Скрытие реального IP сервера — снижает риск таргетированных атак на конкретного клиента
  • Бесплатные TLS-сертификаты на edge — Caddy на VPS всё равно держит свой Let's Encrypt для origin-pull

Какие настройки заводить

В /admin/settings нужны два ключа: cloudflare.token (Zone:DNS:Edit для конкретной зоны) и cloudflare.zone_id (32-символьная HEX-строка из дашборда Cloudflare → Overview). Токен лучше создавать с ограниченным scope — на одну зону.

apex_domain (plaintext) задаёт суффикс, на котором создаются поддомены тенантов. Менять его потом дорого — придётся миграцию доменов делать по всем работающим тенантам.

Кастомный домен клиента — отдельный путь

Если у клиента свой apex (acme.io), мы НЕ можем создать A-запись в его зоне Cloudflare без его токена. Поэтому путь подключения такой: клиент в кабинете говорит «привязать acme.io», мы говорим IP, клиент сам добавляет A-запись (proxied на его усмотрение), DNS-pre-check в deployments/domains.go убеждается, что A-запись резолвится в нужный IP, после чего Caddy на VPS выпускает Let's Encrypt.

Альтернатива — клиент делегирует NS-ы своей зоны нам (мы поднимаем зону у себя в Cloudflare), и тогда мы автоматически делаем proxied=true. Удобно для VIP-клиентов, но требует партнёрского аккаунта.

Что сломается, если CF не настроен

Если cloudflare.token / zone_id пустые, ensureRecord залогирует warn и продолжит — тенант получит работающий поддомен на прямом IP. Caddy выпустит сертификат, всё будет работать, но без CDN и без DDoS-защиты.

Если токен есть, а zone_id неверный — Cloudflare ответит 7003 (zone not found), функция вернёт ошибку, job deploy.provision упадёт, оператор получит алерт в Telegram. Лечится за минуту через /admin/settings.

Связанные гайды

Хотите развернуть свой тенант на wl-installer?

Аренда: 5 минут от заказа до боевого URL. Покупка с исходниками: 1–5 рабочих дней.