ngrokでローカルサーバーを公開する

サーバーを使わずにHTTPページを公開する方法を説明します。

普通の方法

例えば FlaskでHello World! の様な簡単なWEBアプリを作成するとします。テストするときは開発に使っているパソコン上でローカルサーバーを起動して、例えば

のようなURLで同一パソコンのブラウザ上で動作確認すると思います。あるいは、同じネットワークに属する環境であれば、他のパソコンからも

のようにしてアクセスできるでしょう。

このWEBアプリを外部のインターネットに公開するには、インターネット上にサーバーを立てる必要があります。例えば AWS、Heroku、PythonAnywhere などのサービスを使えばそのようなことができます。

ngrok(エングロック)

ところが、自分のパソコン上で動作しているWEBアプリを簡単にインターネット上に公開するツールが存在します。

ngrok | API Gateway, IoT Device Gateway, Secure Tunnels for Containers, Apps & APIs
ngrok is a secure ingress platform that enables developers to add global server load balancing, reverse proxy, firewall,...

(1)ngrokのページにアクセスしてアカウントを作り、ログインします。

(2)自分のアカウントのダッシュボードの Setup & Installation から対応OSのngrokアプリをダウンロードします。Windows、Mac、Linux、FreeBSD に対応しています。Raspberry Pi でも使えます。

(3)ZIPファイルを解凍したらそのフォルダで次のコマンドを実行します。これでローカル環境とアカウントが関連付けられます。

(4)次のコマンドでローカルサーバーを公開します。
(5)次のような内容が表示されるので、”Forwarding” に表示されたURLにアクセスできるようになります。ローカルサーバーがトンネルされて、外部インターネットからもアクセス可能です。しかも https までサポートされています。

Pros & Cons

  • ngrokに登録しなくても連続8時間まで利用できます。無料プランでも登録すれば時間制限はなくなります。
  • 公開されるURL(上の例では https://xxxxxxxx.ngrok.io 等)はngrokを実行するたびに変わってしまいます。$60/年からの有料プランにするとサブドメインを指定できるようになるのでURLを固定できます。
  • Raspberry Pi にサーボモーター等を接続して、WebIOPi 経由で外部からHTTPで制御するような場合、そのローカルアドレスを公開すればサーバー無しでシステム構築が可能になります。