Назад к блогу

Как поделиться локальным сайтом WordPress или Drupal через Cloudflare Tunnel (бесплатно)

2025-10-148 min read

При локальной разработке с использованием DDEV вам может потребоваться поделиться своей работой с клиентами, протестировать веб-перехватчики (webhooks) из внешних сервисов или сотрудничать с удаленными членами команды. Cloudflare Tunnel предоставляет безопасный и простой способ открыть ваши локальные сайты для интернета без открытия портов брандмауэра или сложной настройки сети.

Что такое Cloudflare Tunnel?

Cloudflare Tunnel (ранее Argo Tunnel) является частью решения для сетевой безопасности Zero Trust от Cloudflare. Он создает безопасное, только исходящее соединение от вашей локальной машины к сети периферийных вычислений Cloudflare, которая затем направляет публичный трафик на ваши локальные сервисы. Это означает:

  • Нет открытых входящих портов — ваш брандмауэр остается защищенным
  • Не требуется публичный IP-адрес — работает за NAT и корпоративными брандмауэрами
  • Бесплатно для разработки — быстрые туннели Cloudflare бесплатны
  • HTTPS по умолчанию — автоматическое шифрование SSL/TLS
  • Простая настройка — достаточно одной команды для начала работы

Что такое DDEV?

DDEV — это локальная среда разработки на базе Docker, которая упрощает настройку PHP-проектов (Drupal, WordPress, Laravel и т. д.) с минимальной конфигурацией. Он предоставляет:

  • Предварительно настроенные контейнеры для веб-сервера, базы данных и других сервисов
  • Поддержку нескольких версий PHP
  • Встроенные SSL-сертификаты для локального HTTPS
  • Инструменты командной строки для общих задач разработки

Использование DDEV с Cloudflare Tunnel позволяет запускать ваш сайт локально и публиковать его при необходимости.

Предварительные требования

Прежде чем мы начнем, убедитесь, что у вас есть:

Примечание: Если вам нужны постоянные URL-адреса с пользовательскими доменами (будет рассмотрено позже), вам понадобится бесплатный аккаунт Cloudflare.

Шаг 1: Установка Cloudflared

Демон cloudflared — это клиент, который создает соединение туннеля. Установка зависит от платформы:

macOS (Homebrew)

brew install cloudflared

Linux (Debian/Ubuntu)

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb

Linux (RHEL/CentOS)

wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
sudo rpm -i cloudflared-linux-x86_64.rpm

Windows

Загрузите установщик со страницы загрузок Cloudflare или используйте Chocolatey:

choco install cloudflared

Проверьте установку:

cloudflared --version

Шаг 2: Запуск вашего сайта DDEV

Убедитесь, что ваш проект DDEV запущен. Перейдите в каталог вашего проекта и запустите DDEV:

cd /path/to/your/project
ddev start

Ваш сайт будет доступен локально по адресу, похожему на https://yourproject.ddev.site. Проверьте его работоспособность, открыв в браузере.

Шаг 3: Создание Cloudflare Tunnel к вашему сайту DDEV

Вот где начинается самое интересное. Выполните одну команду, и cloudflared автоматически создаст туннель с публичным URL-адресом. Настройка аккаунта, аутентификация или конфигурация не требуются. Базовый синтаксис:

cloudflared tunnel --url <local-url> --http-host-header <hostname>

Пример 1: Сайт моего проекта

cloudflared tunnel --url https://myproject.ddev.site/ --http-host-header myproject.ddev.site

Пример 2: Сайт клиента

cloudflared tunnel --url https://client-site.ddev.site/ --http-host-header client-site.ddev.site

После выполнения этой команды вы увидите вывод, похожий на:

2025-10-14T10:30:15Z INF Спасибо, что попробовали Cloudflare Tunnel. Использование его без аккаунта Cloudflare — быстрый способ поэкспериментировать. Однако имейте в виду, что у этих туннелей без аккаунта нет гарантии доступности. Если вы планируете использовать туннели в продакшене, вам следует использовать предварительно созданный именованный туннель, следуя инструкции: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/
2025-10-14T10:30:15Z INF Запрос нового быстрого туннеля на trycloudflare.com...
2025-10-14T10:30:16Z INF +--------------------------------------------------------------------------------------------+
2025-10-14T10:30:16Z INF | Ваш быстрый туннель создан! Посетите его по адресу (может потребоваться время для доступности): |
2025-10-14T10:30:16Z INF | https://randomly-generated-subdomain.trycloudflare.com |
2025-10-14T10:30:16Z INF +--------------------------------------------------------------------------------------------+

Скопируйте сгенерированный URL-адрес (например, https://randomly-generated-subdomain.trycloudflare.com) и поделитесь им со всеми, кому нужен доступ к вашему локальному сайту!

Понимание параметров команды

Давайте разберем, что делает каждый параметр:

  • --url: Локальный URL, по которому запущен ваш сайт DDEV. Используйте HTTPS, если ваш сайт DDEV использует SSL (что по умолчанию).
  • --http-host-header: Это критически важно для DDEV. Это указывает cloudflared перенаправить правильное имя хоста в заголовке HTTP Host. DDEV маршрутизирует запросы на основе этого заголовка, поэтому без него вы получите «404 Not Found» или увидите не тот сайт.

Почему необходим --http-host-header?

Маршрутизатор DDEV использует виртуальный хостинг, что означает, что несколько сайтов могут работать на одном IP-адресе и порту. Маршрутизатор определяет, какой сайт обслуживать, на основе заголовка Host в HTTP-запросе.

Когда трафик проходит через Cloudflare Tunnel, заголовок Host обычно представляет собой домен, сгенерированный Cloudflare (например, randomly-generated-subdomain.trycloudflare.com). Указав --http-host-header myproject.ddev.site, мы переопределяем это и гарантируем, что DDEV увидит правильное имя хоста.

Использование именованных туннелей для постоянных URL-адресов

Описанный выше метод быстрого туннеля отлично подходит для разового обмена, но URL-адрес меняется при каждом запуске команды, и нет гарантии доступности. Если вам нужен постоянный URL-адрес с вашим собственным пользовательским доменом (например, myproject.example.com), вы можете создать именованный туннель. Это требует бесплатного аккаунта Cloudflare.

1. Аутентификация в Cloudflare

cloudflared tunnel login

Это откроет браузер для аутентификации в вашем аккаунте Cloudflare.

2. Создание именованного туннеля

cloudflared tunnel create my-ddev-tunnel

Это сгенерирует идентификатор туннеля и файл учетных данных.

3. Создание файла конфигурации

Создайте ~/.cloudflared/config.yml:

tunnel: <TUNNEL-ID>
credentials-file: /Users/yourusername/.cloudflared/<TUNNEL-ID>.json

ingress:
- hostname: mysite.example.com
service: https://myproject.ddev.site
originRequest:
httpHostHeader: myproject.ddev.site
noTLSVerify: true
- service: http_status:404

Примечание: noTLSVerify: true требуется, поскольку DDEV использует самоподписанные сертификаты.

4. Маршрутизация домена

cloudflared tunnel route dns my-ddev-tunnel mysite.example.com

5. Запуск туннеля

cloudflared tunnel run my-ddev-tunnel

Теперь ваш сайт доступен по адресу https://mysite.example.com с постоянным URL-адресом!

Общие сценарии использования

1. Демонстрации для клиентов

Делитесь сайтами в процессе разработки с клиентами без развертывания на промежуточных серверах:

cloudflared tunnel --url https://client-demo.ddev.site/ --http-host-header client-demo.ddev.site

Отправьте сгенерированный URL-адрес клиенту для немедленной обратной связи.

2. Тестирование веб-перехватчиков

Тестируйте веб-перехватчики от таких сервисов, как Stripe, GitHub или Twilio, которым требуется публичный URL-адрес:

cloudflared tunnel --url https://webhooks.ddev.site/ --http-host-header webhooks.ddev.site

Настройте веб-перехватчик во внешнем сервисе, чтобы он указывал на ваш URL Cloudflare.

3. Тестирование на мобильных устройствах

Тестируйте адаптивный дизайн на реальных мобильных устройствах, не находясь в одной сети:

cloudflared tunnel --url https://mobile-test.ddev.site/ --http-host-header mobile-test.ddev.site

Откройте URL Cloudflare на своем телефоне, чтобы протестировать на реальных устройствах.

4. Удаленное сотрудничество

Поделитесь своей средой разработки с удаленными коллегами:

cloudflared tunnel --url https://team-collab.ddev.site/ --http-host-header team-collab.ddev.site

Ваша команда сможет получить доступ к сайту так, как будто они запускают его локально.

Устранение неполадок

Получение 404 или не того сайта

Убедитесь, что вы используете параметр --http-host-header с правильным именем хоста DDEV:

cloudflared tunnel --url https://mysite.ddev.site/ --http-host-header mysite.ddev.site

Ошибки SSL-сертификата

Если вы используете именованный туннель с файлом конфигурации, добавьте noTLSVerify: true в раздел запроса источника, поскольку DDEV использует самоподписанные сертификаты.

Туннель не запускается

Проверьте, запущен ли cloudflared:

ps aux | grep cloudflared

При необходимости завершите любые существующие процессы:

pkill cloudflared

Локальный сайт DDEV недоступен

Проверьте, запущен ли ваш сайт DDEV:

ddev describe

Убедитесь, что используемый вами URL соответствует выводу.

Соображения безопасности

Хотя Cloudflare Tunnel безопасен по своей сути, имейте в виду следующее:

  • Не открывайте производственные базы данных — туннелируйте только сайты разработки с неконфиденциальными данными
  • Быстрые туннели временные — URL-адреса истекают, и на них не следует полагаться в продакшене
  • Используйте аутентификацию — для конфиденциальных проектов добавьте аутентификацию Cloudflare Access к вашим именованным туннелям
  • Отслеживайте доступ к туннелям — проверяйте аналитику Cloudflare, чтобы узнать, кто получает доступ к вашим туннелям
  • Завершайте работу туннелей, когда закончите — используйте Ctrl+C для остановки туннеля, когда закончите

Альтернатива: встроенная команда share в DDEV

В DDEV также есть встроенная команда ddev share, которая использует ngrok. Однако Cloudflare Tunnel предлагает ряд преимуществ:

  • Бесплатно без ограничений по частоте (на бесплатном тарифе ngrok есть ограничения)
  • Лучшая производительность благодаря глобальной сети Cloudflare
  • Интеграция с Cloudflare Zero Trust для расширенных функций
  • Постоянные именованные туннели с пользовательскими доменами

Тем не менее, ddev share еще проще, если вам нужно что-то быстрое и вы не хотите устанавливать дополнительные инструменты.

Упрощение процесса с помощью ddev-share-cf

Чтобы сделать этот процесс еще проще, я создал дополнение DDEV ddev-share-cf. Это дополнение интегрирует Cloudflare Tunnel непосредственно в DDEV, позволяя вам делиться локальными сайтами с помощью простой команды без ручного управления cloudflared или файлами конфигурации.

Установка

Установите дополнение одной командой:

ddev get davo20019/ddev-share-cf

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

После установки просто выполните:

ddev share-cf

Дополнение автоматически обрабатывает всю конфигурацию туннеля, делая его таким же простым, как встроенная команда share DDEV, но со всеми преимуществами Cloudflare Tunnel.

Дополнительные ресурсы

Оставайтесь в курсе

Получайте последние статьи и идеи в свой почтовый ящик.

Unsubscribe anytime. No spam, ever.