Делаем локальный сервер доступным всему интернету

При разработке веб проекта (не важно на PHP, Django, Flask) бывают случаи когда необходимо быстро продемонстрировать его работу заказчику для уточнения деталей, а так как обычно разработка происходит на локальном компьютере разработчика, то необходимо предварительно выложить проект на удаленный сервер.

Было бы удобней просто дать заказчику временную ссылку, которая даст доступ к проекту запущенному локально у разработчика. Для этих целей есть инструмент ngrok, как его использовать описано в этой заметке.

Установка ngrok на Windows

ngrok доступен под все основные операционные системы, скачать его можно с https://ngrok.com/download. Под Windows доступна как установка через менеджер пакетов Chocolatey, так через скачивания zip архива.

После скачивания архива (содержащего всего один файл) его нужно просто распаковать. На этом собственно установка завершена.

Регистрируемся тут https://dashboard.ngrok.com/login и получаем токен.

Далее в командной строке Windows перейдем в папку с ngrok.exe и выполним команду:

ngrok config add-authtoken 21dwwv1C_ТУТ_ВАШ_ТОКЕН

Как пользоваться ngrok

Например, мы разрабатываем проект на Джанго используя тестовый сервер и хотим показать проект заказчику, как нам это сделать?

Запустим тестовый сервер python manage.py runserver, теперь проект доступен нам по адресу http://127.0.0.1:8000/

Далее в командной строке Windows перейдем в папку с ngrok.exe и выполним следующую команду:

ngrok http 8000

8000 — это порт на котором у нас запущен тестовый сервер Django.

В результате получаем такой вывод:

Вывод ngrok в консоль после запуска

http://f1ff-109-63-232-90.ngrok.io/ это адрес по которому наш локальный сервер доступен в интернете.

Наш тестовый сервер будет доступен по этому адресу до тех пор, пока мы не закроем окно консоли или не нажмем в ней Ctrl + C. После этого, чтобы сервер стал доступен вновь извне с помощью ссылки, нужно заново запустить ngrok.

Попробуем перейти по полученному адресу и уже увидим страницу Джанго, осталось только убрать эту ошибку:

Страница с ошибкой Django при использовании ngrok

Для этого в файле settings.py нашего проекта поправим директиву ALLOWED_HOSTS:

ALLOWED_HOSTS = [
    '127.0.0.1',
    'localhost',
    '.ngrok.io']

Перезапускаем сервер Django и теперь все ок:

Начальная страница Django при импользовании ngrok

Вот таким образом мы можем продемонстрировать процесс разработки заказчику.

Заключение

Описанное выше это не все, что можно сделать с помощью ngrok, например мы можем сделать доступ извне к нашей локально запущенной Postgresql (например на порту 5432). Для этого достаточно команды:

ngrok tcp 5432

Далее мы получим вывод с данными доступа.

Более подробно о работе с ngrok лучше читать в официальной документации https://ngrok.com/docs

Хостинг для ваших проектов