От локального сервера к публичному доступу: лучшие инструменты для тоннелей

от автора


🔔Введение

В процессе разработки программного обеспечения нередко возникает необходимость предоставить доступ к локальному серверу извне. Это может быть полезно по разным причинам: тестирование вебхуков от внешних сервисов, проведение демонстраций клиентам или организация совместной работы с удаленными командами. Представьте, что вы разработали потрясающее веб-приложение, но оно пока доступно только на вашем локальном компьютере. Как показать его друзьям, коллегам или потенциальным инвесторам? В таких случаях использование туннелирования становится отличным решением. Сервисы туннелирования позволяют создать временный публичный 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).

  1. Откройте терминал.

  2. Запустите следующую команду для установки Ngrok: brew install ngrok

  3. После установки вы можете проверить установку Ngrok, запустив: ngrok version

Установка Ngrok в Linux:

  1. Откройте терминал.

  2. Загрузите последнюю версию Ngrok:

    wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
  3. Распакуйте скачанный файл:

    unzip ngrok-stable-linux-amd64.zip
  4. Переместите исполняемый файл ngrok в каталог, доступный из командной строки (PATH).

    Рекомендуется использовать каталог /usr/local/bin. Для этого понадобится пароль администратора (sudo):

    sudo mv ngrok /usr/local/bin
  5. Проверьте установку Ngrok:

    ngrok version

    Эта команда должна вывести информацию о версии установленного Ngrok.

Установка Ngrok в Windows:

  1. Перейдите на веб-сайт Ngrok и скачайте версию Ngrok для Windows. (Ищите ссылку для скачивания Windows-версии).

  2. Извлеките файлы из скачанного ZIP-архива. (Используйте проводник Windows или архиватор, например, 7-Zip или WinRAR).

  3. Переместите файл ngrok.exe в выбранную вами папку. (Например, C:\ngrok).

  4. Добавьте эту папку в системную переменную среды PATH:

    • Кликните правой кнопкой мыши по значку «Этот компьютер» (или «Компьютер») > «Свойства».

    • Нажмите «Дополнительные параметры системы» > «Переменные среды».

    • В разделе «Системные переменные» найдите переменную Path, выделите её и нажмите «Изменить».

    • Нажмите «Создать» (или «Новый») и добавьте путь к папке Ngrok (например, C:\ngrok) и нажмите «OK». (В старых версиях Windows нужно было добавлять путь через точку с запятой ; в конец существующей строки).

  5. Откройте новое окно командной строки (Command Prompt) и проверьте установку: ngrok version Эта команда должна вывести информацию о версии установленного Ngrok.

Аутентификация в Ngrok

Аутентификация вашей учетной записи Ngrok не обязательна, но рекомендуется после установки. Она позволит разблокировать дополнительные функции и избежать ограничений по использованию.

  1. Зарегистрируйтесь или войдите в свою учетную запись Ngrok на сайте https://dashboard.ngrok.com.

  2. Скопируйте свой токен авторизации (authtoken) с панели управления.

  3. В терминале выполните команду для аутентификации:

    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 нам нужно создать два маршрута:

  1. api/test — этот маршрут будет принимать данные от клиента и отправлять запрос на сторонний сервер.

  2. 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *