Gradio免费部署完全指南:从本地share到Hugging Face Spaces、Docker与Nginx反向代理
【免费下载链接】gradioBuild and share delightful machine learning apps, all in Python. 🌟 Star to support our work!项目地址: https://gitcode.com/GitHub_Trending/gr/gradio
Gradio 是一款纯 Python 的机器学习应用开发工具,无需前端基础即可几分钟内搭出可交互的 Web 应用。本文带你掌握 4 种免费部署方式:本地share隧道、Hugging Face Spaces 托管、Docker 容器化、以及 Nginx 反向代理接入自有域名,覆盖从快速演示到生产环境的完整链路。
一、30 秒上手:写一个 Gradio 应用
所有部署方式都从同一个极简应用出发,参考项目里的 hello_world/run.py:
import gradio as gr def greet(name): return "Hello " + name + "!" demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox") demo.launch()运行后终端会提示Running on local URL: http://127.0.0.1:7860。默认情况下只有本机可访问,下面逐一介绍如何对外发布。
二、本地 share:一行参数生成公网隧道链接
最快发布方法:share=True
demo.launch(share=True)Gradio 会在后台通过 FRP 隧道客户端(首次会自动下载二进制到你的机器)把本地 7860 端口"打洞"到官方分享服务器,生成形如https://xxxxxx.gradio.live的公开链接。
关键特性一览:
- ⚡ 无需注册、无需打包,代码与模型仍跑在你自己的机器上
- 🌐 对方在浏览器直接可玩,你的电脑需保持开机联网
- ⏰ 官方分享链接会过期,且链接对任何人可见,不要暴露敏感信息
- 🔐 可叠加认证:
demo.launch(share=True, auth=("admin", "pass1234"))
该机制原理详见 understanding-gradio-share-links.md,适合临时演示、课堂分享、远程协作调试。
三、Hugging Face Spaces:永久免费的云托管
为什么要部署到 Spaces
share链接依赖你的电脑开机,而 Hugging Face Spaces 提供永久免费的云端基础设施,适合长期对外展示模型。
两种免费部署方式
- 命令行一键部署:在应用目录下执行
gradio deployCLI 会收集元数据、上传当前目录所有文件(遵守.gitignore),并在 Spaces 上启动应用;更新时重新执行即可。
- 浏览器拖拽上传:把包含
app.py和所有依赖文件的文件夹直接拖入 HF 的"新建 Space"页面,适合不想碰命令行的新手。
官方分享托管指南见 07_sharing-your-app.md,其中还介绍了部署后的进阶能力:
- 嵌入到你的网站:Spaces 页面的 "Embed this Space" 下拉框可直接复制
<gradio-app>网页组件或 iframe 代码 - API 页面:每个部署好的应用自动生成 REST API 文档页,可被 Python/JS 客户端调用
- OAuth 登录:Space 元数据设置
hf_oauth: true后即可用gr.LoginButton实现 Hugging Face 账号登录
四、Docker 容器化部署:环境一致的私有部署
适合场景
- 公司内网/自有服务器部署,数据不出域
- 用 Kubernetes 等编排系统水平扩容
- 保证"开发、测试、生产"三套环境行为完全一致
三步完成容器化
完整教程见 deploying-gradio-with-docker.md。以 Dockerfile 为例:
FROM python:3.10-slim WORKDIR /usr/src/app COPY . . RUN pip install --no-cache-dir gradio EXPOSE 7860 ENV GRADIO_SERVER_NAME="0.0.0.0" CMD ["python", "app.py"]然后构建并运行:
docker build -t gradio-app . docker run -p 7860:7860 gradio-app打开http://localhost:7860即可访问。
两个必须知道的坑
- 必须监听 0.0.0.0:设置环境变量
GRADIO_SERVER_NAME="0.0.0.0"(或在launch()中传server_name),否则容器外无法连入 - 多副本要开会话粘滞:Gradio 事件协议依赖前端与后端的多条持久连接,多副本部署时负载均衡需开启
ClientIP粘滞(如 AWS ALB 的sessionAffinity),否则事件会"丢"
五、Nginx 反向代理:挂到自有域名子路径
适合场景
你已经用 Nginx 托管https://www.example.com网站,想把应用挂在子路径上,例如https://www.example.com/gradio-demo。完整步骤见 running-gradio-on-your-web-server-with-nginx.md。
配置要点
- 在
/etc/nginx/sites-available/新建站点文件,核心配置:
server { listen 80; server_name example.com; location /gradio-demo/ { proxy_pass http://127.0.0.1:7860/; proxy_buffering off; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; } }⚠️
Upgrade/Connection头是 WebSocket 所必需;X-Forwarded-Host/X-Forwarded-Proto用于 Gradio 拼接静态资源地址,漏配会导致页面加载残缺。
- 启动应用时
root_path必须与子路径一致(源码定义见 blocks.py 的launch()参数):
demo.launch(root_path="/gradio-demo")也可用环境变量GRADIO_ROOT_PATH统一配置,所有可用环境变量汇总在 10_environment-variables.md。
- 建议用
tmux后台运行应用,最后执行sudo systemctl restart nginx重启即可。
六、4 种部署方式怎么选?
| 部署方式 | 免费 | 是否需要服务器 | 链接生命周期 | 最佳用途 |
|---|---|---|---|---|
share=True | ✅ | 否(本机即可) | 临时(会过期) | 临时演示、远程调试 |
| HF Spaces | ✅ | 否(云端托管) | 永久 | 公开作品、模型展示 |
| Docker | 视环境而定 | 自有服务器 | 永久 | 内网部署、K8s 扩容 |
| Nginx 反代 | 视环境而定 | 自有服务器 | 永久 | 挂自有域名、生产环境 |
部署安全小贴士
- 公网应用建议加认证:
demo.launch(auth=("user", "pass")),认证机制详见分享指南 - 对外发布前确认回调函数里没有读写本机敏感文件、执行危险操作的代码
- 生产环境可用
gr.Request获取访客 IP,实现限流与访问审计
总结
Gradio 的部署路径非常平滑:本地开发 →share=True快速验证 → Spaces 免费托管 → Docker/Nginx 私有生产部署,每一步都不需要额外费用门槛。新手建议从本地 share 开始体验,确定要长期展示后再迁移到 Hugging Face Spaces 即可。
更多部署与集成教程可参考 guides/11_other-tutorials/ 目录,其中还包含 Disco 一键部署、FastAPI 挂载 Gradio(mount_gradio_app)等进阶玩法。
【免费下载链接】gradioBuild and share delightful machine learning apps, all in Python. 🌟 Star to support our work!项目地址: https://gitcode.com/GitHub_Trending/gr/gradio
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考