ngrokを使った簡易的なサイトの公開
開発を行っていて外部にサイトを公開をしたいがローカルPCしかない、他システムとの連携でSSLが必要だが、まだ構成が決まっているわけではなく費用を抑えたいということはないでしょうか?
そういう場合にngrokを使用するという選択肢があるようなので、調査してみました。
ngorkとは
クライアントPCからngorkサーバをSSH トンネル経由でローカルPCにリクエストし、クライアントにデータを返すということができます。
簡単に説明すると使用している開発のローカルPC1台のみでwebサービスを公開できるということです。
クライアントのリクエストURLはngorkサーバのドメイン になってしまいますが、動作は正常に行うことができます。
サイト公開手順
ローカル環境にWEBサイトを構築する
私の検証環境はLinux, node.jsで構築しています。(MacやWindowsでも使用できます。)
まず、Linuxで、node.jsを用いてHellow worldがhttp://localhost:3000で表示できるようにします。
node.jsのインストールや起動の手順については割愛させて頂きます。
Ngrokをインストールする
ngrokのダウンロードサイトから”more option”選択し、Linuxのインストールファイルをダウンロードします。
https://ngrok.com/download
下記のコマンドを使用し解凍します
sudo unzip ngrok-stable-linux-amd64.zip
次のコマンドを実行し、ngrokコマンドを使用できるディレクトリに移動させます。
sudo mv ngrok /usr/local/bin
サイトを公開する
起動確認を行うため、下記のコマンドを実行します。
ngrok http 3000
このように表示されると正常に動作しています。
その後、”Forwarding”に記載されているURLにアクセスすると対象のwebページが表示されます。
ここでは”https://1a59dd82300c.ngrok.io/“にアクセスを行います。
以上がWebに公開するまでの手順となります。かなり簡単ですね。
フリーアカウントとしての感想
- モバイルアプリ、IoTアプリで開発段階のWebサーバとの疎通テストがサーバの準備なしにすぐ実施できるため使いやすい。
- Basic認証が起動コマンドに入れるだけで実現することができる。”ngrok http -auth=”username:password” 8080″。(フリーアカウントではできない可能性あり。)
- ngrok.ioのサーバからフォワードされているため、grok.ioサーバのパフォーマンスの影響を受ける。
- ngrok.ioのサーバ経由のため、完全にセキュアな通信かどうかわからない。ngrok次第なところがある。
- 通信のフローとして ”ユーザ クライアント PC” – (http/https) – “ngrok.ioサーバ” – (SSH Tunnel) -” Webサーバー クライアント PC” となる。ngrokサーバから公開しているPCにfirewallを超えて直接入ってくることになり、所属組織や得意先とのセキュリティの規則に引っかかる可能性がある。
- フリーアカウントでは固定のドメインで公開はできない。
フリーアカウントとしての使い道
あくまでフリーアカウントとしての用途を記載すると、下記の3つと考えられます。
- 個人の活動として、また個人が責任をとれるネットワーク内で、勉強や技術調査をするときによい。
- Restful APIとモバイルアプリ/IoTを使ったサービスで、限られた時間内にお互いのアプリをdebugしながらプログラムや設定を調整するときによい。
- プロジェクトの初期段階で決められたサーバがなく、一時的にサイトのレビューをお客様から要求されたときによい。