uwsgi 启动Django项目

题外话

如需转载文章,请保留文章出处(blog.csdn.net/knight_zhou)。因为我的很多文章一般是会进行更新的。也避免百度搜出来一大推相似的文章,却找不到原创博主。

nohup启动和使用UWSGI方式启动Python的web项目的区别?

  • runserver方法是django开发中经常用到的运行方式,这个运行方式 是django自带的,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。
  • uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http 等协议。注意uwsgi是一种通信协议,而uWSGI是实现uwsgi协议和WSGI协议的 Web 服务器。uWSGI具有超快的性能、低内存占用和多app管理等优点,并且搭配着Nginx就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能

uwsgi 参数详解

#uwsgi --ini uwsgi.ini             # 启动
#uwsgi --reload uwsgi.ini          # 重启
#uwsgi --stop uwsgi.ini            # 关闭


[uwsgi]
# 字符编码
env=LC_ALL=en_US.UTF-8

# 指定IP端口
http = :8386

# the local unix socket file than commnuincate to Nginx   用于和 nginx 进行数据交互的端口
#socket = 127.0.0.1:8001

# 项目目录
chdir = /opt/my_system

# 启动文件地址
wsgi-file = /opt/my_system/manage.py

# uWSGI加载的模块中哪个变量将被调用
callable = app

# 自动移除unix Socket和pid文件当服务停止的时候
vacuum = true

# socket权限设置
chmod-socket = 664

# uWSGI服务器运行时的用户id
uid=root

# uWSGI服务器运行时的用户组id
gid=root

# 启用主进程
master = true

# 进程个数,工作进程的最大数量
processes = 5

# 主进程id文件目录
pidfile = /opt/my_system/uwsgi.pid

# 启用线程
enable-threads=true

# 在每个辅助进程中启动的线程数
threads=4

# 一个高阶的cheap模式,在启动的时候只会分配n个工作进程,并使用自适应算法启动新的进程
cheaper = 10

# 在经过sec秒的不活跃状态的进程会被销毁(进入了cheap模式),并最少保留cheaper指定的进程数
idle = 3600

# 设置自中断时间,设置一个请求的超时时间(秒),如果一个请求超过了这个时间,则请求被丢弃
harakiri=30

# 当一个请求被harakiri杀掉会,会输出一条日志
harakiri-verbose = true

# 开启内存使用情况报告
memory-report = true

# 设置平滑的重启(直到处理完接收到的请求)的长等待时间(秒)
reload-mercy = 10

# 设置缓冲
#post-buffering=4096

# 控制台输出日志目录
daemonize = /var/log/53kf/my_system/my_system.log

# 设置日志监听对象
logto=/var/log/53kf/my_system

# 通过该端口可以监控 uwsgi 的负载情况
stats = 127.0.0.1:8387

# 配置虚拟环境路径
virtualenv = /home/pkuokuo/venv/my_system

#设置用于uwsgi包解析的内部缓存区大小为64k。默认是4k。
buffer-size=65536

#在每个worker而不是master中加载应用
lazy-apps=true

# 设置工作进程使用虚拟内存超过N MB就回收重启
reload-on-as= 1024

# 自动给进程命名
auto-procname = true

# 为进程指定前缀
procname-prefix-spaced = xc-mms

# 设置工作进程每处理N个进程就会被回收重启
max-requests=500000
 
# 设置工作进程使用物理内存超过N MB就回收重启
reload-on-rss=100

# 设置socket超时时间,默认4秒
socket-timeout=10
 
# 限制http请求体的大小(Bytes)
limit-post=4096

# clear environment on exit
vacuum = true

# 不记录request日志,只记录错误日志
disable-logging = true
 
# 将日志打印到syslog上
#log-syslog = true

#stats = /opt/my_system/uwsgi.status

步骤

首先安装依赖

pip install uwsgi

命令行启动:

首先进入虚拟环境
 

source /home/data/webroot/devops-car/virtual/bin/activate

不带静态文件启动

uwsgi --http 0.0.0.0:9000 --chdir /opt/devops/ --wsgi-file /opt/devops/devops/wsgi.py --master --processes 4 --threads 2

带静态文件启动

uwsgi --http 0.0.0.0:9000 --chdir /opt/devops/ --wsgi-file /opt/devops/devops/wsgi.py --static-map=/static=static --master --processes 4 --threads 2

配置文件启动

(1)目录结构如下,我们再我们的项目根路径下创建文件夹 uwsgi_conf,把配置文件(uwsgi.ini)写在里面,当然日志路径你可以写到其他地方也可以写在这个目录里。

$ tree -L 1 devops/
devops/
├── audit
├── devops
├── manage.py
├── opsdb
├── static
├── sysadmin
├── templates
├── test
└── uwsgi_conf

创建日志目录:

$ tree devops/uwsgi_conf/
devops/uwsgi_conf/
├── logs
│   └── uwsgi.log
├── pid
└── uwsgi.ini

2 directories, 2 files

(2) 编写配置文件uwsgi.ini:

[uwsgi]
chdir=/home/data/webroot/devops-car/devops
module=devops.wsgi:application
processes=8
workers=5
procname-prefix-spaced=uwsgi-devops              
py-autoreload=1                        
http=0.0.0.0:8000
for=static
static-map=/static=%(chdir)/%(_)
endfor=
uid=knight.zhou
gid=knight.zhou
master=true
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
daemonize=%(chdir)/uwsgi_conf/logs/uwsgi.log
pidfile=%(chdir)/uwsgi_conf/pid/uwsgi.pid

也可以不指定静态文件,静态文件由Nginx进行解析:

[uwsgi]
chdir=/home/data/webroot/devops-car/devops
module=devops.wsgi:application
processes=8
workers=5
procname-prefix-spaced=uwsgi-devops              
py-autoreload=1                        
http=0.0.0.0:8000
uid=knight.zhou
gid=knight.zhou
master=true
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
daemonize=%(chdir)/uwsgi_conf/logs/uwsgi.log
pidfile=%(chdir)/uwsgi_conf/pid/uwsgi.pid

(3) 启动和停止

# 启动
uwsgi --ini uwsgi.ini

# 停止
uwsgi --stop pid/uwsgi.pid 

(3) 检查是否启动

$ ps -ef |grep uwsgi
knight.+   626   598  0 21:26 pts/0    00:00:00 grep --color=auto uwsgi
knight.+ 32617     1  0 21:22 ?        00:00:00 uwsgi-devops uWSGI master
knight.+ 32619 32617  0 21:22 ?        00:00:01 uwsgi-devops uWSGI worker 1
knight.+ 32620 32617  0 21:22 ?        00:00:01 uwsgi-devops uWSGI worker 2
knight.+ 32621 32617  0 21:22 ?        00:00:01 uwsgi-devops uWSGI worker 3
knight.+ 32622 32617  0 21:22 ?        00:00:01 uwsgi-devops uWSGI worker 4
knight.+ 32623 32617  0 21:22 ?        00:00:01 uwsgi-devops uWSGI worker 5
knight.+ 32624 32617  0 21:22 ?        00:00:00 uwsgi-devops uWSGI http 1

注意: 如果启动的时候有通过环境变量区分配置文件,需要修改如下(如果你不是通过设置环境变量启动话,下面的就不需要修改):

$ cat ../devops/wsgi.py 
"""
WSGI config for devops project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'devops.settings_prd')

application = get_wsgi_application()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叱咤少帅(少帅)

如果文章对你有帮助就打赏下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值