使用 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 程序有运行时间限制,无法作为正式的服务器使用。
微信扫码关注
抖音扫码关注