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. Ignore warnings

    import warnings warnings.filterwarnings("ignore")

  2. String类型时间与Date时间转换

    1. String类型的时间转为DateTime public static Date transferString2Date(String s) { Date date = new Date(); ...

  3. 深入理解Java内存(图解)

    这篇文章是转自http://blog.csdn.net/shimiso/article/details/8595564博文. 本文分析基于jdk1.8 进入正题前首先要知道的是Java程序运行在JVM ...

  4. 解决WIN7下pl/sql连接弹出空白提示框问题

    问题描述: win7 32位系统,已安装oracle10.0开发客户端,已配置数据库, 登陆pl/sql时出现空白提示框问题,尝试重装oracle无果,于是上网查找解决方法,逐步尝试,终于把客户端弄好 ...

  5. idea安装阿里规范审查插件

    Install from repositories Settings >> Plugins >> Browse repositories... Search plugin by ...

  6. 探究Tomcat

    一.什么是Tomcat? 用来装载javaWeb程序,可以称它为Web容器.是一个运行java的网络服务器,底层是Sochet的一个程序,他也是JSP和Servlet的一个容器. 二.什么要用Tomc ...

  7. StatefulSet 模板,更新,扩缩容,删除

    概念: StatefulSet是用来管理有状态应用的工作负载API对象,kubectl 中可以简写sts ,sts每一个pod生成一个唯一的标识符,sts_name-number,number从0开始 ...

  8. 本地项目导入svn托管

  9. MobaXterm注册认证版,亲测可用,操作简单(本机已安装python3环境)

    去github地址下下载代码 解压后在该目录下打开CMD 执行MobaXterm-Keygen.py <UserName> <Version>命令 生成的文件放在安装目录下,我 ...

  10. SQL 2019 卸载方法

    一.关闭服务 1.  win+r      services.msc   打开服务,关闭与SQL有关的服务内容. 二.卸载应用 1.win+r  control   打开控制面板---卸载程序---卸 ...