服务器上安装uwsgi和nginx,由于我的服务器上本来就有nginx,只是用pip装了uwsgi,所以就不多说了,而且过程也很简单的。
主要说一下配置文件:
说在前面:nginx监听的是80端口,uwsgi监听的是本地的socket3389端口,flask项目就是运行在3389端口的,下面会有两个配置文件,一个是nginx和uwsgi的交互配置,一个是uwsgi和flask的交互配置。
首先是nginx的配置,监听80端口,然后转发给uwsgi处理,我这里location是可以设置过滤条件的,下面这个配置比较简单,全部通过uwsgi监听的3389端口转发给uwsgi,所以后面就是uwsgi来处理了。
nginx.conf:
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name ip+port;#域名也是可以的
charset utf-8;
location / {
uwsgi_pass 127.0.0.1:3389;
include uwsgi_params;
uwsgi_param UWSGI_CHDIR /your_path/your_project;
uwsgi_param UWSGI_SCRIPT run:app;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
uwsgi配置文件
chdir指定的是项目的根路径,wsgi-file直接给出uwsgi加载的文件,指定加载flask的app
callable=app 这个选项一定不要掉
uwsgi.ini:
[uwsgi]
socket=:3389
chdir=/root/python-project/wechat/
wsgi-file=manage/flask_run.py
callable=app
processes=4
threads=2
master=True
然后就是flask框架的入口启动文件,下面给一个最简单的flask应用:
app的名字和callable=app是对应的
from flask import Flask
app = Flask(__name__)
@app.route("/test/")
def hei():
return 'hello man!'
重点完成。
linux服务器运行指令:
服务器启动nginx:
我这个是nginx软链接启动,启动方法很多
/usr/local/nginx/sbin/nginx -t #验证nginx配置文件:
/usr/local/nginx/sbin/nginx -s reload #重启nginx:
服务器启动uwsgi:
服务器配置文件目录下,同样是设置了软链接后的启动命令
uwsgi uwsgi_wx.ini
这种配置文件最关键的不是路径就是名字,很烦,所以一定要仔细,一一对应上。
以上就ok了,但是一个uwsgi.ini只能通过一个文件(flask_run.py)加载一个flask应用,题主本来想多通过wsgi-file选项指定多个文件,从而达到加载多个文件的,但是失败了。
查阅官方文档说可以加载一个模块,需要module选项。还有一个种方法就是在flask项目里面引入uwsgi模块(uwsgi是支持python的),用应用字典来加载多个应用,这种就不需要在配置中设置应用,考虑到小项目耦合问题,没采用,如图: