uwsgi 与 supervisor

wsgi    全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则。
运行在wsgi上的web框架有bottle,flask,django
uwsgi    和wsgi一样是通信协议,是uWSGI服务器的单独协议,用于定义传输信息的类型
uWSGI    是一个web服务器,实现了WSGI协议,uwsgi协议。a

Uwsgi ye是一个web服务器

项目部署:基本原理

利用nginx 反向代理到Uwsgi的端口 通过socket协议, nginx 可以快速的处理静态资源,uwsgi不行 动态资源给uwsgi处理

启动 python manage.py runserver 0.0.0.0:8000 也是通过wsgi协议 只不过是一个

单机启动django项目,性能低,默认使用wsgiref模块,性能低的wsgi协议
1 下载uwsgi
    准备好项目的虚拟环境 前面有提到 ,
    在环境下 下载uWSGI 
    pip3 install uwsgi

2  就可以启动uwsgi了
    uwsgi --http  :8000 --wsgi-file  test/wsgi.py  --py-autoreload=1 参数解析
            --http 启动在8000端口,
          --wsgi-file 指定项目文件夹路径 或者用 --module  test.wsgi  参数就要这样

       --py-autoreload是热加载程序    项目改动就可以自己加载了

3  每次都这样启动就很麻烦 可以通过配置文件来启动
    vim /etc/uwsgi/uwsgi.ini
配置内容如下:
uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建uwsgi_nginx.ini,添加如下配置:

# mysite_uwsgi.ini file

[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /opt/mysite   # 项目的第一层路径
# Django's wsgi file
module          = mysite.wsgi   # wsgi的文件包
# the virtualenv (full path)
home            = /opt/venv   项目的虚拟环境
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1   开启进程数 一般是cup个数 也有说是cpu3倍的
# the socket (use the full path to be safe
socket          = 0.0.0.0:8000  socket 协议开启 或者改成http协议开启(http是在测试时启用) socket 是配合nginx启动的
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
#daemonize       = /opt/logs/uwsgi.log   # 守护进程的方式 这要是用supervisor启动时 不要写他 跟supervisor里面的日志冲突
设置完配置之后启动方法

uwsgi --ini /etc/uwsgi/uwsgi.ini

 supervisor 

1 下载(在全局下载就好)
    pip3 install supervisor

2 echo_supervisord_conf > /etc/supervisord.conf 生成配置文件
    
3 配置配置文件
    supervisord.conf配置文件参数解释
[program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out  # 这要是开启了就不要开启uwsgi保护进程开启 冲突
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程

4 最后启动supervisor,完成uWSGI启动django,nginx反向代理
  
supervisord -c /etc/supervisord.conf #启动supervisor
supervisorctl -c /etxc/supervisord.conf #重启my项目
supervisorctl 进入 supervisor shell


5
一、添加好配置文件后

二、更新新的配置到supervisord    

supervisorctl update  更新了配置文件后要update 启动
三、重新启动配置中的所有程序

supervisorctl reload
四、启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name
五、查看正在守候的进程

supervisorctl
六、停止某一进程 (program_name=你配置中写的程序名称)

pervisorctl stop program_name
七、重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name
八、停止全部进程

supervisorctl stop all
注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。
原文地址:https://www.cnblogs.com/niehaidong111/p/11208319.html