flask+uwsgi+nginx配置

  • 2019-04-13
  • 127
  • 0
  • 1

使用 uwsgi + nginx 部署 flask。

主要需要配置 uwsgi,uwsgi 官方文档:uWSGI 2.0 中文文档

1. uwsgi 配置

安装见官方文档,需要注意的是:**有时只通过 apt install uwsgi 会导致 flask 的项目无法加载,此时再 pip install uwsgi **就好了。

1.1 配置(flask版本):

[uwsgi]
# 项目目录
chdir=/home/pi/my_flask/app
# 指定项目的application
wsgi-file=/home/pi/my_flask/app/SSD_Mobilenet_v2.py
callable=app

# 启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程
master=true

# 进程个数
workers=2

# 线程个数
threads=2

# 支持由应用生成的线程,如果使用了多线程threads,就不需要此了
#enable-threads=true

# 启动uwsgi的用户名和用户组
uid=pi
gid=pi

# sock 的文件路径, 用于 nginx 监听
#socket = /tmp/myflask.sock
#chmod-socket = 666

# 直接使用
http = 0.0.0.0:5000

# 设置自中断时间
harakiri=30

# 设置缓冲
post-buffering=4096

# 服务停止时自动移除 unix Socket 和 pid 文件
vacuum=true

# 序列化接受的内容,如果可能的话
thunder-lock=true

# 使SIGTERM信号习惯性地用于关闭应用(v2.1以下)
die-on-term=true

选项参数官方文档 uwsgi选项, 详细解释(按照修改和使用频率降序,这部分很重要所以很需要花点时间,我附了官方文档的链接):

  • chdir: 加载应用前 cd 到目录*我没有搞明白有什么用处…,官方详细:uWSGI选项
  • wsgi-file: 应用文件的路径(绝对路径),官方详细:uWSGI选项
  • callable: 应用的名称,flask 中这么定义的: app = Flask(__name__)
  • master: 内置的预派生+线程多worker管理模式,官方详细:词汇表
  • workers/processes: 同义,用于指定应用进程(也就是除master之外的进程)的数量,官方详细:uWSGI选项
  • threads: 每个应用进程(也就是除master之外的进程)的线程数,官方详细:uWSGI选项
  • enable-threads: 支持由应用生成的线程,如果使用了上面的多线程 threads 参数,那么自动启用线程支持。
  • uid, gid: uwsgi 实例的用户,不推荐使用 root,官方详细: 需要知道的事情 (最佳实践和“问题”) 必读第?条
  • http/http-socket: 如果你计划直接将uWSGI公开,那么使用 --http ,如果你想要在一个使用 http 与后端通信的web服务器后代理它,那么使用 --http-socket 。官方详细: 需要知道的事情 (最佳实践和“问题”) 必读第一条, 原生HTTP支持。如果要使用其他web服务器代理,那可用的除了http-socket(http协议)、还有socket(默认协议), uwsgi-socket(uwsgi)等等,官方详细:uWSGI选项 的前几条
  • 下面为非必须
  • harakiri: 每个请求最长持续时间,官方详细:词汇表
  • post-buffering: 自动读取HTTP请求有请求体的数据,官方详细:需要知道的事情 (最佳实践和“问题”) 必读
  • vacuum: 服务停止时自动移除 unix Socket 和 pid 文件
  • thunder-lock: 序列化accept(),官方详细:序列化accept(), 亦称惊群效应,亦亦称Zeeg难题
  • die-on-term: 使 SIGTERM 信号按照习惯性用于关闭应用,官方解释:需要知道的事情…链接见第一条

1.2 uwsgi 其他设置

uwsgi第三方应用:玩转Perl, Eyetoy和RaspberryPi

  • 协程: coroae参数,例如: coroae=5 ,协程比多进程更加节省内存
  • uwsgi 共享区域: 没有找到 python 怎么使用

2. nginx 配置

官方文档:Python/WSGI应用快速入门#将它放在一个完整的web服务器之后Nginx support

nginx 配置文件 server 下添加,其中 uwsgi_pass 需要与上面 uwsgi 中一致,配置样例:

location / {
    uwsgi_pass unix:/tmp///myflask.sock;
    include uwsgi_params;
}

3. Fatal error

3.1 socket 文件的权限

需要注意 socket 文件的权限,有时会因为此而无法与 nginx 连接

3.2 应用文件位置

需要注意应用文件位置,否则将导致 uwsgi 打开提示无 app


版权声明: 本网站所有资源采用BY-NC-SA 4.0协议进行授权,转载应当以相同方式注明文章来自:flask+uwsgi+nginx配置 - 一方的天地

评论

还没有任何评论,你来说两句吧

发表评论

陕ICP备18010914号
知识共享许可协议
本作品由一方天地采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,本站会在24h内删除有争议的资源。 -