За что мы боремся?
В жизни разработчика регулярно возникает необходимость показать результаты работы кому-либо еще — коллеге, заказчику, тестировщику. Всё довольно просто, если вы сидите в одной комнате или, хотя бы, здании: можно пригласить его к своему столу (скорее всего придется пообещать кофе или печеньки) и показать лично на собственном мониторе. Всё сложнее, если вы находитесь в разных районах, городах или даже странах. А иногда вам может пригодиться доступный из интернета API, развернутый локально — например, если вы разрабатываете или тестируете мобильные приложения.
Путей решения проблемы много. Одним из них является покупка белого внешнего ip-адреса, проброска портов, покупка доменного имени и его настройка. Решение полноценное, но не всегда доступное — не у всех провайдеров можно получить белый адрес, не все готовы разрешить вам использовать необходимые порты. Я уж молчу о том, что вы оказываетесь привязаны к выбранному провайдеру и не можете использовать это решение, сидя в кафе с рабочим ноутбуком по широкополосному соединению. Еще можно арендовать сервер у какого-нибудь хостера и всё, что требуется показать, сперва деплоить туда. Тут, понятно, возникают другие проблемы: ограничение производительности этого сервера, лишний элемент инфраструктуры, требующий поддержки. Да и постоянный деплой изменений, которые вы просто хотите показать, но, возможно, не готовы даже на коммит?
На помощь спешит ngrok
Ngrok — это сервис, позволяющий прокинуть порт локального компьютера на сервера ngrok. Любой желающий сможет получить доступ к вашему локальному приложению по глобально доступному субдомену сервиса .ngrok.io.
Установка
wget https://dl.ngrok.com/ngrok_2.0.19_linux_amd64.zip
unzip ngrok_2.0.19_linux_amd64.zip
mv ngrok /usr/local/bin
sudo chmod +x /usr/local/bin/ngrok
Использование
В простейшем варианте достаточно:
ngrok http 80
Вы увидите монитор вашего туннеля:
Tunnel Status online
Version 2.0.19/2.0.19
Web Interface http://127.0.0.1:4040
Forwarding http://8d323578.ngrok.io -> localhost:80
Forwarding https://8d323578.ngrok.io -> localhost:80
Откроем наш уникальный адрес в браузере. В мониторе появится информация о нашем запросе:
HTTP Requests
-------------
GET /favicon.ico 200 OK
GET /css/all.css 200 OK
GET /js/index.js 200 OK
GET /images/loader.gif 200 OK
GET / 200 OK
Приятной фишкой является возможность поднять basic auth, указав один лишний ключ:
ngrok http -auth="login:password" 80
Узнать о других возможностях сервиса можно так:
ngrok help