内网穿透方案
在使用 Gradio 搭建的应用时,默认情况下它会提供一个临时的公网 URL(依托 Gradio 自带的托管服务)。但是在某些情况下,可能希望更灵活地在内网环境中将服务暴露给公网(比如通过内网穿透工具)。以下是几种实现方式:
方法 1:使用 Gradio 提供的 Cloud Hosting(默认内网穿透)
Gradio 默认会在运行时直接生成一个临时的公网访问地址。例如:
1 | |
运行后,Gradio 会生成一个 http://127.0.0.1:<PORT> 的本地地址,同时还创建一个公网可访问的临时 URL,例如 https://<unique_id>.gradio.app。这个 URL 实际上是通过 Gradio 内置的隧道服务实现的,不需要额外的配置。
缺点:Gradio 默认提供的公共 URL 会有频率限制(免费的计划支持有限的连接数),适用于小型实验,但长期在线服务可能不合适。
方法 2:使用 ngrok 内网穿透
ngrok 是一个流行的内网穿透工具,可以将本地服务映射到一个公网 URL。
步骤:
安装 ngrok
前往 ngrok 官方网站 下载并安装,或者通过包管理工具安装,例如在 Ubuntu 上执行:1
sudo apt install ngrok启动 Gradio 本地服务
在代码中显式禁止 Gradio 默认的share功能:1
iface.launch(share=False)例如:
1
2
3
4
5
6
7import gradio as gr
def greet(name):
return f"Hello, {name}!"
iface = gr.Interface(fn=greet, inputs="text", outputs="text")
iface.launch(share=False) # 禁用 Gradio 默认的穿透服务使用 ngrok 暴露本地端口
假设 Gradio 服务在http://127.0.0.1:7860运行,使用以下命令启动 ngrok:1
ngrok http 7860成功后,ngrok 将为你的服务分配一个临时公网地址,例如:
1
Forwarding https://<generated-id>.ngrok.io -> http://127.0.0.1:7860访问服务
通过显示的ngrok.io地址即可从公网访问你的 Gradio 应用。
方法 3:使用 FRP(更适合自定义内网穿透)
FRP (Fast Reverse Proxy) 是一个强大的开源内网穿透工具,相比 ngrok 更适合自定义和长期搭建稳定的服务。
示例:
设置 FRP 服务端(公网服务器):
配置一个 VPS 或其他服务器,运行 FRP 服务端,并设置frps.ini:1
2[common]
bind_port = 7000启动命令:
1
./frps -c ./frps.ini配置 FRP 客户端(你的本地主机):
创建frpc.ini文件:1
2
3
4
5
6
7
8[common]
server_addr = <your_public_server_ip>
server_port = 7000
[gradio]
type = http
local_port = 7860
custom_domains = <your_custom_domain>启动命令:
1
./frpc -c ./frpc.ini访问服务:
配置完成后,可以通过你的公网服务器 IP 或自定义域名的 HTTP 地址访问 Gradio 应用。
方法 4:使用 Cloudflare Tunnel
Cloudflare 提供了免费的隧道服务,可以将本地服务安全地暴露给公网用户。
步骤:
安装 Cloudflare Tunnel CLI 工具:
安装cloudflared。参考官方文档:https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/。运行 Gradio 本地服务:
与之前一样,启动 Gradio,无需启用share:1
iface.launch(share=False)启动 Cloudflared 并连接本地服务:
假设 Gradio 运行在http://127.0.0.1:7860,可以执行:1
cloudflared tunnel --url http://127.0.0.1:7860执行完毕后,Cloudflare Tunnel 会为你分配一个临时的
*.trycloudflare.com公网地址。
对比:
| 方法 | 优点 | 缺点 |
|---|---|---|
| Gradio 默认 Share | 快速简单,开箱即用 | 免费计划有频率限制,可能不适合生产环境 |
| Ngrok | 容易使用,支持更多配置 | 免费隧道地址是临时的,频率有限 |
| FRP | 自定义强,适合自建稳定服务 | 需要自行部署服务器,配置稍复杂 |
| Cloudflare Tunnel | 免费、稳定、安全 | 免费用户无法绑定自定义域名,受限于隧道规则 |
根据实际需求选择适合的方案即可!