码迷,mamicode.com
首页 > 其他好文 > 详细

使用Flask+uwsgi+Nginx部署Flask正式环境

时间:2021-06-11 18:35:20      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:就是   配置   str   desc   next   优点   location   __name__   扩展   

使用Flask+uwsgi+Nginx部署Flask正式环境

 

环境准备

在开始正式讲解之前,我们将首先进行环境准备。

Step1:安装Python,pip以及nginx:

  1. sudo apt-get update
  2. sudo apt-get install python-pip python-dev nginx

Step2:安装Python库:uwsgi和flask

  1. pip install uwsgi flask

创建Flask项目

下面,我们以一个简单的单文件Flask项目为例:
假设项目目录为/home/nianshi/flask_project
编辑/home/nianshi/flask_project/main.py

  1. from flask importFlask
  2. app =Flask(__name__)
  3. @app.route("/")
  4. def hello():
  5. return"<h1 style="color:blue">Hello There!</h1>"
  6. if __name__ =="__main__":
  7. app.run(host=‘0.0.0.0‘)

编辑/home/nianshi/flask_project/run.py

  1. from main import app
  2. if __name__ =="__main__":
  3. app.run()

运行 python run.py ,然后本地访问 http://127.0.0.1:5000 将会看到:

技术图片

当然直接使用python run.py运行服务的方式只适合本地开发。线上运行时要保证更高的性能和稳定性,我们需要使用uwsgi进行部署。

使用uwsgi部署Flask项目

使用uwsgi部署Flask项目只需要换一种命令来启动服务即可:

  1. uwsgi --socket 0.0.0.0:5000--protocol=http -p 3-w run:app

我们来对uwsgi的参数进行分别讲解:

  1. --socket 0.0.0.0:5000:指定暴露端口号为5000。
  2. --protocol=http:说明使用 http 协议,即端口5000可以直接使用HTTP请求进行访问。
  3. -p 3表示启动的服务占用3个进程。
  4. -w run:app:-w 指明了要启动的模块,run 就是项目启动文件 run.py 去掉扩展名,app 是 run.py 文件中的变量 app,即 Flask 实例。

启动完成后,我们可以在任意网络连通的机器上打开浏览器,并访问如下地址:
http://server_domain_or_IP:5000


至此,我们已经正常使用uwsgi部署了Flask项目。

使用nginx + uwsgi部署Flask项目

既然我们已经可以好似用uwsgi来部署Flask项目了,那么我们为什么还要使用Nginx + uwsgi来部署呢?
使用Nginx有如下一些优点:

  • 安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器
  • 负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能
  • 提高web服务器的IO性能:对于一些静态文件,可以直接由反向代理处理,不经过web服务器

那么,应该如何将Nginx与uwsgi结合来部署Flask项目呢?

在开始讲解Nginx之前,我们首先讲解如何将复杂的uwsgi命令参数保存在配置文件中,从而每次启动uwsgi时,无需添加繁琐的参数,只需要指定配置文件即可。
编辑/home/nianshi/flask_project/uwsgi.ini

  1. [uwsgi]
  2. module = run:app
  3. master = true
  4. processes =3
  5. chdir =/home/nianshi/flask_project
  6. socket =/home/nianshi/flask_project/myproject.sock
  7. socket =127.0.0.1:8000
  8. logto =/home/nianshi/flask_project/myproject.log
  9. chmod-socket =660
  10. vacuum = true

其中,文件参数说明如下:
- module相当于之前命令行中的-w参数;
- processes相当于之前的-p参数;
- socket此处包含两个,一个是指定了暴露的端口,另外指定了一个myproject.sock文件保存socker信息。
- chdir是项目路径地址。
- logto是日志输出地址。

可以看到,此处我们没有添加--protocol=http对应的配置信息。
即此时我们暴露的端口不能使用HTTP请求直接访问,当时需要经过Nginx进行反向代理。
此时,我们可以执行如下命令来通过配置文件启动uwsgi:

  1. uwsgi --ini /home/nianshi/flask_project/uwsgi.ini

此时,我们已经正常启动了uWsgi服务,但是无法直接访问,需要继续部署Nginx服务。

下面,我们来编辑Nginx的配置文件/home/nianshi/flask_project/nginx.conf

  1. worker_processes 4;
  2. events { worker_connections 1024;}
  3. http {
  4. include mime.types;
  5. default_type application/octet-stream;
  6. server {
  7. listen 80;
  8. location /{
  9. include uwsgi_params;
  10. uwsgi_pass 127.0.0.1:8000;
  11. }
  12. }
  13. }

其中,如下两行指定反向代理的信息:

  1. include uwsgi_params;
  2. uwsgi_pass 127.0.0.1:8000;

两个分别指明了代理的解析方式是通过uwsgi解析以及uWsgi暴露的端口地址为127.0.0.1:8000
下面,我们启动Nginx服务:

  1. nginx -c /home/nianshi/flask_project/nginx.conf

启动完成后,由于nginx本身监听的端口是80端口,因此我们可以直接访问机器地址进行访问:

 

使用Flask+uwsgi+Nginx部署Flask正式环境

标签:就是   配置   str   desc   next   优点   location   __name__   扩展   

原文地址:https://www.cnblogs.com/xiao-xue-di/p/14874034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!