Flask 构建 Web API Wheel(十)—— 项目生产部署

Updated on in Python with 1,088 views

主流的部署 Flask 的方式有 Gunicorn + Nginx 和 uWSGI+ Nginx。Gunicorn 的方式会配置会更方便,在配合 Supervisor 守护进程,生产基本就够用了。

Gunicorn配置

Gunicorn 一个高效的 Python WSGI Server,通常用它来运行 WSGI 应用。通常只要配置几个重要的 Gunicorn 配置即可,具体的配置项参见Gunicorn文档

# gconfig.py
import multiprocessing

from gevent import monkey

monkey.patch_all()

# 是否守护进程
daemon = False
# 修改代码是否重启
reload = True
debug = False
bind = '0.0.0.0:5000'
worker_class = 'gevent'
loglevel = 'info'
pidfile = 'log/gunicorn.pid'
accesslog = 'log/access.log'
errorlog = 'log/error.log'
workers = multiprocessing.cpu_count() * 2 + 1

运行和停止项目

# 运行
gunicorn -c gconfig.py starter:app

# 停止
ps aux | grep gunicorn | awk '{print $2}' | xargs kill -9

协程

Flask 部署还需要使用到协程的方式替代线程,这里首选 Gevent。

Greenlet

Greenlet 没有自己的调度过程,所以一般不会直接使用

Eventlet

Eventlet 在 Greenlet 的基础上实现了自己的 GreenThread,实际上就是 greenlet 类的扩展封装

Gevent

Gevent 通过 Cython 调用 libev 来实现一个高效的 event loop 调度循环,是当前最方便的协程

Docker 部署

使用 Nginx + Gunicorn + Supervisor 部署后,可以将其打包为 Docker,Nginx 可独立部署,不做详解。

# Dockerfile
FROM python:3.7
MAINTAINER Jeffrey
WORKDIR /root/flask-tea
ADD . /root/flask-tea
RUN echo "Asia/Shanghai" > /etc/timezone
RUN python3.7 -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN python3.7 -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
ENTRYPOINT gunicorn -c gconfig.py starter:app

Docker 部署和启动

# 导出依赖
pipenv lock -r >> requirements.txt

# 构建 Dockerfile
docker build -t flask-tea .

# 运行 Docker 容器
docker run -d -p 5000:5000 -v $(pwd):/root/flask-tea -e FLASK_ENV=production --name flask-tea flask-tea

标题:Flask 构建 Web API Wheel(十)—— 项目生产部署
作者:Jeffrey

Responses
取消