linux-部署2

gunicorn+supervisor


1.gunicorn

安装:

pip3 install gunicorn

配置:

两种方式:命令和文件,因为配置项比较多,所以放在文件里,启动时指明配置文件即可

命令:

如:gunicorn –w 4 –b 0.0.0.0:5000 –c config.py manager:app

-b 绑定应用的ip和端口

-w work的数量,官方说可以有:核心数*+1个

-c 指定配置文件

manager 入口程序文件,即manager.py

app manager中的flask对象


配置文件config.py:

import multiprocessing
import os

# 如果没有日志目录,创建一个;在当前gunicorn运行目录
if not os.path.exists('log'):
     os.mkdir('log')

debug = True

bind = '0.0.0.0:5000'


# pid文件为文本文件,内容只有一行, 记录了该进程的ID;

# 防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。
pidfile = 'log/gunicorn.pid'   


loglevel = 'debug'    # 日志等级,与accesslog相关
logfile = 'log/gunicorn_debug.log'    # debug日志?实际没有生成
errorlog = 'log/gunicorn_error.log'    # 运行产生的具体日志信息
accesslog = 'log/gunicorn_access.log'    # 只有请求日志,每个请求一条,包括请求的时间,大小,路径

access_log_format = '%(h)s %(l)s %(p)s %(u)s %(t)s %(r)s %(s)s %(b)s %(f)s %(a)s %(D)s'
reload = True

# 启动的进程数
workers = multiprocessing.cpu_count()

# 以何种方式处理请求

# (同步:sync),(异步:gevent/eventlet),(asyncIO:gthread/ gaiohttp),(tornado:tornado)
worker_class = 'gunicorn.workers.ggevent.GeventWorker'

x_forwarded_for_header = 'X-FORWARDED-FOR'

配置好后通过gunicorn –c config.py manager:app启动


将flask日志整合进gunicorn

这样就不需要单独存储flask的日志,最终只需要查看gunicorn记录的flask日志即可

if __name__ != '__main__':
     # 如果不是直接运行,则将日志输出到 gunicorn 中

    # 会读取gunicorn的日志配置,如存放目录、格式等
     gunicorn_logger = logging.getLogger('gunicorn.error')
     app.logger.handlers = gunicorn_logger.handlers
     app.logger.setLevel(gunicorn_logger.level)

猜你喜欢

转载自www.cnblogs.com/justaman/p/11888392.html