django项目使用uwsgi方式启动

django项目使用uwsgi方式启动

环境:虚拟机ubuntu 20.0 django2.2 python3.6.8

基于docker 部署

前言目的:

python manage.py runserver单进程的启动方式,更改为使用uwsgi多进程方式启动,增加服务并发数

知识补充 WSGI /uwsgi /uWSGI

WSGI:是python Web服务器网关接口。是python应用程序/框架和Web服务器之间通信的一种规范,通信协议

uwsgi:是线路协议,常用于uWSGI服务器与其他网络服务器的数据通信

uWSGI:实现了uwsgi和WSGI两种协议的Web服务器

uWSGI环境安装:pip install uwsgi

文件配置:在项目根目录下(manage.py同级目录), 创建名为 uwsgi.ini的文件,文件内容如下

[uwsgi]
# 项目绝对路径
chdir = /root/Server/
;套接字方式的IP地址:端口号【此模式需要有nginx,如果只用uwsgi的话可以忽略此项】
;socket=0.0.0.0:8000
# 监听的端口,当没有nginx时使用这个
http = 0.0.0.0:8000
# 静态资源代理  映射目录,实际静态目录
;static-map = /static= /root/Server/static
# 主应用中的wsgi文件
wsgi-file = /root/Server/Server/wsgi.py

# 启动一个master进程来管理其他的子进程
master = True
# 开启四个进程
processes = 4
# 两个线程
thread = 2
# 设置每个工作进程处理请求上限,达到上限时,将回收/重启,可预防内存泄漏
max-request = 5000
# 服务停止时自动移除unix socket和pid 文件
vacuum = True

# uwsgi 日志
#daemonize = /root/Server/logs/uwsgi.log
logto = /root/Server/logs/ty_log.log
# 日志格式化
logformat = %(ltime) | pid:%(pid) wid:%(wid) | %(proto) %(status) | %(method) | %(host)%(uri) | request_body_size:%(cl) | response_body_size:%(rsize)

# 服务的pid记录文件
pidfile = uwsgi.pid

uWSGI日志文件配置说明

  • daemonize配置日志方式会以后台守护进程的方式写入配置的日志文件

  • logto 会以非后台守护进程方式写入日志文件,适用于docker 部署的方式

docker部署,在uwsgi启动过程中,docker 日志中出现[uWSGI] getting INI configuration from uwsgi.ini,uwsgi.log 日志也并没有报错,但是容器却起不来,很有可能就是uWSGI的配置文件中配置了daemonize,改为logto 就可以了。

uWSGI格式化参数说明

可参照官网:https://doc.codingdict.com/uwsgi/uwsgi-docs-zh.readthedocs.io/zh_CN/latest/LogFormat.html

# 这些是从当前请求内部的 wsgi_request 结构获取的。
%(uri) -> REQUEST_URI
%(method) -> REQUEST_METHOD
%(user) -> REMOTE_USER
%(addr) -> REMOTE_ADDR
%(host) -> HTTP_HOST
%(proto) -> SERVER_PROTOCOL
%(uagent) -> HTTP_USER_AGENT (自1.4.5起)
%(referer) -> HTTP_REFERER (自1.4.5起)

# 这些是简单的函数,调用来生成日志变量值:
%(status) -> HTTP响应状态码
%(micros) -> 响应时间,以微秒为单位
%(msecs) -> 响应时间,以毫秒为单位
%(time) -> 请求开始的时间戳
%(ctime) -> 请求开始的ctime
%(epoch) -> Unix格式的当前时间
%(size) -> 响应体大小 + 响应头大小 (自1.4.5起)
%(ltime) -> 人类可读(Apache风格)的请求时间 (自1.4.5起)
%(hsize) -> 响应头大小 (自1.4.5起)
%(rsize) -> 响应体大小 (自1.4.5起)
%(cl) -> 请求内容体大小 (自1.4.5起)
%(pid) -> 处理请求的worker的pid (自1.4.6起)
%(wid) -> 处理请求的worker的id (自1.4.6起)
%(switches) -> 异步切换数 (自1.4.6起)
%(vars) -> 请求中的CGI变量数 (自1.4.6起)
%(headers) -> 已生成的响应头数 (自1.4.6起)
%(core) -> 运行请求的核心 (自1.4.6起)
%(vsz) -> 地址空间/虚拟内存使用 (单位为字节) (自1.4.6起)
%(rss) -> RSS内存使用 (单位为字节) (自1.4.6起)
%(vszM) -> 地址空间/虚拟内存使用 (单位为MB) (自1.4.6起)
%(rssM) -> RSS内存使用 (单位为MB) (自1.4.6起)
%(pktsize) -> 内部的请求uwsgi包大小 (自1.4.6起)
%(modifier1) -> 请求的modifier1 (自1.4.6起)
%(modifier2) -> 请求的modifier2 (自1.4.6起)
%(metric.XXX) -> 访问XXX度量值 (见 度量(Metrics)子系统)
%(rerr) -> 请求的读错误数 (自1.9.21起)
%(werr) -> 请求的写错误数 (自1.9.21起)
%(ioerr) -> 请求的读写错误数 (自1.9.21起)
%(tmsecs) -> 请求开始时间戳,自纪元起,单位为毫秒 (自1.9.21起)
%(tmicros) -> 请求开始时间戳,自纪元起,单位为微秒 (自1.9.21起)
%(var.XXX) -> 请求变量XXX的内容 (例如var.PATH_INFO,自1.9.21起可用)

启动服务:uwsgi --ini uwsgi.ini

Django中代码有任何修改,都需要重启uwsgi
posted @   不懂开发的程序猿!  阅读(2088)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示