Fork me on GitHub

通过Nginx部署flask项目

  用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=5000)

运行  python myapp.py,出现如下,即成功,可以curl 127.0.0.0.1:5000访问。

 

2.安装uwsgi(官方中文文档

  uwsgi使一个web服务器,flask是一个web框架。他们之间通过wsgi协议进行通讯。详情看uwsgi、wsgi和nginx的区别和关系

(env) ubuntu@0705:~/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:5000
#虚拟环境中的目录,这里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 = 1
# 线程数
threads = 1
buffer-size = 32768
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:5000
home = /home/ubuntu/flask_uwsgi/env
wsgi-file =  /home/ubuntu/flask_uwsgi/myapp.py
callable=app
processes = 1
threads = 1
buffer-size = 32768
master = true
stats=/home/ubuntu/flask_uwsgi/uwsgi.status
pidfile=/home/ubuntu/flask_uwsgi/uwsgi.pid

 

 修改nginx配置,

 重新加载nginx,sudo nginx -s reload

server {
    listen 80;
    server_name a.ozflhnb.top;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:5000;
     }
}

 

大功告成。 

 

 

 

参考:uwsgi、wsgi和nginx的区别和关系

         通过Nginx部署flask项目和静态站点

        官方中文文档

        写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程

        flask 部署

        Nginx的启动、停止与重启

        uwsgi服务启动(start)停止(stop)重新装载(reload)

        uwsgi生产环境部署flask项目

    Flask 应用如何部署

 

posted @ 2019-02-10 20:47  神雕爱大侠  阅读(17009)  评论(2编辑  收藏  举报