nginx+uwsgi+django+supervisor

17 篇文章 0 订阅
5 篇文章 0 订阅

安装环境介绍:
   python2.7.10
   django1.7.9
   linux CentOS release 6.5 (Final) 64


1、uwsgi安装与配置
    tar xvzf uwsgi-2.0.14.tar.gz
    cd uwsgi-2.0.14
    python setup.py install


    uwsgi配置
        参考 django官方网站地址(How to use Django with uWSGI):
        https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/uwsgi/
        
        a、mysite/uwsgi.py  (django网站start_project生成,稍微做了下修改)
            import sys
            import os
            p = os.path.abspath(os.path.dirname(__file__))
            sys.path.insert(0, os.path.split(p)[0])
            os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
            
            from django.core.wsgi import get_wsgi_application
            application = get_wsgi_application()
        
        b、uwsgi.ini配置
            [uwsgi]
            chdir=/var/www/myweb
            module=mysite.wsgi:application
            master=True
            pidfile=/tmp/myweb.pid
            vacuum=True
            max-requests=5000
            processes= 3
            listen = 65535
            workers = 24
            socket=127.0.0.1:8000
            daemonize=/var/log/uwsgi/myweb.log
            
        c、通过普通用户启动
            /usr/local/python/bin/uwsgi --ini uwsgi.ini


2、nginx的安装与配置
    安装:
      ./configure
       make
       make install
    
    配置:
        server {
            listen       6666;
    
            location / {

                uwsgi_send_timeout 600;

                uwsgi_connect_timeout 600; 

                uwsgi_read_timeout  1800;

                 uwsgi_pass 127.0.0.1:8000; #uwsgi启动的地址和端口
                 include uwsgi_params;  #uwsgi参数
                 client_max_body_size    1000m;  #上传包的大小
            }
            
            location /media/ { #静态文件
                 alias /var/www/myweb/static/;
            }
            location /static/ { #静态文件
                 alias /var/www/myweb/static/;
            }
        }


3、其他
    nginx重新加载 -- root权限
    /usr/local/nginx/sbin/nginx -s reload
    
    nginx 杀死 -- root权限
    /usr/local/nginx/sbin/nginx -s stop
    
    nginx启动 -- root权限
    /usr/local/nginx/sbin/nginx -s start
    
    uwsgi 重新加载 ---- 普通用户权限就可以了
    uwsgi --reload /tmp/myweb.pid
    
    或者
    kill -HUP `cat /tmp/myweb.pid`
    


4、supervisor
     使用了 supervisor ,uwsgi.ini 中就不要使用 --daemonize 这个参数了
    [program:myweb_uwsgi]
    command=/usr/local/python/bin/uwsgi --ini /var/www/myweb/uwsgi.ini #写绝对路径
    autostart = true
    startsecs = 5
    user=test
    redirect_stderr = true
    stdout_logfile_maxbytes = 20MB
    stdout_logfile_backups = 20
    stdout_logfile =/var/log/uwsgi/myweb.log
    
5、部署后台命令配置
    /usr/local/python/bin/uwsgi --reload /tmp/myweb.pid;sudo /usr/local/nginx/sbin/nginx -s reload
    
6、由于使用uwsgi协议老是假死,改用http协议,配置如下
    6.1、uwsgi.ini配置
    [uwsgi]
    chdir=/var/www/myweb
    module=mysite.wsgi:application
    master=True
    pidfile=/tmp/myweb.pid
    vacuum=True
    max-requests=5000

    workers =24    #4*cpu

   listen = 65535

    threads = 5
    http-socket=127.0.0.1:8000 #主要改动是这个
    env = LANG=en_US.UTF-8
    env = LANGUAGE=en_US.UTF-8
    daemonize=/var/log/uwsgi/myweb.log
    
    6.2 nginx 配置

uwsgi_send_timeout 600; # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。 uwsgi_connect_timeout 600; # 指定连接到后端uWSGI的超时时间。

uwsgi_read_timeout 600; # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。

根据自己的情况配置


    server {
        listen       6666;
    
        location / {

             uwsgi_send_timeout 600; 
            uwsgi_connect_timeout 600;   
            uwsgi_read_timeout 1800;
            uwsgi_pass 127.0.0.1:8001;
            include uwsgi_params;
            client_max_body_size    1000m;
        }
    
        location /media/ {
            alias /var/www/myweb/static/;
        }
        location /static/ {
             alias /var/www/myweb/static/;
        }
    }
    


8、调优
    a、linux
        修改linux系统监听队列的大小
        vim /etc/sysctl.conf
        net.core.somaxconn = 2048  (默认 128 建议 1024 或者更大 2048 )
        生效
        sysctl -p
        
    b、 uwsgi
         workers = 24  # 并发处理进程数
         listen = 65535 # 并发的socket 连接数。默认为100。优化需要根据系统配置
         在做优化之前,发现并发数过不了100.原因就是这里,uwsgi 的socket 默认链接为100.
        
    c、nginx
        worker_processes  xx;  #可以设置成cpu个数,体验较佳的性能
        worker_cpu_affinity 0001 0010 0100 1000; #应用多核优势


        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值