zoukankan      html  css  js  c++  java
  • 通过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 应用如何部署

  • 相关阅读:
    UNIX:处理SIGCHLD信号
    多维数组,指针数组使用,指向指针的指针
    bit field
    链表操作,获得泛型效果
    简明 Vim 练级攻略
    指针3,指向链表对象指针的指针
    大端模式,指针数组
    C宏设置掩码
    springboot 启动报错: Multiple Dockets with the same group name are not supported. The following duplicat
    HTML5学习笔记三
  • 原文地址:https://www.cnblogs.com/sdadx/p/10360208.html
Copyright © 2011-2022 走看看