Jeffrey的博客 Jeffrey的博客

左脑编程,右脑写诗

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

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

主流的部署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