用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能。所以采用nginx+uwsgi+flask的方式进行部署。
系统:Ubuntu 16.04 LTS
1.安装python3虚拟环境
安装虚拟环境还是很有必要的,例如刚开始我没有装,直接用系统的python3,到uwsgi启动时,遇到很多问题。Ubuntu 16.04 上有预装了2.7,3.5两个python版本。
sudo pip install virtualenv #安装virtualenv
mkdir flask_uwsgi #创建部署flask的文件夹
cd flask_uwsgi
virtualenv -p /usr/bin/python3 env #创建虚拟环境
source env/bin/activate #激活虚拟环境
deactivate #退出虚拟环境
注意:在创建虚拟环境时,virtualenv -p /usr/bin/python3 env 这种创建方式,虚拟环境的python版本为3.5。若直接 virtualenv env,虚拟出来的python环境为2.7。
2.安装Flask
安装Flask,使网站能够运行。
(env) ubuntu@0705:~/flask_uwsgi$ pip install flask
之后编辑myapp.py
from flask import Flask app = Flask(__name__) @app.route("/")
def hello():
return "Hello World!" @app.route("/moco")
def moco():
return "Hello moco!" if __name__ == "__main__":
app.run(host='0.0.0.0', port=)
运行 python myapp.py,出现如下,即成功,可以curl 127.0.0.0.1:5000访问。
2.安装uwsgi(官方中文文档)
uwsgi使一个web服务器,flask是一个web框架。他们之间通过wsgi协议进行通讯。详情看uwsgi、wsgi和nginx的区别和关系。
(env) ubuntu@:~/flask_uwsgi$pip install uwsgi
如果报下如下错误,先装依赖,如果再执行完成之后,还是失败,重新建立虚拟环境。
sudo apt-get install aptitude
sudo apt-get install build-essential python-dev
sudo apt-get install python3-dev
安装uwsgi成功后,创建一个文件测试下。
test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
#return ["Hello World"] # python2
return [b"Hello World"] # python3
然后,运行uWSGI:
uwsgi --http :8000 --wsgi-file uwsgi_test.py
参数含义:
http :8000:使用http协议,8000端口
wsgi-file uwsgi_test.py:加载指定文件uwsgi_test.py
上图出现表示,成功,curl 127.0.0.1:8000 进行访问。
3.uwsgi部署Flask
这里简化下,就用uwsgi部署1中的myapp.py。新建一个config.ini文件,内容如下。
[uwsgi]
http=127.0.0.1:
#虚拟环境中的目录,这里env后边不要/bin
home = /home/ubuntu/flask_uwsgi/env
#启动的文件
wsgi-file = /home/ubuntu/flask_uwsgi/myapp.py
# python 程序内用以启动的 application 变量名,不加callable=app,访问时报服务器错误Internal Server Error callable=app
# 处理器数
processes =
# 线程数
threads =
buffer-size =
master = true
stats=/home/ubuntu/flask_uwsgi/uwsgi.status
pidfile=/home/ubuntu/flask_uwsgi/uwsgi.pid
执行 uwsgi config.ini ,项目启动成功后,curl 127.0.0.1:5000/moco , curl 127.0.0.1:5000 进行验证。
4.nginx通过uwsgi部署Flask
修改config.ini 配置,socket一项有变化,
启动uwsgi, uwsgi config.ini
[uwsgi]
socket = 127.0.0.1:
home = /home/ubuntu/flask_uwsgi/env
wsgi-file = /home/ubuntu/flask_uwsgi/myapp.py
callable=app
processes =
threads =
buffer-size =
master = true
stats=/home/ubuntu/flask_uwsgi/uwsgi.status
pidfile=/home/ubuntu/flask_uwsgi/uwsgi.pid
修改nginx配置,
重新加载nginx,sudo nginx -s reload
server {
listen ;
server_name a.ozflhnb.top;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:;
}
}
大功告成。
写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程