当咱们执行下面的hello.py时,使用的flask自带的服务器,完成了web服务的启动。在生产环境中,flask自带的服务器,没法知足性能要求,咱们这里采用Gunicorn作wsgi容器,来部署flask程序。Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器。从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器与各类Web框架兼容,实现很是简单,轻量级的资源消耗。Gunicorn直接用命令启动,不须要编写配置文件,相对uWSGI要容易不少。前端
区分几个概念:nginx
WSGI:全称是Web Server Gateway Interface(web服务器网关接口),它是一种规范,它是web服务器和web应用程序之间的接口。它的做用就像是桥梁,链接在web服务器和web应用框架之间。web
uwsgi:是一种传输协议,用于定义传输信息的类型。flask
uWSGI:是实现了uwsgi协议WSGI的web服务器。bash
咱们的部署方式: nginx + gunicorn + flask服务器
# hello.py from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return '<h1>hello world</h1>' if __name__ == '__main__': app.run(debug=True)
web开发中,部署方式大体相似。简单来讲,前端代理使用Nginx主要是为了实现分流、转发、负载均衡,以及分担服务器的压力。Nginx部署简单,内存消耗少,成本低。Nginx既能够作正向代理,也能够作反向代理。app
正向代理:请求通过代理服务器从局域网发出,而后到达互联网上的服务器。负载均衡
特色:服务端并不知道真正的客户端是谁。框架
反向代理:请求从互联网发出,先进入代理服务器,再转发给局域网内的服务器。性能
特色:客户端并不知道真正的服务端是谁。
区别:正向代理的对象是客户端。反向代理的对象是服务端。
pip install gunicorn
查看命令行选项: 安装gunicorn成功后,经过命令行的方式能够查看gunicorn的使用信息。
$gunicorn -h
直接运行:
#直接运行,默认启动的127.0.0.1::8000 gunicorn 运行文件名称:Flask程序实例名
指定进程和端口号: -w: 表示进程(worker)。 -b:表示绑定ip地址和端口号(bind)。
$gunicorn -w 4 -b 127.0.0.1:5001 运行文件名称:Flask程序实例名
$ sudo apt-get install nginx
默认安装到/usr/local/nginx/目录,进入目录。
启动nginx:
#启动 sudo sbin/nginx #查看 ps aux | grep nginx #中止 sudo sbin/nginx -s stop
打开/usr/local/nginx/conf/nginx.conf文件
server { # 监听80端口 listen 80; # 本机 server_name localhost; # 默认请求的url location / { #请求转发到gunicorn服务器 proxy_pass http://127.0.0.1:5001; #设置请求头,并将头信息传递给服务器端 proxy_set_header Host $host; } }