お疲れ様です。すぺきよです。
みなさん、Ngrok使ってますか?
Webアプリを開発する際に、ちょっと客先やメンバーに状況を公開したり、動作確認を依頼する時に便利ですよね。
今回は、無料プランでWebとSSH(SFTP)を同時に公開して外部からアクセス可能とする手順を説明します。
Ngrokとは
ローカル開発環境を外部からアクセスできるようにするためのサービスです。
Ngrokがリバースプロキシーとなって、リクエストを開発環境に投げてくれます。
気軽に使えて、ものすごく便利なサービスです。
アカウント登録は必要ですが、無料でも十分使えるので、使わなければ損です。
Webサーバーの場合、自己証明書の設定をしなくてもhttpsで通信できるのも便利です。
無料プランではNgrokを複数同時に起動できない
Ngrokでは、Webはもちろん、SSH(SFTP)も公開することが可能です。
しかし、それぞれを別々に公開しようとすると、無料プランでは2つ目に起動した際に以下のエラーが出て起動することができません。
ERROR: authentication failed: Your account is limited to 1 simultaneous ngrok agent session.
ERROR: You can run multiple tunnels on a single agent session using a configuration file.
ERROR: To learn more, see https://ngrok.com/docs/secure-tunnels/ngrok-agent/reference/config/
ERROR:
ERROR: Active ngrok agent sessions in region 'jp':
ERROR: - ****
ERROR:
ERROR: ERR_NGROK_108
ERROR:
このエラーは要するに、「無料プランでは同時に1つのセッションしか起動することができないよ」ということです。
同時に、上記エラーメッセージには「You can run multiple tunnels on a single agent session using a configuration file.」との記載もあります。
これは「設定ファイルを使えば一つのセッションで複数のトンネリングを起動することができます。」といった感じでしょうか。
どうやら、設定ファイルを使えばWebとSSH(SFTP)を同時に公開することができるようです。
WebとSSH(SFTP)同時に公開する方法
では、WebとSSH(SFTP)同時に公開するための実際の設定方法です。
設定ファイルの保存場所を調べる
次のコマンドを利用して、Ngrokの設定ファイルの場所を調べます。
ngrok config check
設定ファイルを編集する
正しく動作しなくなる可能性があるので、Ngrokの設定ファイルはあらかじめバックアップしておいてください。
設定ファイルに以下の内容を追記します。
ファイルフォーマットはyamlです。
今回は、タイトルにある通り、WebとSSH(SFTP)を公開するように設定を追加します。
tunnels:
http-server:
addr: 80
proto: http
ssh-server:
addr: 22
proto: tcp
ポート番号にWell-knownポートと違う番号を採用している場合は、環境に合わせて内容を変更してください。
Ngrokを起動する
以下のコマンドを実行してNgrokを起動します。
ngrok start --all
うまく起動しない場合は、設定ファイルの記載に誤りがある可能性があります。
設定ファイルの記載内容を、もう一度内容を確認してください。
公開アドレスを確認する
起動に成功すると、以下のように、WEBとSSH(SFTP)の両方のアクセス用のアドレスが表示されます。
Forwardingの右側にあるアドレスがそれぞれのアクセス用アドレスです。
ここでは「 -> localhost:22」の左にあるのがSSH公開用のアドレス、「 -> http://localhost:80」の左にあるのがWEB公開用のアドレスです。
公開されたWEBアドレスにアクセスする
画面に表示されたWEB公開用のアドレス「https://***.ngrok-free.app」にアクセスすると、ローカル開発環境のWebページに外部からアクセス可能です。
公開されたSSH(SFTP)アドレスにアクセスする
画面に表示されたアドレス「tcp://0.tcp.jp.ngrok.io:9999」がアドレスなのですが、sshやsftpでアクセスするためには少し読み替えが必要です。
この公開アドレスは、以下のように分解することができます。
ここで重要なのは「アドレス」と「ポート番号」です。(プロトコル名は今回は関係ないので、一旦無視してください。)
実際にアクセスするためには、以下の書式にそってコマンドを実行します。
ssh [ログインユーザー名]@[アドレス] -p [ポート番号]
ログインユーザーを「user-name」とすると、上記のアドレスをコマンドに当てはめると以下のようになります。
ssh user-name@0.tcp.jp.ngrok.io -p 9999
sftpでアクセスする場合でも、コマンドを変更するだけで同様にアクセスできます。
sftp user-name@0.tcp.jp.ngrok.io -p 9999
最後に
ngrokは無料で使えて、外部に動作確認用のサーバーを用意する必要がなく、費用を抑えることができるので、本当に便利サービスです。
ただ、無料プランだと、起動するごとにアドレスがわかるのがたまにキズですね。
ここがあまりにも不便であれば、有料プランへの切り替えを考えてもいいかもしれません。
それでは、良きWeb開発ライフを。