1. 基于flask实现python服务
Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。

安装:采用anaconda/miniconda安装python的时候,应该已经安装了。
使用:这里举个简单的例子,也为后面使用gunicorn和nginx做准备。
# main.py
from flask import Flask
app = Flask(__name__)
@app.route('/predict')
def index():
return 'this server is running on port:6001, url is predict'
# 在index函数就可以添加任何操作,如机器学习/深度学习模型操作等

if __name__=='__main__':
app.debug = True
app.run(host="0.0.0.0", port=6001)

运行,在终端输入:python main.py # main.py为python文件名
这里在本机的6001端口起了一个服务,如果在浏览器中访问http://0.0.0.0:6001/predict,就会打印出:this server is running on port:6001, url is predict
结果,如下图所示

小结,采用flask相对简单,应该不能支持并发,所以需要gunicorn
2. 并发支持gunicorn
Gunicorn 绿色独角兽’是一个Python WSGI UNIX的HTTP服务器。这是一个预先叉工人模式,从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器大致与各种Web框架兼容,只需非常简单的执行,轻量级的资源消耗,以及相当迅速。
使用gunicorn的目的,主要是为了并发和鲁棒性。

安装:直接使用python的包管理工具pip就可以直接安装
pip install gunicorn
1
参数设置,其实就是告诉服务的地址,并发数,超时时间等信息:gunicorn支持三种参数设置,主要采用config文件和命令行两种
config文件:通过一个python文件做配置,使用时采用
gunicorn -c confing.py # config.py为配置文件
1
参考配置项如下,具体可以百度。
# coding:utf-8
# config.py
import os
import multiprocessing
bind = '127.0.0.1:8000' #绑定ip和端口号
backlog = 512 #监听队列
# chdir = '/home/test/server/bin' #gunicorn要切换到的目的工作目录
timeout = 30 #超时
worker_class = 'gevent' #使用gevent模式,还可以使用sync 模式,默认的是sync模式

workers = multiprocessing.cpu_count() * 2 + 1 #进程数
threads = 2 #指定每个进程开启的线程数
daemon = True # 后台运行的方式
3
其中最主要bind:指定服务的地址和端口,workers:进程数,为了支持并发等
命令行:直接在命令行指定参数,例子如下:
gunicorn -w 5 -b 0.0.0.0:8000 main:app --reload -t 500 -D
1
参数解释:
-w:进程数
-b:ip和端口号
main:app:进程服务
–reload:python文件修改时自动重载
-t:超时时间
-D:后台运行
运行,这里分别采用两种方式启动前面main.py的flask服务
配置文件
gunicorn -c config.py main:app # main指flask应用的python文件,app指flask应用,注意这里采用的是config.py配置文件中的8000端口,而不是main.py中的6001,所以也可以采用python main.py启动flask应用。
1

效果:在浏览器访问http://0.0.0.0:8000/

可以看到6001端口变成了8000

命令行
gunicorn -w 4 -b 127.0.0.1:8000 main:app
1
但是,现在有另外一个问题,你在本机是可以访问了,但是别人的电脑却访问不了你的服务。如下图。这个时候就需要nginx了

3. nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。

安装:
sudo apt-get install nginx
1
配置修改:先备份原有配置,再修改
sudo cp /etc/nginx/sites-available/default default.bak
sudo nano /etc/nginx/sites-available/default
1
2
可参数如下配置:

server {
listen 80;
server_name example.org; # 这是HOST机器的外部域名,用地址也行

location / {
proxy_pass http://127.0.0.1:8000; # 这里是指向 gunicorn host 的服务地址
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}

关键参数详解:

listen:对外的端口
server_name:对外的域名
proxy_pass: 要映射到的服务地址
验证配置
sudo nginx -t
# 若输出,则配置成功
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

启动nginx
sudo service nginx restart
1
停止nginx
sudo service nginx stop
1
效果:这时候在浏览器访问:http://0.0.0.0,就会出现下图效果。

这里出现了问题,因为nginx做反向代理的时候,服务的地址为:http://127.0.0.1:8000,然而8000为gunicorn配置的端口,这些都没问题,唯独少了 /predict,因为flask应用是监听:/predict后缀的。
所以,做如下修改:
proxy_pass http://127.0.0.1:8000; # 这里是指向 gunicorn host 的服务地址
# 改为
proxy_pass http://127.0.0.1:8000/predict; # 这里是指向 gunicorn host 的服务地址
1
2
3
然后重启nginx,正确效果如下:

4. 总结
整个流程就是nginx——gunicorn——flask,可以参考这里的总结Flask + Gunicorn + Nginx 部署
————————————————
版权声明:本文为CSDN博主「农夫山泉2号」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011622208/article/details/86168313

flask+gunicorn+nginx部署pytorch/python应用的更多相关文章

  1. Flask + Gunicorn + Nginx 部署

    最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + ngin ...

  2. Ubuntu | Flask + Gunicorn + Nginx 部署服务器环境

    现在我们手里有一个准备发布的项目,那么如何将他上传到你的服务器,并让外网访问呢? 前提: 1. 安装了Python环境 apt-get install python-dev 2. 安装Flask pi ...

  3. flask+gunicorn+nginx部署

    安装nginx和gunicorn yum install nginx pip3 install gunicorn flask项目配置 #main.py from flask import Flask ...

  4. 基于flask+gunicorn+nginx来部署web App

    基于flask+gunicorn&&nginx来部署web App WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务 ...

  5. Django + Gunicorn + Nginx 部署 Ubuntu 服务器

    Django + Gunicorn + Nginx 部署服务器 获取腾讯云 root权限 本人的服务器使用的是腾讯云,腾讯云默认是没有开放 root 用户的,我们来创建 root 用户. 创建 roo ...

  6. 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署

    本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...

  7. Django + Gunicorn + Nginx 部署之路

    前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...

  8. python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试

    简述 Nginx在服务器部署中的作用 请求通过Nginx实现反向代理,将请求提交给代理服务器.本文中只用了一台服务器,所以是代理到本机. gunicorn的作用 作为服务器代码的容器.接收Nginx的 ...

  9. 用docker部署flask+gunicorn+nginx

    说来惭愧,写了好几个flask django项目都是在原型阶段直接python app.py 运行的,涉及到部署用nginx和gunicorn 都是让别人帮我部署的,据说好像说很麻烦的样子,我就没自己 ...

  10. Centeos7部署Flask+Gunicorn+nginx

    一.环境安装 pip3 install flask pip3 install gunicorn pip3 install nginx 二.模块介绍 1.Flask是一个使用 Python 编写的轻量级 ...

随机推荐

  1. 记录jupyter lab 多个kernel混乱的问题

    问题描述 在Anaconda下我有多个虚拟环境,其中一个叫d2l,由于pytorch版本和cuda算力不匹配,重新create了一个环境:d2l_new.然后环境配置好了之后激活环境,启动jupyte ...

  2. vue组件传参,父子组件以及兄弟组件(非常详细)

    一,父子组件传参. 1.首先在项目目录中新建template文件夹,里边包含父组件:List.vue以及子组件:firstComponent.vue,secondComponent.vue. 2.父组 ...

  3. aos.js 与 swiper 组合,翻页后无法触发aos的效果

    手动给除第一页之外的需要特效的元素添加 class="aos-animate" 转自:https://cloud.tencent.com/developer/ask/sof/302 ...

  4. Typora 基本功能

    Typora 基本功能 typora 下载官网:https://www.typora.io/       "安装到C盘" 基本使用 1.该文件后缀 .md2.六级标题 :ctrl+ ...

  5. ybtoj 12F

    求值的话改为求解前缀和的值,通过两个前缀和相减即可得到每个值. 每次询问相当于给一个方程. 一共有 $n$ 个未知数,因此需要 $n$ 个方程,同时每个数都必须至少在方程中出现一次. 最小生成树求解即 ...

  6. 【Unity】使用dmp文件定位Player崩溃原因

    写在前面 如果在Player运行时突然崩溃,仅靠Player.log日志文件不能定位引起崩溃的代码,那么可以尝试利用dmp(仅限Windows平台)文件定位崩溃原因. 正文 环境 Unity 2020 ...

  7. 使用selemium被反爬解决方法

    使用selenium进行自动化的时候,如csdn登录时可能会遇到检测反爬,从而需要验证       1. 反爬 有时候,我们利用 Selenium 自动化爬取某些网站时,极有可能会遭遇反爬. 实际上, ...

  8. VisualVM无法运行,修改配置文件

      在VisualVM安装位置下找到etc目录修改etc目录下的visualvm.conf文件 加入配置 参数 指定JDK或JRE路径,如 visualvm_jdkhome="C:\xxx\ ...

  9. 简单的python格网算法算数据密集度demo

    # 格网算法计算数据集区域数据密集度 import time import random import numpy as np import pandas as pd # 模拟数据集 def crea ...

  10. OpenJudge2811:熄灯问题(枚举)

    熄灯问题 有一个由按钮组成的矩阵,其中每行有6个按钮,共5行.每个按钮的位置上有一盏灯.当按下一个按钮后,该按钮以及周围位置(上边.下边.左边.右边)的灯都会改变一次.即,如果灯原来是点亮的,就会被熄 ...