flask+uwsgi+nginx配置


使用 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

评论
还没有评论
    发表评论 说点什么