當咱們執行下面的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; } }