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好像不用重启(实践证明),貌似很不方便,再想办法