Flask+uWSGI+Nginx

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)