云服务器gradio脚本配置nginx

为了能访问在云服务器用gradio部署的大模型,配置一下nginx。
还是和上一个博客一样,不注重讲流程,只是记录踩过的坑,和一些细节、完整文件内容。

常用命令

vi /etc/nginx/conf.d/gradio.conf #编辑配置
nginx -t  #检查配置是否正确
systemctl restart nginx  #重启nginx
systemctl status nginx  #查询状态
lsof -i :7870 #查看哪个进程正在占用7870端口
grep -r "server_name 12.34.56.78" /etc/nginx/  #确保同一个出现一次
ps aux|grep nginx
nohup python basic_demo/web_demo_gradio.py &
ps aux | grep -E "python( .*/| )web_demo_gradio.py" | grep -v grep | awk '{print $2}' | xargs kill -9 && nohup python web_demo_gradio.py &

gradio.conf 配置

单页面配置

最简单版本,仅有一个web_demo_gradio.py文件,其中端口情况是

demo.launch(server_name="127.0.0.1", server_port=7870, inbrowser=True, share=False)

/etc/nginx/conf.d/gradio.conf的内容是

server {
    listen 80; 
    server_name 12.34.56.78;  # 替换为你的服务器IP地址或域名

    location / { 
        proxy_pass http://127.0.0.1:7870;  # Gradio 运行的本地地址和端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }   
}

之前gpt还给了配置位置是/etc/nginx/nginx.conf.gradio,但是还要改 /etc/nginx/nginx.conf 文件,后来问了gpt更推荐哪一个,答案是

在这两种目录之间,通常推荐使用 /etc/nginx/conf.d/gradio.conf 来存放 Gradio 的 Nginx 配置文件。以下是原因:

  1. 标准化/etc/nginx/conf.d/ 目录是 Nginx 配置文件的标准路径之一,专门用于存放额外的虚拟主机或服务的配置文件。将 Gradio 的配置文件放在这个目录下更符合标准的 Nginx 配置结构,便于维护和管理。

  2. 模块化conf.d 目录中的配置文件会自动被包括在主 Nginx 配置文件中,无需修改主配置文件。这种方式便于模块化管理,避免直接修改 /etc/nginx/nginx.conf 文件,从而降低了因误操作引发的问题。

  3. 可读性:将各个服务的配置文件分别存放在 /etc/nginx/conf.d/ 目录下,可以保持配置的清晰度和可读性,更容易进行排错和更新。

因此,建议将 Gradio 的 Nginx 配置文件放在 /etc/nginx/conf.d/gradio.conf 路径下。
如果不小心配置了多个文件,并且server_name和端口号都一样,那么检查时会报错。通过这个命令排查:

grep -r "server_name 12.34.56.78" /etc/nginx/

如果出现了两行,可以看端口号是否一致,一般都是80,很可能会冲突。

多页面配置

这里我写了三个页面,一个原有的大模型脚本,地址为添加/chatglm,一个hello world脚本,地址为添加/greet,一个主页,地址就是服务器地址,显示上面两个页面。
/etc/nginx/conf.d/gradio.conf

server {
    listen 80;
    server_name 12.34.56.78;

    location / { 
        proxy_pass http://127.0.0.1:7860;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /greet/ {
        proxy_pass http://127.0.0.1:7861;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /chatglm/ {
        proxy_pass http://127.0.0.1:7870;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

gradio_greet.py

import gradio as gr

def greet(name):
    return f"Hello {name}!"

# 定义Gradio接口
iface = gr.Interface(fn=greet, inputs="text", outputs="text")

# 配置并启动应用
iface.launch(
    server_name="0.0.0.0",  # 允许外部访问
    server_port=7861,       # 指定端口
    root_path="/greet",      # 设置 URL 前缀为 /greet
    share=True,
    debug=True,             # 开启调试模式
)

gradio_home.py

import gradio as gr

with gr.Blocks() as demo:
    gr.HTML("""
    <div style="text-align:center;">
        greet
        <a href="http://12.34.56.78/greet" target="_blank">http://12.34.56.78/greet</a>
        <br>
        chatglm
        <a href="http://12.34.56.78/chatglm" target="_blank">http://12.34.56.78/chatglm</a>
    </div>
    """)

# 启动应用
demo.launch(
    server_name="0.0.0.0",  # 允许外部访问
    server_port=7860,       # 指定端口
    root_path="/",          # 设置 URL 前缀为 /
    share=True,
    debug=True,             # 开启调试模式
)

web_demo_gradio.py末尾改为了

demo.launch(server_name="127.0.0.1", server_port=7870, root_path='/chatglm', inbrowser=True, share=True, show_error=True)

特别注意root_path='/chatglm'这些一定要加上。(尽管看起来和gradio.conf重复了)。

nohup

保持脚本在后台长期运行,断开ssh连接也不会停止:

nohup python basic_demo/web_demo_gradio.py &

查找正在运行的python web_demo_gradio.py(或python xxx/web_demo_gradio.py),将它停止,然后运行新的web_demo_gradio.py:

ps aux | grep -E "python( .*/| )web_demo_gradio.py" | grep -v grep | awk '{print $2}' | xargs kill -9 && nohup python web_demo_gradio.py &

不滑动查看版:
ps aux | grep -E "python( .*/| )web_demo_gradio.py" | grep -v grep | awk '{print $2}' | xargs kill -9 && nohup python web_demo_gradio.py &
当然还有终端复用器 screen、tmux 等方法。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值