iT邦幫忙

2023 iThome 鐵人賽

0
Software Development

跟著 OXXO 一起學 Python系列 第 69

( Day 33.2 ) Python 使用 ngrok 服務

  • 分享至 

  • xImage
  •  

在開發網頁應用或是聊天機器人時,通常是使用本機的伺服器,無法真正在外界進行測試,然而透過免費的 ngrok 服務,能夠將本機環境對應到一個 ngrok 網址,公開在整個網際網路中,由於是公開網址,就能真正在外界進行測試。

原文參考:使用 ngrok 服務

註冊 ngrok 取得 token

前往 ngrok 的網站,註冊帳號並登入。

ngrok 網站:https://ngrok.com/

登入後,從左側選單點擊 Your Authtoken,會出現一段串接 ngrok 服務所使用的 token ( 點擊網頁最下方 reset token 按鈕可以重設 token )。

Python 教學 - ngrok 服務

本機環境使用 ngrok

前往 ngrok 的下載頁面,根據自己電腦作業系統,使用終端機的命令下載安裝,或下載對應的安裝檔進行安裝。

下載 ngrok:https://ngrok.com/download

Python 教學 - ngrok 服務

安裝後,開啟終端機,使用命令輸入註冊 ngrok 後取得的 token。

ngrok authtoken <token>

輸入 token 後,繼續使用命令,將本機環境的埠號 port 對應到 ngrok 公開網址 ( 如果使用 Flask 建構的服務,port 預設是 5000 )。

ngrok http <port>

完成後,就會看到終端機裡出現 ngrok 的公開網址 ( 每次重新輸入後,網址都會改變 )

Python 教學 - ngrok 服務

使用本機的 Python 編輯器,或開啟 Anaconda Jupyter,安裝 Flask 後,執行下方的程式碼,會開啟一個本機網頁服務,網址為 127.0.0.1:5000。

參考:Flask 函式庫

from flask import Flask

app = Flask(__name__)

@app.route("/<name>")
def home(name):
    return f"<h1>hello {name}</h1>"

app.run()

打開瀏覽器,輸入 127.0.0.1:5000/oxxo,畫面中就會出現 hello oxxo 的文字,但這個網址只有本機瀏覽器能夠使用,外部無法使用。

Python 教學 - ngrok 服務

由於 5000 的埠號已經和 ngrok 串接,所以輸入剛剛的 ngrok 公開網址,就會看到一模一樣的結果,而這個網址,不論在任何地方,都能正常讀取。

Python 教學 - ngrok 服務

Google Colab 使用 ngrok

在 Google Colab 裡使用 Flask 建立網頁服務時,由於 127.0.0.1 的本機環境無法與外界溝通 ( 位於 Google 的 server ),所以必須要搭配 ngrok 才能正常運作,按照接下來的步驟,就能在 Colab 裡使用 ngrok。

參考 SSH into Colab and view tensorboard using ngrok

首先開啟一個 Colab 筆記本 ( 參考:使用 Google Colab ),輸入下方程式碼,將這個 Colab 筆記本串接 Google 雲端硬碟。

from google.colab import drive
drive.mount('/content/drive', force_remount=True)

!mkdir -p /drive
#umount /drive
!mount --bind /content/drive/My\ Drive /drive
!mkdir -p /drive/ngrok-ssh
!mkdir -p ~/.ssh

執行後會跳出確認視窗,點擊「連線至 Google 雲端硬碟」。

Python 教學 - ngrok 服務

選擇自己的 Google 帳號。

Python 教學 - ngrok 服務

點擊「允許」。

Python 教學 - ngrok 服務

完成後,在 Colab 會出現 Mounted at /content/drive 的文字,表示已經成功串接 Google 雲端硬碟。

Python 教學 - ngrok 服務

接著繼續輸入下方的程式碼,將 ngrok 安裝到 Google 雲端硬碟中。

!mkdir -p /drive/ngrok-ssh
%cd /drive/ngrok-ssh
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip -O ngrok-stable-linux-amd64.zip
!unzip -u ngrok-stable-linux-amd64.zip
!cp /drive/ngrok-ssh/ngrok /ngrok
!chmod +x /ngrok

Python 教學 - ngrok 服務

安裝完成後,就能使用 ngrok 指令輸入 token。

!/ngrok authtoken <token>

使用 pip 安裝 flask_ngrok 函式庫。

!pip install flask_ngrok

輸入下方的程式碼,除了使用 Flask 建立網頁服務,也使用 run_with_ngrok 將網頁服務與 ngrok 串接。

參考:Flask 函式庫

from flask import Flask
from flask_ngrok import run_with_ngrok

app = Flask(__name__)
run_with_ngrok(app)

@app.route("/<name>")
def home(name):
    return f"<h1>hello {name}</h1>"

app.run()

程式碼執行後,如果出現 ngrok 的網址,就表示已經串接成功,因為 ngrok 支援 https,可自行將 http 改為 https。

Python 教學 - ngrok 服務

串接成功後,就能透過瀏覽器,開啟 ngrok 網址,串連 Colab 所建立的網頁服務。

Python 教學 - ngrok 服務

小結

對於開發者來說,ngrok 是一個相當方便的服務,可以快速測試程式是否正常運作,最後,使用 ngrok 時仍有下列幾點事項需要注意:

  • 使用本機環境開發時,如果電腦關機 ( 或網路斷線 ),服務也會跟著中斷。
  • ngrok 免費版同時間內只能串連一個服務。
  • Colab 程式有運行時間限制,無法作為正式的伺服器使用。

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 33.1 ) Python Flask 函式庫
下一篇
( Day 34.1 ) Python 使用 Google Cloud Functions
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言