Пишу свой ngrok на Go
Дневник разработки fxTunnel: как из двух строчек io.Copy вырос self-hosted аналог ngrok на Go — протокол, туннели, TLS, платежи, SEO.
Пишу свой ngrok на Go: идея и первый прототип
Все нормальные люди готовят оливье, а я сижу и злюсь на ngrok. У меня куча проектов на локалке: бот для Telegram, API для мобильного приложения, веб-сервис для клиента.
Пишу свой ngrok на Go: от консоли к продукту за один день
У меня работающий туннель, но пользоваться им может только человек, который не боится терминала и YAML-конфигов. То есть я.
Пишу свой ngrok на Go: первый деплой и localhost, который не localhost
Новый год, каникулы, другие дела. 26 января я наконец вернулся к fxTunnel с одной целью: поднять на боевом сервере и начать пользоваться по-настоящему.
Пишу свой ngrok на Go: auto-refresh, 404 и первая боевая фича
И начинают всплывать реальные проблемы — те, которые на localhost никогда не увидишь.
Пишу свой ngrok на Go: полный редизайн GUI — второй заход
Всё работает: сервер крутится, клиент переподключается, JWT обновляется автоматически. Самое время заняться тем, что видит пользователь — интерфейсом GUI-клиента.
Пишу свой ngrok на Go: безопасность за один день
Но безопасность пока на уровне «авось никто не найдёт». Это не подход. Если сервис торчит в интернет — его найдут. Боты, сканеры, случайные люди.
Пишу свой ngrok на Go: тесты, гонки и паники
Утром закрыл безопасность. Теперь — тесты. До этого момента в проекте был ноль тестов. Продукт работал в продакшене месяц вообще без тестов.
Пишу свой ngrok на Go: выжимаем скорость
Безопасность есть, тесты есть, баги починены. Теперь — скорость. fxTunnel работает, но каждое соединение через туннель добавляет задержку.
Пишу свой ngrok на Go: инспекция трафика — свой мини-Charles
Последний день активной разработки. fxTunnel работает, оптимизирован, протестирован, защищён. Но есть одна фича, которую хочу с самого начала: инспекция трафика.
Пишу свой ngrok на Go: итоги — от идеи до 26 релизов за 5 недель
Фактически — 7 рабочих дней. С месячным перерывом посередине. Полноценный self-hosted аналог ngrok: Один сервер обслуживает всё: API, веб-панель, туннели, раздачу клиентов.
Пишу свой ngrok на Go: кастомные домены и автоматический TLS
У fxTunnel есть поддомены — myapp.tunnel.example.com. Работает. Но что если я хочу показать заказчику проект на demo.mycompany.com?
Пишу свой ngrok на Go: рефакторинг — разбиваем монолит
В нём перемешано всё: управление клиентами, аутентификация, пул стримов, аллокация портов, lifecycle сервера.
Пишу свой ngrok на Go: полировка — graceful shutdown, авто-обновление и replay
Проект зрелый: туннели, кастомные домены, инспекция, тесты, безопасность. Но есть набор мелких (и не очень) вещей, которые отделяют «работает» от «работает хорошо».
Пишу свой ngrok на Go: CLI как продукт — init, логин через браузер и красивый вывод
CLI работает, но UX хромает: чтобы запустить туннель, надо вручную скопировать API-токен из веб-панели, написать YAML-конфиг руками, вывод — голые логи без форматирования.
Пишу свой ngrok на Go: OAuth — GitHub, Google и один день на всё
До сих пор единственный способ входа — телефон + пароль. Для dev-тула это архаично. Разработчик хочет нажать «Login with GitHub» и через три секунды быть внутри.
Пишу свой ngrok на Go: QUIC — эксперимент, провал и план Б
Работает хорошо — стримы, мультиплексирование, реконнект. Но я прочитал про QUIC: 0-RTT подключение, мультиплексирование на уровне протокола, нет head-of-line blocking.
Пишу свой ngrok на Go: планы, лимиты и админка 2.0
Проект растёт, появляются реальные пользователи. До сих пор всё было бесплатно и без ограничений — любой мог создать сколько угодно туннелей, токенов, доменов.
Пишу свой ngrok на Go: daemon mode — туннели как сервис
CLI-клиент работает, но каждый туннель — отдельный процесс. Хочу открыть три туннеля — запускаю три терминала. Закрыл терминал — потерял туннель.

Пишу свой ngrok на Go: платёжная система — от «бесплатно для всех» к подпискам
Проект работает, пользователи есть, но денег — ноль. Все сидят на бесплатном плане без ограничений. Хостинг, домены, TLS-сертификаты — всё за мой счёт.

Пишу свой ngrok на Go: SSG, SEO и война за поисковики
Платёжная система работает, пользователи платят. Но откуда им вообще приходить? Google не знает о существовании fxTunnel.

Пишу свой ngrok на Go: i18n, DDoS-защита и откат на продакшене
Сайт живёт на двух доменах — fxtun.dev (английский) и fxtun.ru (русский). Но язык пока определяется только по настройкам браузера, а URL одинаковые на обоих доменах.