Как поделиться локальным сайтом WordPress или Drupal через Cloudflare Tunnel (бесплатно)
При локальной разработке с использованием 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 позволяет запускать ваш сайт локально и публиковать его при необходимости.
Предварительные требования
Прежде чем мы начнем, убедитесь, что у вас есть:
- Компьютер Mac, Linux или Windows с установленным Docker
- Установленный и настроенный DDEV (официальное руководство по установке или ознакомьтесь с моим руководством по настройке DDEV для WordPress и Drupal)
- Рабочий проект DDEV (мы будем использовать примеры сайтов, такие как
myproject.ddev.site
иclient-site.ddev.site
) - Базовое понимание командной строки
- Аккаунт Cloudflare не требуется для быстрых туннелей (метод, описанный в этом руководстве)
Примечание: Если вам нужны постоянные 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.