【uWSGI】实战之Django配置经验

时间:2022-11-07 11:10:07
  • 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) 取出自定义的变量的值

配置选项可以参考官方文档或者这个ppt

其他

  • 非常多得采用 Emperor 模式(主要是用来监控配置文件,可以做到热插拔),也可以在uWSGI做python 应用的负载均衡
  • 配置文件的热插拔比较好的做法是,配置目录+软连接
  • gevent 或者 async 配置 对于纯django应用来说并没啥作用

配置静态文件

类似于nginx中的 alias

static-map = /static=/usr/lib/python2.6/site-packages/django/contrib/admin/static