1. 其他教程
  2. 使用Nginx在您的Web服务器上运行Gradio

使用Nginx在您的Web服务器上运行Gradio应用

介绍

Gradio 是一个 Python 库,允许您快速为您的机器学习模型和数据处理管道创建可定制的 Web 应用程序。Gradio 应用程序可以免费部署在 Hugging Face Spaces 上。

在某些情况下,您可能希望在自己的Web服务器上部署Gradio应用程序。您可能已经在使用Nginx,一个高性能的Web服务器,来为您的网站提供服务(例如https://www.example.com),并且您希望将Gradio附加到您网站的特定子路径上(例如https://www.example.com/gradio-demo)。

在本指南中,我们将指导您在自己的Web服务器上通过Nginx运行Gradio应用程序的过程,以实现这一目标。

先决条件

  1. 一个安装了NginxGradio的Linux网络服务器
  2. 一个可运行的Gradio应用程序,保存为您的Web服务器上的python文件

编辑您的Nginx配置文件

  1. 首先在您的Web服务器上编辑Nginx配置文件。默认情况下,该文件位于:/etc/nginx/nginx.conf

http 块中,添加以下行以从单独的文件中包含服务器块配置:

include /etc/nginx/sites-enabled/*;
  1. /etc/nginx/sites-available目录中创建一个新文件(如果该目录不存在,请先创建),使用代表你应用程序的文件名,例如:sudo nano /etc/nginx/sites-available/my_gradio_app

  2. 将以下内容粘贴到您的文件编辑器中:

server {
    listen 80;
    server_name example.com www.example.com;  # Change this to your domain name

    location /gradio-demo/ {  # Change this if you'd like to server your Gradio app on a different path
        proxy_pass http://127.0.0.1:7860/; # Change this if your Gradio app will be running on a different port
        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;
    }
}

提示: 设置 `X-Forwarded-Host` 和 `X-Forwarded-Proto` 头信息非常重要,因为 Gradio 使用这些头信息,结合下面讨论的 `root_path` 参数,来构建您的应用程序所服务的公共 URL。Gradio 使用公共 URL 来获取各种静态资源。如果这些头信息没有设置,您的 Gradio 应用程序可能会以损坏的状态加载。

注意: $host 变量不包括主机端口。如果您在原始IP地址和端口上提供Gradio应用程序,您应该在这些行中使用 $http_host 变量:

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Host $host;

在您的网络服务器上运行您的Gradio应用程序

  1. 在启动你的Gradio应用之前,你需要将root_path设置为与你在nginx配置中指定的子路径相同。这对于Gradio在域名的根目录之外的任何子路径上运行是必要的。

    注意: 除了子路径,你也可以为 root_path 提供一个完整的 URL(以 httphttps 开头),在这种情况下,root_path 将被视为绝对 URL 而不是 URL 后缀(但在这种情况下,如果域名发生变化,你需要更新 root_path)。

这是一个简单的Gradio应用程序示例,其中包含与上述Nginx配置相对应的自定义root_path

import gradio as gr
import time

def test(x):
time.sleep(4)
return x

gr.Interface(test, "textbox", "textbox").queue().launch(root_path="/gradio-demo")
  1. 通过输入tmux并按回车键来启动一个tmux会话(可选)

建议您在tmux会话中运行您的Gradio应用程序,以便您可以轻松地将其保持在后台运行

  1. 然后,启动你的Gradio应用。只需输入python,然后是你的Gradio Python文件的名称。默认情况下,你的应用将在localhost:7860上运行,但如果它在一个不同的端口上启动,你将需要更新上面的nginx配置文件。

重启Nginx

  1. 如果您在 tmux 会话中,可以通过键入 CTRL+B(或 CMD+B),然后按 "D" 键退出。

  2. 最后,通过运行sudo systemctl restart nginx来重启nginx。

就是这样!如果你在浏览器中访问 https://example.com/gradio-demo,你应该会看到你的 Gradio 应用程序在那里运行。