Это не совсем противостояние. Cloudflare Tunnel (cloudflared) и PortPreview живут в разных комнатах. Cloudflare Tunnel держит сервис постоянно онлайн за краем Cloudflare — Zero Trust, именованные туннели, кастомные домены. PortPreview — для следующих двадцати минут вашей dev-сессии: тестирование вебхуков, мобильный QA, поделиться веткой с дизайнером. Выбор между ними в основном зависит от того, какая задача у вас на самом деле.
В чём хорош Cloudflare Tunnel
cloudflared построен для одного: вывести сервис в интернет, не открывая ни одного входящего порта и не раскрывая ваш origin IP. Запустите его на сервере, привяжите именованный туннель к имени хоста на вашем домене Cloudflare, и трафик потечёт через край Cloudflare к вашему origin по исходящему соединению, которое инициировала ваша машина.
Что он делает хорошо:
- Продакшен-маршрутизация. Функция именованного туннеля долговечна. Можно запустить cloudflared как сервис, и имя хоста продолжает работать после перезапусков.
- Политики доступа Zero Trust. Защитите туннель за SSO, MFA или IP-allowlist для экспонирования внутренних инструментов.
- Кастомные домены. Приведите свой домен на Cloudflare. Туннель терминируется на
ваш-домен.com, а не на поддомене вендора. - WARP-маршрутизация. Достучитесь до приватных сервисов с любого устройства в сети Cloudflare без настройки VPN.
Ничто из этого не про отладку вебхуков.
Где Cloudflare Tunnel становится неудобным для dev
Режим quick tunnel (cloudflared tunnel --url localhost:3000) — это самое близкое к dev-инструменту, к чему подходит cloudflared, и он работает. Вы получаете URL *.trycloudflare.com, указывающий на ваш локальный порт. Но:
- URL ротируется каждую сессию, как у большинства dev-туннелей.
- Нет встроенного инспектора запросов. Вы видите то, что логирует ваш dev-сервер, и больше ничего. Захват payload вебхука для повтора позже требует прикручивания отдельного прокси или логгера.
- Настройка именованных туннелей (версия со стабильным URL) включает аккаунт Cloudflare, DNS-записи и конфиг-файл. Оправдано для долгоживущего сервиса; избыточно для сессии итераций вебхука.
Где вписывается PortPreview
PortPreview — это CLI для туннелирования localhost для dev-цикла. Одна команда, публичный HTTPS-URL, захват и повтор запросов встроены.
npx portpreview 3000
Мы оптимизируем момент между «я изменил обработчик вебхука Stripe» и «я знаю, работает ли он». Этот момент должен длиться секунды. Захватите payload, почините обработчик, повторяйте, пока не станет зелёным, всё без повторного запуска upstream-события.
Бок о бок
| Потребность | Cloudflare Tunnel | PortPreview |
|---|---|---|
| Быстрая сессия отладки вебхука | Возможно (quick tunnel) | Сделан для этого |
| Захват и повтор запросов | Нет | Да |
| Стабильное именованное имя хоста | Да (с настройкой) | Не главный фокус |
| Кастомный домен | Да | Поддомен туннеля |
| Политика доступа Zero Trust | Да | Нет |
| Сложность настройки | Низкая для quick, средняя для named | Одна команда |
| Работать вечно как сервис | Да | Спроектирован для сессий |
| Open-source клиент | Да (cloudflared) | Да |
Когда использовать каждый
Используйте Cloudflare Tunnel, когда
- Нужен сервис онлайн 24/7 без открытия портов файрвола.
- Нужен SSO-защищённый доступ к внутреннему дашборду или админ-инструменту.
- Нужен стабильный URL с кастомным доменом, подкреплённый настоящим CA-сертификатом и вашим существующим DNS Cloudflare.
- Вы уже на Cloudflare, и предельная стоимость настройки мала.
Используйте PortPreview, когда
- Вы итерируете обработчик вебхука и хотите повтор в один клик.
- Хотите поделиться веткой с дизайнером на десять минут.
- Тестируете OAuth-колбэки или мобильные потоки без настройки DNS.
- Предпочитаете не управлять аккаунтом Cloudflare только ради теста события Stripe.
Они хорошо сосуществуют
Несколько команд, с которыми мы говорили, используют оба. Cloudflare Tunnel для всегда включённого внутреннего инструмента, которому нужен фиксированный URL и SSO. PortPreview для ежедневной отладки вебхуков, которой нужны повтор и одна команда. Они не конфликтуют — просто обслуживают разные части дуги dev-to-prod.
Если вы также взвешиваете ngrok или localtunnel, эти сравнения могут быть более прямо релевантны. Запишитесь в лист ожидания PortPreview для стороны dev-цикла.