Fat's 杂物屋

  • 首页
  • 关于我
Fat's 杂物屋
python语言工作自动化技术
  1. 首页
  2. python
  3. 正文

ubuntu中部署基于Gradio框架的AI demo(nginx反向代理)

2023年5月13日 7899点热度 3人点赞 2条评论

之前用Resnet和Yolo等炼了个“海獭/水獭分类器”,想放个demo到i网上。
最初硬用flask后端+vue前端搭了个网站出来,但是部署实在太麻烦了。
最后发还是Gradio比较方便。

0. 前言

Gradio包本身可以设定share=True启动参数,让Gradio官方帮我们创建一个公网链接。
但是这个方法网络很慢,而且链接24小时就生效了。
所以最好还是通过nginx在自己的云服务器上部署。
这是成品:ai.fat.plus

1. Gradio安装和python代码

首先创建venv虚拟环境
python -m venv venv
启动venv环境
source ./venv/bin/activate

pip安装Gradio依赖包
pip install gradio

创建一个demo.py文件,就用官方的演示代码好了:

import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

demo.launch()

可以先启动py文件尝试一下效果:
python app.py
按默认设定,它会启动一个127.0.0.1:7860的web服务

但目前他只能监听本地端口的,需要通过nginx反向代理到这个端口,以提供公网服务。

2. nginx反向代理配置

如果还没安装nginx的话,建议使用Oneinstack脚本一次性安装LNPM环境。
并可以通过它的vhost.sh脚本创建nginx配置文件,很方便。

nginx的配置文件例子如下,
关键是proxy_pass http://127.0.0.1:17860;那几个location块,
将外网访问ai.fat.plus的请求全部将代理到127.0.0.1:7860。

注:这里我用的网址的是ai.fat.plus,并且配置了ssl证书。
这方面的教程可以参考别的文章……

server {
  listen 80;
  listen [::]:80;
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ssl_certificate /usr/local/nginx/conf/ssl/ai.fat.plus.crt;
  ssl_certificate_key /usr/local/nginx/conf/ssl/ai.fat.plus.key;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
  ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256;
  ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
  ssl_conf_command Options PrioritizeChaCha;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache shared:SSL:10m;
  ssl_buffer_size 2k;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on;
  ssl_stapling_verify on;
  server_name ai.fat.plus;
  access_log /data/wwwlogs/ai.fat.plus_nginx.log combined;
  index index.html index.htm index.php;
  root /data/wwwroot/Gradio;
  if ($ssl_protocol = "") { return 301 https://$host$request_uri; }

   location / {
      proxy_connect_timeout 60;
      proxy_read_timeout 60;
      proxy_send_timeout 60;
      proxy_intercept_errors off;
      proxy_http_version 1.1;
      proxy_set_header        Host            $http_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;
      proxy_pass http://127.0.0.1:7860;

  }
  #好像Gradio的ws协议是通过/queue路径的,所以这里加上
  location /queue {
      proxy_pass http://127.0.0.1:7860;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection Upgrade;
  }

  location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)$ {
    valid_referers none blocked *.fat.plus ai.fat.plus;
    if ($invalid_referer) {
        return 403;
    }
    proxy_pass http://127.0.0.1:7860;
  }

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    proxy_pass http://127.0.0.1:7860;
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    proxy_pass http://127.0.0.1:7860;
    expires 7d;
    access_log off;
  }
  location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
    deny all;
  }
  location /.well-known {
    allow all;
  }

3. 配置systemctl后台服务

为了python demo.py进程在后台持续运行,把它配置到后台服务并开机启动。

先用root权限:
sudo -i
创建配置文件:
vi /etc/systemd/system/gradio.service
配置文件实例如下:

[Unit]
Description=for Gradio
After=network.target

[Service]
#这里填写你安装ubuntu的用户和用户组
User=ubuntu
Group=ubuntu

#这里填写demo.py文件的位置
WorkingDirectory=/data/wwwroot/Gradio
#/data/wwwroot/Gradio/venv/bin/python是venv虚拟环境python的
#/data/wwwroot/Gradio/demo.py是demo文件的位置
ExecStart=/data/wwwroot/Gradio/venv/bin/python /data/wwwroot/Gradio/app.py

[Install]
WantedBy=multi-user.target

完成配置文件后,启动服务:
systemctl start gradio.service
确认是否启动成功:
systemctl status gradio.service

正常的话,把服务设定成开机启动
systemctl enable gradio.service

4.完成

正常的话,打开ai.fat.plus就可以访问啦!

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年5月13日

fat

我只是一只海獭。

点赞
< 上一篇

文章评论

  • 0519

    请问如果要对多个app进行代理,如7860和7861端口,应该怎么设置呢

    2024年5月19日
    回复
  • 111

    👍

    2024年2月29日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    回复 0519 取消回复

    fat

    我只是一只海獭。

    分类
    • python / 5篇
    • 数码硬件 / 5篇
    • 杂谈 / 1篇
    • 网站构建 / 13篇
    最新 热点 随机
    最新 热点 随机
    laravel 11.x 及 Vue3安装,作为SPA单网页应用框架 ubuntu中部署基于Gradio框架的AI demo(nginx反向代理) ubuntu构建LNMP环境和安装WordPress ubuntu使用flask错误:ImportError: libGL.so.1: cannot open shared object file: No such file or directory解决办法 uWSGI提示错误uwsgi: unrecognized option '--wsgi-file'解决办法 Laravel优化SQL分页查询语句
    美能达CM-512m3A分光测色计 数据提取程序 Git克隆时不带项目文件夹 Laravel中安装Bootstrap-vue时提示You are using the runtime-only build错误 laravel 11.x 及 Vue3安装,作为SPA单网页应用框架 Python cv2人脸识别及图像覆盖 Laravel用Composer install时报错:The Process class relies on proc_open

    COPYRIGHT © 2023 Fat's 杂物屋. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    粤ICP备2020113573号