Laravel и TunnelHunt: Демонстрация локального сайта в одну команду
Разработка на Laravel — это удовольствие. Фреймворк предоставляет элегантные решения для множества задач, а команда php artisan serve позволяет мгновенно запустить локальный сервер. Но есть одна проблема, с которой сталкивается каждый разработчик: ваш локальный сайт виден только вам.
Что делать, если нужно:
- Протестировать вебхук от Telegram, GitHub или любого другого внешнего сервиса?
- Показать фронтенд-разработчику работающее API?
- Быстро продемонстрировать результат заказчику, не тратя часы на деплой?
Стандартные решения — поднять staging-сервер, настроить CI/CD, возиться с DNS — требуют времени и сил. Но есть способ проще.
Сегодня мы представляем пакет, который глубоко интегрируется в экосистему Laravel и позволяет сделать локальный сайт публичным с помощью одной-единственной команды.
Проблема: php artisan serve работает только для вас
Команда php artisan serve запускает сервер на 127.0.0.1 (localhost). Этот адрес доступен только с вашего компьютера. Любой внешний сервис, пытающийся отправить запрос на http://127.0.0.1:8000, будет стучаться в свою собственную “дверь”, а не в вашу.
Чтобы принять входящий запрос извне, нужен публичный IP-адрес и открытый порт. TunnelHunt решает эту задачу, создавая безопасный туннель от нашего сервера до вашего локального приложения. А наш новый пакет делает этот процесс частью привычного Laravel-воркфлоу.
Сценарий: Тестируем вебхуки от Telegram-бота
Представим, вы разрабатываете Telegram-бота. Когда пользователь отправляет вашему боту сообщение или нажимает на кнопку, Telegram отправляет на ваш сервер POST-запрос (вебхук) с информацией об этом событии. Чтобы отладить логику бота, вам нужно дать Telegram публичный URL, который будет вести на ваше локальное приложение.
Шаг 1: Установка пакета
Если вы еще этого не сделали, установите наш пакет через Composer. Это займет меньше минуты.
composer require tunnelhunt/laravel-tunnelhunt
Пакет использует механизм автообнаружения Laravel, поэтому никакой дополнительной настройки не требуется. Новая команда сразу готова к работе.
Шаг 2: Запускаем туннель
Теперь, вместо php artisan serve, выполните в терминале новую команду:
php artisan serve:tunnel
Пакет сначала запустит локальный сервер в фоновом режиме, а затем немедленно инициирует SSH-соединение для создания туннеля.
Шаг 3: Получаем публичный URL
Через несколько секунд в вашей консоли появится вывод, содержащий самое главное — временный публичный адрес вашего сайта:
INFO Laravel development server started on http://127.0.0.1:8000
INFO Starting tunnelhunt.ru tunnel with 'nokey' plan...
INFO Waiting for tunnelhunt.ru to provide a public URL...
Your public URL will appear in the SSH output below.
Your public URL is: http://somename-adjective-1234.nokey.tunnelhunt.ru
Вот и все! Теперь адрес http://somename-adjective-1234.nokey.tunnelhunt.ru можно указать в настройках вашего бота через BotFather (командой /setwebhook).
Шаг 4: Отладка
Когда пользователь напишет вашему боту, Telegram отправит запрос на этот URL, а TunnelHunt перенаправит его на ваш локальный сервер. Вы увидите запрос в логах Laravel, сможете использовать dd() или отладчик Xdebug так, как будто запрос пришел с вашего же компьютера.
Когда закончите, просто нажмите Ctrl+C в терминале. Туннель закроется, и ваш сайт снова станет локальным.
Дополнительные опции
Пакет был бы неполным без возможности кастомизации.
- Запустить на другом порту:
php artisan serve:tunnel --port=3000 - Использовать Pro-аккаунт для фиксированного адреса:
php artisan serve:tunnel --plan=pro
Заключение
Интеграция TunnelHunt напрямую в Laravel Artisan — это наш способ сделать жизнь разработчиков еще немного проще. Теперь для решения повседневных задач, таких как отладка вебхуков или демонстрация работы, не нужно покидать привычную среду и тратить время на сложные настройки.
Этот подход идеально подходит для:
- Разработки чат-ботов
- API-эндпоинтов
- Тестирования OAuth-авторизации
- Демонстрации frontend-части, которая обращается к вашему локальному API
Просто, быстро и безопасно. Установите пакет и попробуйте сами.