>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
CSS

Jak udostępnić lokalny port w internecie bez zbędnych komplikacji

Znana sytuacja: uruchamiasz backend na swojej maszynie lokalnej, konfigurujesz integrację z zewnętrzną usługą jak Stripe czy Telegram, a potem musisz przetestować webhook. Nie ma zewnętrznego dostępu do twojego localhost:8000, zamawianie statycznego adresu IP wydaje się zbyt kłopotliwe, a wdrażanie środowiska staging tylko dla kilku żądań trwa zbyt długo.

Zazwyczaj w takich momentach instynktownie sięgasz po ngrok lub podobne usługi. Ale komercyjne alternatywy zawsze mają irytujące ograniczenia: limity transferu, adresy URL zmieniające się przy każdym restarcie lub płatne subskrypcje za podstawowe funkcje. Ostatnio natknąłem się na tunnelto — narzędzie open source napisane w Rust, które robi dokładnie to, co obiecuje, bez zbędnych komplikacji.

Co to za narzędzie

Projekt tunnelto pozwala udostępnić lokalny serwer WWW w publicznym internecie poprzez tunel. Uruchamiasz jedno polecenie w terminalu, otrzymujesz prawidłowy publiczny adres URL i przekazujesz go zewnętrznym usługom lub klientom do celów demonstracyjnych.

Główną zaletą jest to, że zarówno klient, jak i serwer są napisane w Rust z wykorzystaniem asynchronicznej tokio. Przekłada się to na niewielkie zużycie pamięci i szybkie przetwarzanie przychodzących połączeń. Żadnych ciężkich środowisk uruchomieniowych ani procesów w tle pochłaniających gigabajty RAM.

Repozytorium projektu jest dostępne pod adresem https://github.com/tunneltodev/tunnelto.

Jak to działa w praktyce

Instalacja zajmuje kilka minut. Jeśli używasz macOS, narzędzie instaluje się przez Homebrew:

brew install agrinman/tap/tunnelto

Jeśli masz już toolchain Rust, możesz zbudować pakiet przez Cargo:

cargo install tunnelto

Dla innych systemów autor przygotował skompilowane pliki binarne w sekcji Releases na GitHub.

Szybki start

Załóżmy, że masz aplikację webową działającą lokalnie na porcie 8000. Możesz udostępnić ją światu zewnętrznemu tym poleceniem:

tunnelto --port 8000

Po wykonaniu narzędzie otwiera tunel i natychmiast podaje działający adres. Wszystkie żądania przychodzące na ten adres z internetu są błyskawicznie przekazywane do twojego lokalnego portu.

Przydatne parametry

W codziennej pracy często potrzebujesz dodatkowej konfiguracji. Oto flagi, które oszczędzają czas:

  • --subdomain ustawia stałą subdomenę, dzięki czemu nie musisz zmieniać adresu URL w ustawieniach webhooka po każdym restarcie
  • --scheme przełącza protokół między http a https, jeśli twoja lokalna usługa wymaga bezpiecznego połączenia
  • --dashboard-address uruchamia lokalny interfejs do inspekcji i przeglądania przychodzących żądań
  • --key akceptuje klucz API do autoryzacji tunelu

Przykładowe polecenie z określoną subdomeną:

tunnelto --port 3000 --subdomain my-test-app

Do czego to się przydaje

Podczas developmentu istnieje kilka scenariuszy, w których tunelowanie oszczędza godziny pracy:

  1. Debugowanie przychodzących webhooków od systemów płatności, komunikatorów czy dostawców OAuth bezpośrednio w lokalnym debugerze z punktami przerwania.
  2. Testowanie aplikacji mobilnej na prawdziwym smartfonie połączonym z siecią komórkową, bez konfigurowania routera Wi-Fi.
  3. Szybkie pokazywanie układów lub prototypów kolegom, podczas gdy kod nie został jeszcze wypchnięty do repozytorium ani wdrożony na serwer testowy.
  4. Weryfikacja certyfikatów HTTPS i nagłówków bezpieczeństwa przed wydaniem.

Osobiste wrażenia

W README wspomniano o możliwości samodzielnego hostowania komponentu serwera, choć dokumentacja nie zawiera szczegółowych instrukcji. Jeśli pełna prywatność ruchu jest dla ciebie ważna, będziesz musiał zagłębić się w kod źródłowy i wdrożyć relay na własnym VPS.

Projekt nie ma zbyt wielu gwiazdek (około 400), a commity nie pojawiają się codziennie, ale w podstawowych zadaniach narzędzie działa niezawodnie. Szybko się uruchamia, nie wymaga rejestracji do podstawowego tunelowania i robi dokładnie jedną rzecz. Jeśli szukasz prostej alternatywy open source dla ngrok, warto zajrzeć do repozytorium i wypróbować.

Powiązane projekty