🔔Введение
В процессе разработки программного обеспечения нередко возникает необходимость предоставить доступ к локальному серверу извне. Это может быть полезно по разным причинам: тестирование вебхуков от внешних сервисов, проведение демонстраций клиентам или организация совместной работы с удаленными командами. Представьте, что вы разработали потрясающее веб-приложение, но оно пока доступно только на вашем локальном компьютере. Как показать его друзьям, коллегам или потенциальным инвесторам? В таких случаях использование туннелирования становится отличным решением. Сервисы туннелирования позволяют создать временный публичный URL, который направляет входящий трафик на локальный сервер разработчика. Это обеспечивает возможность протестировать функциональность приложения в условиях, приближенных к реальной среде, без необходимости развертывания на полноценном хостинге или сервере.
Что такое туннель для локального сервера?
Туннель для локального сервера – это технология, позволяющая связать локальный хост (например, http://localhost:8000) с публичным URL, доступным через интернет. Туннель действует как посредник, который перенаправляет все запросы с публичного адреса к вашему локальному серверу. Это делает его удобным инструментом для следующих задач:
-
Работа с API: легко тестировать и отлаживать интеграции с внешними сервисами, отправляющими запросы на ваш сервер.
-
Тестирование вебхуков: многие внешние API, такие как платежные шлюзы, системы уведомлений или мессенджеры, отправляют уведомления о событиях через вебхуки. С помощью туннелирования можно оперативно настроить и отладить эти взаимодействия, не вынося сервер на публичный хостинг.
-
Демонстрации в реальном времени: проводить презентации своих проектов и новых функций без развертывания на внешнем хостинге.
-
Удаленное сотрудничество: обмениваться промежуточными результатами разработки с коллегами и заказчиками.
Как работает туннелирование?
В основе туннелирования лежит простой, но эффективный механизм. Сервис туннелирования запускается на вашем компьютере и создает туннель между вашим локальным сервером и внешним миром. Когда кто-то переходит по публичной ссылке, запрос попадает в туннель и мгновенно направляется к вашему локальному серверу. Такой подход обеспечивает удобный доступ к вашим ресурсам, позволяя демонстрировать и тестировать веб-приложения в их актуальном состоянии.🔖
🔖 Примеры использования
-
Регистрация через социальные сети: интеграция с социальными платформами (например, OAuth для Facebook, Google, Twitter) часто требует, чтобы ваш сервер был доступен извне для обработки ответов после успешной авторизации.
-
Платежный шлюз: платежные системы (такие как Stripe, PayPal или LiqPay) отправляют уведомления о статусе транзакций через вебхуки. С помощью туннеля можно оперативно отладить обработку таких уведомлений и убедиться, что данные обрабатываются корректно.
-
Webhook-интеграции: внешние сервисы, такие как GitHub, Slack или Zapier, используют вебхуки для уведомлений о событиях (например, новый коммит, сообщение в канале или триггер в автоматизации). Туннель позволяет получить эти уведомления в реальном времени.
-
Push-уведомления: отладка push-уведомлений для мобильных приложений или веб-приложений требует, чтобы сервер мог принимать и обрабатывать внешние запросы.
-
Доступ к API третьих сторон: некоторые API требуют проверки доступности вашего сервера (например, при отправке данных на указанный вами URL). Туннелирование помогает создать публичный доступ для этой проверки.
-
Онлайн-демонстрации: если вы показываете прототип или MVP потенциальным клиентам, коллегам или инвесторам, туннель позволяет быстро развернуть текущую версию приложения для презентации.
-
Тестирование внешних интеграций: работа с внешними сервисами, которые требуют доступности вашего сервера (например, почтовые сервисы или системы аналитики), становится проще с использованием туннеля.
-
Работа с ботами для мессенджеров: при разработке ботов для Telegram, WhatsApp или Facebook Messenger необходимо настроить webhook для получения сообщений. Туннелирование позволяет быстро настроить и протестировать взаимодействие бота с вашим сервером.
-
Отладка систем уведомлений: интеграция с системами уведомлений, которые требуют обратного вызова (например, SMS или сервисы уведомлений о доставке), требует проверки с реальными запросами.
🔎 Популярные инструменты туннелирования
Давайте рассмотрим некоторые из популярных инструментов, которые позволяют быстро создать туннель к локальному серверу и сделать его доступным из интернета.
Ngrok
Ngrok – это один из самых известных инструментов для туннелирования, который позволяет создать безопасный туннель от локального сервера к публичному интернету.
-
Плюсы: Поддержка HTTPS, мониторинг запросов в реальном времени, безопасность.
-
Минусы: Бесплатная версия имеет ограничения, постоянные домены доступны только на платном тарифе.
Пример использования: ngrok http 8000 создаст публичный URL, перенаправляющий трафик на http://localhost:8000.
Localtunnel
Localtunnel – это простой и бесплатный инструмент с открытым исходным кодом. Он подходит для быстрого и временного доступа к локальным серверам.
-
Плюсы: Бесплатен, не требует регистрации.
-
Минусы: Меньше функций, чем у Ngrok; URL может быть непостоянным.
-
Пример использования: lt —port 8000 создаст публичный URL для локального порта 8000.
Serveo
Serveo позволяет создать туннель к локальному серверу через SSH, и не требует установки клиента.
-
Плюсы: Легкость использования через SSH, нет необходимости в установке.
-
Минусы: Меньше настроек, меньше поддержки для расширенной конфигурации.
-
Пример использования: ssh -R 80:localhost:8000 serveo.net создаст туннель через SSH.
Pagekite
Pagekite – это мощный и гибкий инструмент для туннелирования, который поддерживает HTTP и SSH протоколы.
-
Плюсы: Поддерживает постоянные домены, подходит для долгосрочных проектов.
-
Минусы: Платные тарифы для некоторых функций, настройка сложнее, чем у Ngrok или Localtunnel.
-
Пример использования: после установки Pagekite позволяет создавать постоянные туннели для различных сервисов.
Cloudflare Tunnel (ранее Argo Tunnel)
Cloudflare Tunnel (Argo Tunnel) позволяет безопасно подключить локальный сервер через сеть Cloudflare.
-
Плюсы: DDoS-защита, бесплатный уровень, высокая скорость.
-
Минусы: Требуется настройка через Cloudflare; некоторые функции ограничены.
-
Пример использования: Cloudflare предоставляет подробные инструкции для настройки туннеля через cloudflared.
👀 Какой инструмент выбрать?
Выбор инструмента для туннелирования во многом зависит от конкретной задачи и требований проекта. Если ваша цель — быстрая демонстрация приложения или тестирование вебхуков, то такие решения, как **Ngrok** или **Localtunnel**, станут отличным выбором. Эти инструменты просты в использовании и позволяют мгновенно получить доступ к локальному серверу через публичный URL, что делает их идеальными для кратковременных задач и тестов.
Когда речь идет о долгосрочных проектах или ситуациях, где особенно важны безопасность и стабильность, стоит рассмотреть **Pagekite** или **Cloudflare Tunnel**. Эти сервисы предлагают более гибкие и защищенные возможности для туннелирования, что делает их подходящими для развертывания приложений с более серьезными требованиями к доступу и безопасности.
Для пользователей, предпочитающих использовать SSH, хорошим вариантом будет **Serveo**. Он удобен тем, что не требует установки дополнительного программного обеспечения. Достаточно использовать стандартный SSH-клиент для создания туннеля, что делает его простым и эффективным решением для разработчиков, знакомых с командной строкой и желающих минимизировать дополнительные зависимости.
Давайте теперь подробнее разберемся с Ngrok и посмотрим, как он работает на деле.
Ngrock
Ngrok — это инструмент для разработчиков, который позволяет создавать безопасные туннели от локального компьютера к публичному интернету. Это особенно полезно, когда вам нужно предоставить доступ к локальному веб-серверу (например, для тестирования вебхуков, демонстраций, разработок), не разворачивая его на реальном сервере.
Установка
Ngrok можно загрузить с официального сайта (https://ngrok.com). В бесплатной версии можно создать один туннель, а в платной доступны дополнительные функции, такие как постоянные поддомены и более высокая производительность.
Установка на macOS:
Если вы используете macOS, вы можете установить Ngrok с помощью Homebrew (менеджер пакетов для macOS).
-
Откройте терминал.
-
Запустите следующую команду для установки Ngrok:
brew install ngrok
-
После установки вы можете проверить установку Ngrok, запустив:
ngrok version
Установка Ngrok в Linux:
-
Откройте терминал.
-
Загрузите последнюю версию Ngrok:
wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
-
Распакуйте скачанный файл:
unzip ngrok-stable-linux-amd64.zip
-
Переместите исполняемый файл ngrok в каталог, доступный из командной строки (PATH).
Рекомендуется использовать каталог
/usr/local/bin
. Для этого понадобится пароль администратора (sudo):sudo mv ngrok /usr/local/bin
-
Проверьте установку Ngrok:
ngrok version
Эта команда должна вывести информацию о версии установленного Ngrok.
Установка Ngrok в Windows:
-
Перейдите на веб-сайт Ngrok и скачайте версию Ngrok для Windows. (Ищите ссылку для скачивания Windows-версии).
-
Извлеките файлы из скачанного ZIP-архива. (Используйте проводник Windows или архиватор, например, 7-Zip или WinRAR).
-
Переместите файл
ngrok.exe
в выбранную вами папку. (Например,C:\ngrok
). -
Добавьте эту папку в системную переменную среды PATH:
-
Кликните правой кнопкой мыши по значку «Этот компьютер» (или «Компьютер») > «Свойства».
-
Нажмите «Дополнительные параметры системы» > «Переменные среды».
-
В разделе «Системные переменные» найдите переменную
Path
, выделите её и нажмите «Изменить». -
Нажмите «Создать» (или «Новый») и добавьте путь к папке Ngrok (например,
C:\ngrok
) и нажмите «OK». (В старых версиях Windows нужно было добавлять путь через точку с запятой;
в конец существующей строки).
-
-
Откройте новое окно командной строки (Command Prompt) и проверьте установку:
ngrok version
Эта команда должна вывести информацию о версии установленного Ngrok.
Аутентификация в Ngrok
Аутентификация вашей учетной записи Ngrok не обязательна, но рекомендуется после установки. Она позволит разблокировать дополнительные функции и избежать ограничений по использованию.
-
Зарегистрируйтесь или войдите в свою учетную запись Ngrok на сайте https://dashboard.ngrok.com.
-
Скопируйте свой токен авторизации (authtoken) с панели управления.
-
В терминале выполните команду для аутентификации:
ngrok authtoken <ваш_токен_авторизации>
Замените
<ваш_токен_авторизации>
на скопированный вами токен.
Теперь вы готовы использовать Ngrok для создания безопасных туннелей к вашему локальному серверу!
Основные возможности
1. Создание туннелей: Ngrok позволяет создать туннель к локальному серверу, который доступен по временной публичной ссылке (например, `https://random-string.ngrok.io`). Запустив Ngrok, вы можете передать URL другим пользователям, чтобы они получили доступ к вашему локальному серверу.
2. Поддержка вебхуков: Ngrok часто используется для тестирования вебхуков, поскольку многие API требуют публичный URL для отправки данных (например, платежные системы, службы уведомлений и другие).
3. Безопасность: Ngrok шифрует соединение через HTTPS и предоставляет возможность авторизации, что повышает безопасность.
4. Журналирование запросов: Ngrok сохраняет запросы и ответы, проходящие через туннель, что полезно для отладки и мониторинга.
Пример использования
1. Запустите локальный сервер (например, на `http://localhost:8000`).
version: '3.8' services: nginx: image: nginx:latest ports: - "8000:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./src:/var/www/html networks: - app_network php: image: php:8.3-fpm volumes: - ./src:/var/www/html networks: - app_network networks: app_network: driver: bridge
2. В командной строке выполните команду:
ngrok http 8000
3. Ngrok выдаст публичный URL (https://41d8-128-199-48-62.ngrok-free.app), который теперь будет направлять трафик на ваш локальный сервер и локальный URL (http://127.0.0.1:4040), который теперь будет отображать отвкеты от сервера
4. Для взаимодействия с внешним API нам нужно создать два маршрута:
-
api/test — этот маршрут будет принимать данные от клиента и отправлять запрос на сторонний сервер.
-
api/webhook — этот маршрут будет принимать ответ от стороннего API, когда он возвращает данные после обработки.
namespace App\Presentation\Api\Action; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Annotation\Route; final class ApiTestAction { #[Route('/api/test', name: 'api_test', methods: ['GET'])] public function __invoke(Request $request) { $callbackUrl = $request->query->get('callback_url'); if ($callbackUrl) { $this->sendRequestToExternalApi($callbackUrl); return new JsonResponse(['status' => 'success', 'message' => 'Request sent successfully.']); } return new JsonResponse(['status' => 'error', 'message' => 'callback_url is required.'], 400); } private function sendRequestToExternalApi($callbackUrl) { // Logic for sending the request to the external API } }
namespace App\Presentation\Api\Action; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Annotation\Route; final class ApiWebhookAction { #[Route('/api/webhook', name: 'api_webhook', methods: ['POST'])] public function __invoke(Request $request) { $data = json_decode($request->getContent(), true); return new JsonResponse(['status' => 'success', 'message' => 'Data received.']); } }
5. Пример запроса с использованием curl
Чтобы протестировать маршрут api/test, мы можем отправить запрос с использованием curl. Например, если вы хотите передать callback_url, который указывает на ваш локальный сервер через Ngrok:
curl -G "http://localhost:8080/api/test" --data-urlencode "callback_url=https://41d8-128-199-48-62.ngrok-free.app/api/webhook"
Запрос успешно выполнен! Получен ответ от публичного сервера.
🏁 Заключение
Сервисы туннелирования – это отличный способ временно дать доступ к локальному серверу, не беспокоясь о сложной настройке сети. Независимо от того, хотите ли вы тестировать вебхуки, делиться своим приложением с командой или показывать прототип клиентам, существует множество инструментов, которые упрощают эту задачу. Попробуйте несколько вариантов и выберите подходящий именно для вашего проекта.
ссылка на оригинал статьи https://habr.com/ru/articles/868970/
Добавить комментарий