使用Flask+uwsgi+Nginx部署Flask正式环境
环境准备
在开始正式讲解之前,我们将首先进行环境准备。
Step1:安装Python,pip以及nginx:
sudo apt-get updatesudo apt-get install python-pip python-dev nginx
Step2:安装Python库:uwsgi和flask
pip install uwsgi flask
创建Flask项目
下面,我们以一个简单的单文件Flask项目为例:
假设项目目录为/home/nianshi/flask_project。
编辑/home/nianshi/flask_project/main.py:
from flask import Flaskapp = Flask(__name__)@app.route("/")def hello():return "<h1 style="color:blue">Hello There!</h1>"if __name__ == "__main__":app.run(host='0.0.0.0')
编辑/home/nianshi/flask_project/run.py:
from main import appif __name__ == "__main__":app.run()
运行 python run.py ,然后本地访问 http://127.0.0.1:5000 将会看到:

当然直接使用python run.py运行服务的方式只适合本地开发。线上运行时要保证更高的性能和稳定性,我们需要使用uwsgi进行部署。
使用uwsgi部署Flask项目
使用uwsgi部署Flask项目只需要换一种命令来启动服务即可:
uwsgi --socket 0.0.0.0:5000 --protocol=http -p 3 -w run:app
我们来对uwsgi的参数进行分别讲解:
--socket 0.0.0.0:5000:指定暴露端口号为5000。--protocol=http:说明使用 http 协议,即端口5000可以直接使用HTTP请求进行访问。-p 3表示启动的服务占用3个进程。-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:
[uwsgi]module = run:appmaster = trueprocesses = 3chdir = /home/nianshi/flask_projectsocket = /home/nianshi/flask_project/myproject.socksocket = 127.0.0.1:8000logto = /home/nianshi/flask_project/myproject.logchmod-socket = 660vacuum = true
其中,文件参数说明如下:
- module相当于之前命令行中的-w参数;
- processes相当于之前的-p参数;
- socket此处包含两个,一个是指定了暴露的端口,另外指定了一个myproject.sock文件保存socker信息。
- chdir是项目路径地址。
- logto是日志输出地址。
可以看到,此处我们没有添加--protocol=http对应的配置信息。
即此时我们暴露的端口不能使用HTTP请求直接访问,当时需要经过Nginx进行反向代理。
此时,我们可以执行如下命令来通过配置文件启动uwsgi:
uwsgi --ini /home/nianshi/flask_project/uwsgi.ini
此时,我们已经正常启动了uWsgi服务,但是无法直接访问,需要继续部署Nginx服务。
下面,我们来编辑Nginx的配置文件/home/nianshi/flask_project/nginx.conf:
worker_processes 4;events { worker_connections 1024; }http {include mime.types;default_type application/octet-stream;server {listen 80;location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8000;}}}
其中,如下两行指定反向代理的信息:
include uwsgi_params;uwsgi_pass 127.0.0.1:8000;
两个分别指明了代理的解析方式是通过uwsgi解析以及uWsgi暴露的端口地址为127.0.0.1:8000。
下面,我们启动Nginx服务:
nginx -c /home/nianshi/flask_project/nginx.conf
使用Flask+uwsgi+Nginx部署Flask正式环境的更多相关文章
- centOS+uwsgi+nginx 部署flask项目,问题记录
用flask做的项目想要部署到centOS系统上,填了一些坑,终于成功了,记录一下遇到的问题: 此次部署主要是按照这个博客进行的 https://www.cnblogs.com/Ray-liang/p ...
- 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- Flask+uwsgi+Nginx+Ubuntu部署
学了一段时间flask,可是一直没有做过部署, 于是想着怎么部署呢, 想想,先吧服务给搞通吧,于是呢 就先想着去吧服务给搞起来,这里选择的是Flask+uwsgi+Nginx+Ubuntu, Pyth ...
- Flask + Gunicorn + Nginx 部署
最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + ngin ...
- 转:在 Ubuntu 上使用 Nginx 部署 Flask 应用
转:http://Python.jobbole.com/84286/ 原文出处: Vladik 译文出处:开源中国 我职业生涯的大部分都在使用微软的架构,最近我决定走出技术的舒适区,步入开源 ...
- 通过Nginx部署flask项目
用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...
- flask+uwsgi+supervisor部署流程
背景: 小鱼最近搞了个工程,python用的2.7(用3也可以),后端使用的是flask,服务器用的linux,使用 flask+uwsgi+supervisor部署 ,查阅相关博客.调试.实操,已经 ...
- 通过uwsgi+nginx启动flask的python web程序
通过uwsgi+nginx启动flask的python web程序 一般我们启动python web程序的时候都是通过python直接启动主文件,测试的时候是可以的,当访问量大的时候就会出问题pyth ...
随机推荐
- JDBC连接MySql,配置url报错
使用JDBC连接MySql时出现:The server time zone value '�й���ʱ��' is unrecognized or represents more than one ...
- HXY玩卡片(水题测试2017082401&洛谷2192)
题目链接:HXY玩卡片 很水, 简单讲一下思路. 如果没有0,直接无解,因为不可能是10的倍数. 是9的倍数,则各个数位上的数字和为9的倍数,所以5的数量一定是9的倍数,所以只要尽可能多输出9的倍数个 ...
- Django之auth模块用户认证模块
一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...
- python ui学习过程,使用pyqt5实现
首先安装pyqt5的包,然后打开notebook就可以编写了.当然这样编写,也可以用designer进行. 它是pyqt5-tools的一个exe软件,\Anaconda3\Lib\site-pack ...
- centos7 lvm实例
1.lvm安装 rpm -qa|grep lvm lvm version yum install -y lvm2* 2.磁盘分区 fdisk -l fdisk /dev/xvdb1 #分区结束标记 t ...
- 2018.12.17 bzoj4802: 欧拉函数(Pollard-rho)
传送门 Pollard−rhoPollard-rhoPollard−rho模板题. 题意简述:求ϕ(n),n≤1e18\phi(n),n\le 1e18ϕ(n),n≤1e18 先把nnn用Pollar ...
- Eclipse创建Dynamic Web部署
Eclipse创建Dynamic Web部署 http://blog.csdn.net/sweblish/article/details/6686046 Eclipse3.x中热部署项目,启动错误问题 ...
- mac os下 android studio真机调试
http://www.cnblogs.com/developer-wang/p/6719555.html 如果没有 .bash_profile 只需要创建 .bash_profile,然后增加andr ...
- python code(1)
from collections import UserList class MthChianList(UserList): def filter(self,predicste): return Mt ...
- Methods to reduce the number of pipeline stages
Several techniques have been proposed to reduce the number of pipeline stages. We categorize them in ...