flask+gunicorn+nginx部署pytorch/python应用
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应用的更多相关文章
- Flask + Gunicorn + Nginx 部署
最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + ngin ...
- Ubuntu | Flask + Gunicorn + Nginx 部署服务器环境
现在我们手里有一个准备发布的项目,那么如何将他上传到你的服务器,并让外网访问呢? 前提: 1. 安装了Python环境 apt-get install python-dev 2. 安装Flask pi ...
- flask+gunicorn+nginx部署
安装nginx和gunicorn yum install nginx pip3 install gunicorn flask项目配置 #main.py from flask import Flask ...
- 基于flask+gunicorn+nginx来部署web App
基于flask+gunicorn&&nginx来部署web App WSGI协议 Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求.Web框架和Web服务 ...
- Django + Gunicorn + Nginx 部署 Ubuntu 服务器
Django + Gunicorn + Nginx 部署服务器 获取腾讯云 root权限 本人的服务器使用的是腾讯云,腾讯云默认是没有开放 root 用户的,我们来创建 root 用户. 创建 roo ...
- 【新手向】阿里云上ubuntu+flask+gunicorn+nginx服务器部署(二)项目部署
本项目实现的是类似于ins的图片分享网站.继续(一),当nginx的配置已修改好后,要在远程服务器上部署网站,只需要几个步骤: 1 前期准备 2 将运行网站的代码从github上下载过来 3 下载依赖 ...
- Django + Gunicorn + Nginx 部署之路
前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...
- python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试
简述 Nginx在服务器部署中的作用 请求通过Nginx实现反向代理,将请求提交给代理服务器.本文中只用了一台服务器,所以是代理到本机. gunicorn的作用 作为服务器代码的容器.接收Nginx的 ...
- 用docker部署flask+gunicorn+nginx
说来惭愧,写了好几个flask django项目都是在原型阶段直接python app.py 运行的,涉及到部署用nginx和gunicorn 都是让别人帮我部署的,据说好像说很麻烦的样子,我就没自己 ...
- Centeos7部署Flask+Gunicorn+nginx
一.环境安装 pip3 install flask pip3 install gunicorn pip3 install nginx 二.模块介绍 1.Flask是一个使用 Python 编写的轻量级 ...
随机推荐
- Ignore warnings
import warnings warnings.filterwarnings("ignore")
- String类型时间与Date时间转换
1. String类型的时间转为DateTime public static Date transferString2Date(String s) { Date date = new Date(); ...
- 深入理解Java内存(图解)
这篇文章是转自http://blog.csdn.net/shimiso/article/details/8595564博文. 本文分析基于jdk1.8 进入正题前首先要知道的是Java程序运行在JVM ...
- 解决WIN7下pl/sql连接弹出空白提示框问题
问题描述: win7 32位系统,已安装oracle10.0开发客户端,已配置数据库, 登陆pl/sql时出现空白提示框问题,尝试重装oracle无果,于是上网查找解决方法,逐步尝试,终于把客户端弄好 ...
- idea安装阿里规范审查插件
Install from repositories Settings >> Plugins >> Browse repositories... Search plugin by ...
- 探究Tomcat
一.什么是Tomcat? 用来装载javaWeb程序,可以称它为Web容器.是一个运行java的网络服务器,底层是Sochet的一个程序,他也是JSP和Servlet的一个容器. 二.什么要用Tomc ...
- StatefulSet 模板,更新,扩缩容,删除
概念: StatefulSet是用来管理有状态应用的工作负载API对象,kubectl 中可以简写sts ,sts每一个pod生成一个唯一的标识符,sts_name-number,number从0开始 ...
- 本地项目导入svn托管
- MobaXterm注册认证版,亲测可用,操作简单(本机已安装python3环境)
去github地址下下载代码 解压后在该目录下打开CMD 执行MobaXterm-Keygen.py <UserName> <Version>命令 生成的文件放在安装目录下,我 ...
- SQL 2019 卸载方法
一.关闭服务 1. win+r services.msc 打开服务,关闭与SQL有关的服务内容. 二.卸载应用 1.win+r control 打开控制面板---卸载程序---卸 ...