2024年11月17日 星期日

[Linux]如何利用docker運行Ngrok,並使本地服務可以由外網訪問?

Ngrok 是一款輕量、功能強大的反向代理工具,可快速且安全地將本機開發環境暴露於公網。它主要透過建立安全隧道(tunnel),讓外部使用者或服務能夠存取本地的 HTTP、HTTPS 或 TCP 應用,而無需進行複雜的網路設定(如port映射設定,或防火牆規則設置),因此其相當適合用於測試需要外網訪問剛開發好的本地端程式。兩個常見的使用情境如下:

1.前端與後端開發:

  • 本地端開發的API或Web應用程式需要測試外部整合時,Ngrok 可以快速建立公網URL。
  • 適用於調試第三方回呼介面(如通知系統回呼等等)。

2.Webhook 偵錯:

  • 外部服務(如 LINE Message API等)通常需要回呼Webhook位址。
  • Ngrok提供臨時URL,使本機服務能夠接收Webhook調用。


另外,Ngrok 可以跨平台運行在各種作業系統(如Windows和Linux)中,一起來了解如何利用docker運行Ngrok。

a.先自行到Ngrok官網註冊,並取得Ngrok的token。接著拉取Ngrok的docker images。

sudo docker pull ngrok/ngrok

b.利用下列docker指令啟動Ngrok的方式,即可看到Ngrok服務啟動畫面,如本文封面圖所示,同時可以看到監聽port 5000。接著利用瀏覽器輸入紅色框處的URL,即可順利看到Ngrok服務介面,包含本機端<->Ngrok<->外網的連接狀態,同時若有問題,該連接狀態亦會顯示哪一段服務斷線而導致的。(Note:若是要映射到本機端的flask server服務,該port需與flask程式中的webhook的port一致。)

sudo docker run -d --name=ngrok --net=host -it -e NGROK_AUTHTOKEN=<your ngrok token> ngrok/ngrok:latest http 5000 

c.測試時,可利用下列指令切換到Ngrok服務啟動畫面,查看該容器的實時輸出內容。若希望離開該服務畫面而不中止該容器的運行,按Ctrl+P並按Ctrl+Q即可安全退出。

sudo docker attach ngrok

若有http request請求服務,該Ngrok服務畫面會顯示http code供查看和偵錯。另外,也可以瀏覽器訪問0.0.0.0:4040,查看Ngrok的request的即時狀態。

沒有留言:

張貼留言