uWSGI实战之Django配置经验
Posted lxjshuju
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uWSGI实战之Django配置经验相关的知识,希望对你有一定的参考价值。
- uWSGI 是应用服务器,实现了uwsgi, wsgi等协议。能够执行wsgi 应用
- uwsgi 是协议名
Django配置
以下是自己常常常使用的一个配置模板。基于1.9以上的版本号使用的。 主要基于django应用
[uwsgi]
djangoproject=/home/www/portal
chdir=%(djangoproject)
#virtualenv = /home/robc/.virtualenvs/workrave-cloud-server/
#pythonpath = %(django_dir)
wsgi-file=wsgi.py
module = wsgi
env=DJANGO_SETTINGS_MODULE=settings
daemonize=%(djangoproject)/logs/uwsgi.log
pidfile=%(djangoproject)/uwsgi.pid
print=%(daemonize)
#you can use http mode test
#socket=0.0.0.0:9001
http=0.0.0.0:8000
#user unix sock
#socket = %(deploy_dir)/run/uwsgi-%(project).sock
#chmod-socket = 777
stats=/tmp/myapp.status
memory-report=true
log-format = %(addr) - %(user) [%(ltime)] "%(method) %(uri) %(proto)" %(status) %(size) "%(referer)" "%(uagent)"
master=True
processes=8
vacuum=True
max-requests=8000
eable-threads=True
buffer-size=65535
harakiri=30
#listen queue number,you can see /proc/sys/net/core/somaxconn in linux
listen=1024
#user and group
#uid =
#gid =
- 设置权限须要加入
uid =
gid =
来进行权限控制
- uWSGI能够使用socket 。http。或者unix socket,主要取决于应用场景
- 不想打印请求的log 能够配置
disable-logging = true
, 这样仅仅会打印启动log了 - 在某些情况下python C拓展在多个解释器协作中并不好使
single-interpreter = true
来解决 harakiri=30
django文档中也推荐了这个选项,30代表30秒。主要是保护进程。防止某些危急的request拖死整个进程,详细原理參考[doc](
http://uwsgi-docs.readthedocs.org/en/latest/FAQ.html#what-is-harakiri-mode) 假设应用有对外交互的接口。并且响应很慢的话,最好把值调大点,否则会常常重新启动。请求正常响应概率减少。
- max-requests 当达到设定值之后会优雅的重载一个process
- 配置文件里有些是属于uwsgi的魔法变量
%d
配置文件所在文件夹的绝对路径,能够依据这个省去许多路径的硬编码%(params)
取出自己定义的变量的值
其它
- 许多得採用 Emperor 模式(主要是用来监控配置文件,能够做到热插拔),也能够在uWSGI做python 应用的负载均衡
- 配置文件的热插拔比較好的做法是。配置文件夹+软连接
- gevent 或者 async 配置 对于纯django应用来说并没啥作用
配置静态文件
相似于nginx中的 alias
static-map = /static=/usr/lib/python2.6/site-packages/django/contrib/admin/static
以上是关于uWSGI实战之Django配置经验的主要内容,如果未能解决你的问题,请参考以下文章
centos7+nginx+python3+django+uwsgi配置
python3 + Django + uwsgi + nginx 配置部署笔记