Django uwsgi.ini配置详情
#uwsgi.ini
[uwsgi] # 使用nginx连接时使用 socket=0.0.0.0:8000 # 直接做web服务器使用 # http=0.0.0.0:8000 # 项目目录, 与manager.py同级 chdir = /home/计算机名/项目名 # 项目中wsgi.py文件的目录,相当于项目目录 wsgi-file=项目名/wsgi.py # 主进程,启动一个master进程,来管理其余其他的子进程 master=True # 设置工作进程的数量 processes=4 # 设置每个工作进程的线程数 threads=2 # python虚拟环境目录绝对路径。如果有的话,home是虚拟环境的根目录,pythonhome是虚拟环境下的bin目录(放置了python执行文件) # home = /env # PYTHOMHOME = /env/bin # pid文件,用于脚本启动,停止 pidfile=uwsgi.pid # 设置后台运行保存日志。只要配置了daemonize将会让uwsgi后台运行,同时将日志输出到指定目录 daemonize=uwsgi.log # 服务停止时自动移除unix Socket和pid文件 vacuum = true # 设置每个工程进程处理请求的上线,达到上限时,将回收(重启)进程,可以预防内存泄露 max-requests=5000 # 静态文件映射 static-map = /static=Django下static目录的绝对路径 # 指定日志文件的权限 logfile-chome=644 # uWSGI服务器运行时的用户ID uid=xxx # uWSGI服务器运行时的用户组ID gid=xxx # 指定工作进程名称的前缀 procname-prefix-spaced=xxx # uWSGI加载的木块中哪个变量将被调用 callable=xxx # 监控项目的py文件的mtime来触发重载(只在开发时使用),py-autoreload表示多长时间检测一次,单位秒 py-autoreload=1 # 在每个worker而不是master中加载应用。默认为false,表示先加载应用,再fork出worker,这样做可以让worker尽量共用内存,只有当写时才copy,由于先加载再fork,但有些东西是不支持fork的,比如socket连接,所以lazy-apps=false时,不要在加载应用时自动创建数据库连接等 lazy-apps=true # 设置用于uwsgi包解析的内部缓存区大小为64k。默认为4k buffer-size=32768 # 设置最大日志文件大小 log-maxsize=5000000 # 禁用请求日志记录 disable-logging=true # 设置socket的监听队列大小(默认为:100) listem=120 # 这个参数不会影响app内创建线程,只影响wsgi内部的api,默认值为false。可以认为对用户无影响,使用默认值即可。参见:https://github.com/unbit/uwsgi/issues/1141 enable-threads=true # 设置在平滑的重启(直到接收到的请求处理完才重启)一个工作子进程中,等待这个工作结束的最长描述。这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了8秒就会被强行结束(忽略之前已经接收到的请求而直接结束) reload-mercy=8 # 通过使用POSIX/UNIX的setrlimit()函数来限制每个uWSGI进程的虚拟内存使用数。这个配置会限制uWSGI的进程占用虚拟内存不超过256M。如果虚拟内存已经达到256M,并继续申请虚拟内存则会使程序报内存错误,本次的http请求将返回500错误。 limit-as = 256 # 一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用(即重启) harakiri = 60
第一步:安装
pip install uwsgi
第二步:启动
uwsgi --ini uwsgi.ini
第三步:查看
ps aux | grep uwsgi
第四步:如果需要重启可以根据pid重启
uwsgi --reload uwsgi.pid
第五步:停止服务
uwsgi --stop uwsgi.pid
http示例
[uwsgi] # 直接作为web服务器 【注意:这里的IP是阿里云的内网IP】 http=172.17.42.6:10000 # http=47.94.132.145:10000 # 项目目录 chdir=/home/weapp/weappProject # uwsgi文件路径 wsgi-file=weappProject/wsgi.py home = /home/.virtualenvs/weapp PYTHONHOME = /home/.virtualenvs/weapp/bin # 主进程 master=true processes=4 threads=2 # 请求上线 max-requests=5000 # pid文件,用于脚本启动,停止 pidfile=/home/logs/weapp/uwsgi.pid # 设置后台运行保存日志 daemonize=/home/logs/weapp/uwsgi.log # 服务停止时自动停止unix Socket和pid文件 vacuum=true
socket示例
[uwsgi] chdir=/home/git/www/cloudmonitor # 指定项目目录 home=/home/git/www/cloudmonitor/.env # 指定python虚拟环境 wsgi-file=manager.py # 指定加载的WSGI文件 callable=app # 指定uWSGI加载的模块中哪个变量将被调用 master=true # 启动主线程 processes=4 # 设置工作进程的数量 threads=2 # 设置每个工作进程的线程数 socket=127.0.0.1:8888 # 指定socket地址 vacuum=true # 当服务器退出时自动删除unix socket文件和pid文件 logfile-chmod=644 # 指定日志文件的权限 daemonize=%(chdir)/cloudmonitor.log # 进程在后台运行,并将日志打印到指定文件 pidfile=%(chdir)/cloudmonitor.pid # 在失去权限前,将主进程pid写到指定的文件 uid=git # uWSGI服务器运行时的用户id gid=git # uWSGI服务器运行时的用户组id procname-prefix-spaced=cloudmonitor # 指定工作进程名称的前缀
摘(仅作备忘录)