美文网首页
Flask+uWSGI+Nginx

Flask+uWSGI+Nginx

作者: MrStranger | 来源:发表于2016-07-21 12:53 被阅读0次

    Python网络部署繁琐果然名不虚传,作为刚刚入门Flask的小白,昨天配置uWSGI花费了一晚上的时间。
    言归正传:

    先安装好Python,Flask等等的开发包,这里Google或者手中的教程中都会有,无需多言

    安装uWSGI:

    我是直接用pip命令行安装的
    pip3 install uwsgi

    测试uWSGI

    新建一个python文件test.py
    test.py中添加代码:

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"]
    

    将控制台cd到当前工程目录!将控制台cd到当前工程目录!将控制台cd到当前工程目录!
    启动uWSGI: uwsgi --http :9090 --wsgi-file test.py

    在浏览器中访问 http://127.0.0.1:9090
    输出字符:“Hello World”
    则uWSGI安装成功!

    配置Nginx+uWSGI

    笔者作为前PHP使用者,Mac曾装过PHP三合一环境包MAMP,因而想直接在MAMP的Nginx服务器中做一些配置工作来支持uwsgi

    在Mac系统中找到MAMP Nginx服务器配置文件:/Applications/MAMP/conf/nginx/nginx.conf
    作以下修改

    http{
        ...
        server{
           ...
             location / {
                 include uwsgi_params;
                 uwsgi_pass  127.0.0.1:5000;
              }
           ...
        }
        ...
    }
    

    新建一个简单的Flask工程 restTest(笔者没有使用虚拟环境,直接在Pycharm中建的)

    restTest
        - static
        - templates
        - restTest.py
    

    restTest.py中添加代码:

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return 'Hello world!'
    
    #调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码
    # 我们可以让外部模块调用的时候不执行我们的调试代码,那个时候,__name__的值为模块文件名restTest
    # 但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行.这个时候__name__是__main__
    if __name__ == '__main__':
        app.run()
    

    新建uWSGI的配置文件 config.ini

    restTest
        - static
        - templates
        - restTest.py
        - config.ini
    

    配置文件内容:

    [uwsgi]
    socket = 127.0.0.1:5000 #注:表示uWSGI与Nginx通信的地址和端口,和Nginx配置里的uwsgi_pass一致。
    processes = 4   #注:跑几个进程,这里用4个进程
    threads = 2     #每个进程的线程数。
    module=restTest #启动模块,与restTest.py文件名对应
    callable=app     # 与 app = Flask(__name__) 对应
    master = true  #主线程运行
    memory-report = true
    

    将控制台cd到当前工程目录!将控制台cd到当前工程目录!将控制台cd到当前工程目录!(uwsgi将从当前目录中加载配置文件)

    启动uwsgi: uwsgi --ini config.ini

    用MAMP启动Nginx服务器(用GUI界面启动即可)

    在浏览器中访问 http://127.0.0.1:7888(这里的端口号是MAMP中你为Nginx指定的端口号,跟uwsgi那个socket端口5000不一样)
    输出字符:“Hello World”!! 开心~~~~

    tips:

     - 启动uwsgi后如何退出:键入 Ctrl+c uwsgi会自动终止开启的进程
     - 每次修改restTest.py之后,需要重启一下uwsgi;nginx好像不用重启(实践证明),貌似很不方便,再想办法
    

    相关文章

      网友评论

          本文标题: Flask+uWSGI+Nginx

          本文链接:https://www.haomeiwen.com/subject/otebjttx.html