使用 ngrok 服務
在開發網頁應用或是聊天機器人時,通常是使用本機的伺服器,無法真正在外界進行測試,然而透過免費的 ngrok 服務,能夠將本機環境對應到一個 ngrok 網址,公開在整個網際網路中,由於是公開網址,就能真正在外界進行測試。
快速導覽:
註冊 ngrok 取得 token
前往 ngrok 的網站,註冊帳號並登入。
ngrok 網站:https://ngrok.com/
登入後,從左側選單點擊 Your Authtoken,會出現一段串接 ngrok 服務所使用的 token ( 點擊網頁最下方 reset token 按鈕可以重設 token )。
本機環境使用 ngrok
點擊右側 Setup & installation,ngrok 會根據使用者的作業系統提供最適合的安裝檔。
如果不需要使用 ngrok 所提供的檔案,也可以從下方的網址,下載對應的安裝檔進行安裝。
下載 ngrok:https://ngrok.com/download
安裝後,開啟終端機,使用命令輸入註冊 ngrok 後取得的 token。
ngrok config add-authtoken <token>
輸入 token 後,繼續使用命令,將本機環境的埠號 port 對應到 ngrok 公開網址 ( 如果使用 Flask 建構的服務,port 預設是 5000,並使用 127.0.0.1 的網址 )。
ngrok http http://127.0.0.1:5000
完成後,就會看到終端機裡出現 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 的文字,但這個網址只有本機瀏覽器能夠使用,外部無法使用。
由於 5000 的埠號已經和 ngrok 串接,所以輸入剛剛的 ngrok 公開網址,就會看到一模一樣的結果,而這個網址,不論在任何地方,都能正常讀取。
Google Colab 使用 ngrok
在 Google Colab 裡使用 Flask 建立網頁服務時,由於 127.0.0.1 的本機環境無法與外界溝通 ( 位於 Google 的 server ),所以必須要搭配 ngrok 才能正常運作,按照接下來的步驟,就能在 Colab 裡使用 ngrok。
- 參考 SSH into Colab and view tensorboard using ngrok
- 注意,2024 年 Colab 串接 ngrok 的方式有更動,使用 flask_ngrok 的作法已經停用。
首先開啟一個 Colab 筆記本 ( 參考:使用 Google Colab ),點擊左側「檔案」,點擊「掛接雲端硬碟」。
點擊「連線至 Google 雲端硬碟」。
掛接後,輸入下方程式碼,將這個 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 雲端硬碟」。
選擇自己的 Google 帳號。
設定要讓 Colab 可以存取的權限,設定後點擊「繼續」。
完成後,在 Colab 會出現 Mounted at /content/drive 的文字,表示已經成功串接 Google 雲端硬碟。
接著繼續輸入下方的程式碼,將 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
安裝完成後,就能使用 ngrok 指令輸入 token。
!/ngrok authtoken <token>
使用 pip 安裝 pyngrok 函式庫。
!pip install pyngrok
輸入並執行下方的程式碼,輸入 ngrok token 之後,就會與 ngrok 進行認證。
- 注意,2024 年 6 月之後,新申請的免費帳號需要登記信用卡號碼才能串接 Colab ( 認證是真人,不會扣款 ),如果使用本機環境則不需要輸入信用卡號。
- 參考:Using ngrok in a Google Colab Notebook
import getpass
from pyngrok import ngrok, conf
print("Enter your authtoken, which can be copied from https://dashboard.ngrok.com/auth")
conf.get_default().auth_token = getpass.getpass()
# Open a TCP ngrok tunnel to the SSH server
connection_string = ngrok.connect("22", "tcp").public_url
ssh_url, port = connection_string.strip("tcp://").split(":")
print(f" * ngrok tunnel available, access with `ssh root@{ssh_url} -p{port}`")
輸入下方程式碼,如果出現 ngrok 的網址,就表示已經串接成功。
from flask import Flask
from pyngrok import ngrok
app = Flask(__name__)
port = "5000"
# Open a ngrok tunnel to the HTTP server
public_url = ngrok.connect(port).public_url
print(f" * ngrok tunnel \"{public_url}\" -> \"http://127.0.0.1:{port}\" ")
@app.route("/")
def home():
return "Hello Colab!!"
app.run()
透過瀏覽器,開啟 ngrok 網址,就能看見由 Colab 所建立的網頁服務。
小結
對於開發者來說,ngrok 是一個相當方便的服務,可以快速測試程式是否正常運作,最後,使用 ngrok 時仍有下列幾點事項需要注意:
- 使用本機環境開發時,如果電腦關機 ( 或網路斷線 ),服務也會跟著中斷。
- ngrok 免費版同時間內只能串連一個服務。
- Colab 程式有運行時間限制,無法作為正式的伺服器使用。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~