Seafile — self-hosted альтернатива Google Drive и Dropbox. Редакции CE и Pro, архитектура с S3-бэкендом, лицензирование, риски и выбор провайдера.
Три сервиса Cloudflare, которые закрывают большинство задач разработчика на бесплатном тарифе: DNS для управления доменами и проксирования, Workers для серверного кода без серверов, Tunnels для доступа к локальным машинам из интернета. Каждый из них работает самостоятельно, но вместе они дают полную инфраструктуру для проекта любого масштаба.
Часть 1. Cloudflare DNS
Что такое Cloudflare DNS
DNS (Domain Name System) — это система, которая превращает доменные имена (mysite.ru) в IP-адреса серверов. Cloudflare DNS — один из самых быстрых и надёжных DNS-хостингов в мире. Он бесплатный, без ограничений по количеству записей и доменов.
Когда вы переносите домен на Cloudflare DNS, вы получаете:
- Быстрое разрешение имён (серверы в 330+ дата-центрах)
- Бесплатную DDoS-защиту на уровне DNS
- Возможность проксирования трафика через Cloudflare (CDN, WAF, SSL)
- Удобную панель управления записями
- Интеграцию со всеми остальными сервисами Cloudflare
Типы 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 |
| NS | Nameserver-серверы домена | anna.ns.cloudflare.com |
| SRV | Служебная запись (порт + приоритет) | Для VoIP, игровых серверов |
| CAA | Какие центры сертификации могут выпускать SSL | letsencrypt.org |
Оранжевое облако: проксирование vs DNS-only
Ключевая фича Cloudflare DNS — переключатель проксирования (оранжевое / серое облако).
flowchart LR
A["Посетитель"] --> B{"Оранжевое облако?"}
B -->|Да| C["Cloudflare CDN"]
C --> D["Ваш сервер"]
B -->|Нет| D🟠 Оранжевое облако (Proxied)
Трафик идёт через Cloudflare:
- IP сервера скрыт — видны только IP Cloudflare
- Работает CDN — статика кэшируется и раздаётся быстрее
- Включается DDoS-защита, WAF, Bot Fight Mode
- Автоматический SSL-сертификат
- Работают 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 не поддерживает проксирование |
Перенос домена на Cloudflare DNS
Перенос означает: вы меняете nameservers у регистратора домена, чтобы Cloudflare стал авторитетным DNS-сервером.
Шаг 1. Добавьте домен
- Откройте dash.cloudflare.com
- Нажмите Add a site
- Введите домен → выберите Free
- Cloudflare просканирует существующие DNS-записи
Шаг 2. Проверьте записи
Cloudflare импортирует записи автоматически, но проверьте:
- A-запись основного домена (IP сервера)
- CNAME для
www - MX-записи (облако должно быть серым)
- TXT-записи (SPF, DKIM, верификация Google/Yandex)
Шаг 3. Замените nameservers
Cloudflare выдаст два NS-адреса. Зайдите в панель регистратора и замените:
| Регистратор | Где менять |
| Reg.ru | Домены → Управление → DNS-серверы |
| Namecheap | Domain List → Manage → Nameservers → Custom DNS |
| GoDaddy | My Products → DNS → Nameservers → Change |
| Beget | Домены → DNS |
| TimeWeb | Домены и поддомены → NS серверы |
Шаг 4. Дождитесь активации
Обычно 10–30 минут, максимум 24 часа. Cloudflare пришлёт email.
После активации:
- DNS управляется через Cloudflare
- Автоматически выпускается SSL-сертификат
- Все сервисы Cloudflare доступны для этого домена
Практические настройки DNS
Подключение сайта к серверу
Тип: A
Имя: @
Значение: 203.0.113.50
Облако: 🟠 (Proxied)Тип: CNAME
Имя: www
Значение: mysite.ru
Облако: 🟠 (Proxied)Подключение Cloudflare Pages
Тип: CNAME
Имя: @
Значение: my-project.pages.dev
Облако: 🟠 (Proxied)Настройка почты (Gmail через Google Workspace)
Тип: MX
Имя: @
Значение: aspmx.l.google.com
Приоритет: 1
Облако: ⚪ (DNS only)Тип: TXT
Имя: @
Значение: v=spf1 include:_spf.google.com ~allEmail Routing (пересылка на Gmail)
Тип: MX
Имя: @
Значение: (Cloudflare подставит автоматически)
Облако: ⚪ (DNS only)Настраивается в разделе Email → Email Routing — Cloudflare сам создаст нужные записи.
Подключение Tunnel
Тип: CNAME
Имя: nas
Значение: <tunnel-id>.cfargotunnel.com
Облако: 🟠 (Proxied)Полезные фичи 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. Полезно для мультитенантных приложений.
Часть 2. Cloudflare Workers
Что такое Workers
Cloudflare Workers — платформа для запуска серверного кода на Edge-серверах Cloudflare. Код выполняется на ближайшем к пользователю сервере из 330+ дата-центров.
Проще говоря: вы пишете функцию на JavaScript или TypeScript, деплоите её — и она работает по всему миру без серверов, без контейнеров, без DevOps.
Зачем нужен
- API-прокси — скрыть ключи от клиента, добавить CORS
- Редиректы — сложная логика перенаправлений без Page Rules
- Обработка вебхуков — принять данные от Telegram, Stripe, GitHub
- Telegram-бот — бот целиком на Workers, без сервера
- SSR — серверный рендеринг для фронтенд-фреймворков
- A/B тестирование — разные версии страницы для разных пользователей
- Геолокация — контент на основе страны или города посетителя
Быстрый старт: первый Worker за 5 минут
Шаг 1. Установите wrangler
npm install -g wrangler
wrangler loginШаг 2. Создайте проект
npm create cloudflare@latest my-worker
cd my-workerВыберите Hello World шаблон.
Шаг 3. Напишите код
Откройте src/index.ts (или index.js):
export default {
async fetch(request) {
return new Response("Привет из Cloudflare Workers!", {
headers: { "Content-Type": "text/plain;charset=UTF-8" },
});
},
};Шаг 4. Запустите локально
wrangler devОткройте http://localhost:8787 — вы увидите ответ Worker.
Шаг 5. Деплой
wrangler deployWorker доступен по адресу https://my-worker.<your-subdomain>.workers.dev.
Практические примеры
API-прокси (скрыть ключи от клиента)
Клиент вызывает ваш Worker, Worker обращается к внешнему API с секретным ключом:
export default {
async fetch(request, env) {
const apiUrl = "https://api.example.com/data";
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${env.API_KEY}`,
"Content-Type": "application/json",
},
});
return new Response(response.body, {
headers: {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
});
},
};Секрет API_KEY хранится в Settings → Variables (зашифрован).
Редирект с логикой
export default {
async fetch(request) {
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);
}
return fetch(request);
},
};Простой Telegram-бот
export default {
async fetch(request, env) {
if (request.method !== "POST") {
return new Response("OK");
}
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");
},
};Установите вебхук:
https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://my-bot.workers.devKV — key-value хранилище
Workers KV — глобальное хранилище ключ-значение. Данные реплицируются по всем Edge-серверам. Идеально для конфигурации, кэша и небольших данных.
Создание KV 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 (бесплатный тариф)
| Параметр | Free | Paid ($5/мес Workers) |
| Чтений в день | 100 000 | Безлимитно |
| Записей в день | 1 000 | Безлимитно |
| Хранилище | 1 ГБ | Безлимитно |
| Макс. размер значения | 25 МБ | 25 МБ |
| Макс. размер ключа | 512 байт | 512 байт |
Другие хранилища Workers
| Хранилище | Тип | Для чего | Бесплатно |
| KV | Key-value | Конфиги, кэш, сессии | 1 ГБ, 100K чтений/день |
| R2 | Object storage | Файлы, картинки, бэкапы | 10 ГБ, egress бесплатно |
| D1 | SQLite | Реляционные данные | 5 ГБ |
| Durable Objects | Stateful | Чаты, счётчики, координация | Только платный план |
Привязка Worker к своему домену
Worker работает на *.workers.dev, но можно привязать к своему домену:
- Откройте домен в Cloudflare → Workers Routes
- Добавьте маршрут:
api.mysite.ru/*→ выберите Worker - Убедитесь, что DNS-запись для
api.mysite.ruсуществует (A или CNAME с оранжевым облаком)
Теперь https://api.mysite.ru/любой-путь обрабатывается вашим Worker.
Лимиты Workers (бесплатный тариф)
| Параметр | Free | Paid ($5/мес) |
| Запросов в день | 100 000 | 10 миллионов (включено) |
| CPU time / запрос | 10 мс | 30 с |
| Размер скрипта | 1 МБ | 10 МБ |
| Количество Workers | 100 | 500 |
| Cron Triggers | 5 | 5 |
| Cold start | < 1 мс | < 1 мс |
Часть 3. Cloudflare Tunnels
Что такое 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. Через дашборд (рекомендуется)
- Откройте dash.cloudflare.com → Zero Trust → Networks → Tunnels
- Нажмите Create a tunnel
- Выберите Cloudflared → задайте имя
- Скопируйте команду установки
cloudflaredдля вашей ОС - Запустите команду на сервере — туннель подключится
- Добавьте 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:
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-tunnelingress перечислите все hostname — cloudflared будет маршрутизировать запросы к нужному сервису.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 — без настройки домена, без авторизации:
cloudflared tunnel --url http://localhost:3000Cloudflare выдаст временный URL вроде https://random-words.trycloudflare.com. Работает, пока запущена команда. Удобно для:
- Быстрой демонстрации
- Тестирования вебхуков
- Показа прототипа коллеге
Практические сценарии
Домашний NAS (Synology)
- Установите
cloudflaredна NAS (Docker или пакет) - Создайте туннель через дашборд
- Добавьте hostname:
nas.mysite.ru→https://localhost:5001 - Включите
noTLSVerify: true(у Synology самоподписанный сертификат) - Опционально: добавьте Cloudflare Access для авторизации
Webhook для разработки
- Запустите Quick Tunnel:
cloudflared tunnel --url http://localhost:8080 - Получите URL
- Укажите его как webhook URL в Telegram / Stripe / GitHub
- Запросы приходят на ваш localhost
Home Assistant
- Создайте туннель
- Hostname:
home.mysite.ru→http://localhost:8123 - В
configuration.yamlHome Assistant добавьте:
http:
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
- 0.0.0.0/0n8n (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 Tunnel | ngrok | Tailscale Funnel |
| Цена | Бесплатно | Бесплатно (лимиты) | Бесплатно (лимиты) |
| Свой домен | Да | Только платно | Нет |
| Несколько хостов | Да (ingress) | Один на туннель | Один |
| CDN и защита | Включены | Нет | Нет |
| Access (авторизация) | 50 пользователей бесплатно | OAuth (платно) | Tailscale ACL |
| Постоянный URL | Да | Только платно | Да |
| Системный сервис | Да | Да (платно) | Да |
Общий чеклист
DNS
Workers
Tunnels
Ссылки
DNS
Workers
Tunnels
По теме
База знаний: Cloudflare — бесплатная защита, ускорение и управление доменами для любого сайта
База знаний: Cloudflare Pages — бесплатный хостинг статических сайтов с деплоем из GitHub
База знаний: GitHub Pages — бесплатный хостинг статических сайтов прямо из GitHub