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 编写的轻量级 ...
随机推荐
- Vue2路由跳转传参,获取路由参数,Vue监听路由
1 this.$router.push({ 2 // name:路由组件名 3 name: routeName, 4 query: { 5 mapId:this.mapId 6 } 7 }) 8 9 ...
- 类内函数的override问题-方法
Question: have a base class with a virtual function: class Base { public: virtual void Function(); } ...
- 2月28日Android开发学习
界面显示与逻辑处理 Android Studio利用XML标记描绘应用界面,使用java代码书写程序逻辑. 把App界面设计与代码逻辑分开的好处 使用XML文件描述App界面,可以很方便地在Adroi ...
- ajax的简单应用
jsp文件: <%@ page import="java.text.SimpleDateFormat" %><%@ page import="java. ...
- requests模块获取cookie -----class 'requests.cookies.RequestsCookieJar'
#coding=utf-8 import requests url="http://www.baidu.com" response=requests.get(url) cookie ...
- MySQL的卸载与安装
卸载 1.右键点击我的电脑 -->服务-->停掉MySQL的服务 2.控制面板卸载MySQL 3.删除隐藏文件夹 C:\ProgramData下的MySQL文件夹 4.删除MySQL文件夹 ...
- Cookie 设置 添加 删除 修改
置cookie 如果设置domin 后面的域名前面就会有. <script>//设置cookiefunction setCookie(cname, cvalue, exdays) ...
- vue项目启动报错问题解决. Module build failed: Error: Node Sass does not yet support your current environment
导入vue项目后,启动报错,异常如下: 1 error in ./src/pages/home.vue 2 Module build failed: Error: Node Sass does not ...
- UG二次开发-CAM-获取修改路径参数
项目中要获取路径参数,网上大多是C++的例子,而本项目是用C#写的,探索了下,记录下. 以获取某条路径的刀具号为例,其他参数依此类推. using System; using System.Colle ...
- CSS3之动画三大特性
一 过渡模块 1 基本使用 1,过渡三要素1.1必须要有属性发生变化1.2必须告诉系统哪个属性需要执行过渡效果1.3必须告诉系统过渡效果持续时长 2.注意点当多个属性需要同时执行过渡效果时用逗号隔开即 ...