zoukankan      html  css  js  c++  java
  • Django + Uwsgi + Nginx 实现生产环境部署

    uwsgi介绍

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

    1. WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
    2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
    3. 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
    4. uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

    uwsgi性能非常高

    uWSGI的主要特点如下

    1. 超快的性能
    2. 低内存占用(实测为apache2的mod_wsgi的一半左右)
    3. 多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)
    4. 详尽的日志功能(可以用来分析app性能和瓶颈)
    5. 高度可定制(内存大小限制,服务一定次数后重启等)

    Uwsgi 安装使用

    #安装最新的稳定版本:
    pip install uwsgi
    # ... 或者如果您想安装最新的LTS(长期支持)版本,
    pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

    基本测试

    创建一个名为 test.py 的文件 :

    # test.py
    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
        #return ["Hello World"] # python2

    运行

    uwsgi --http :8000 --wsgi-file test.py

    用uwsgi 启动django

    uwsgi --http :8000 --module mysite.wsgi

    可以把参数写到配置文件里

    [root@centos:]#  cat crazye-uwsgi.ini
     
     
    [uwsgi]
    http = :9000
    # the local unix socket file than commnuincate to Nginx
    socket = 127.0.0.1:8001
    # 项目目录(完整路径)
    chdir = /opt/CrazyEye
    # Django  wsgi 文件
    wsgi-file = /opt/CrazyEye/CrazyEye/wsgi.py 
    # 最大工作进程数
    processes
    = 4
    # thread numbers startched
    in each worker process
    threads
    = 2
    # 监控uwsgi状态
    stats
    = 127.0.0.1:9191
    #
    clear environment on exit
    vacuum
    = true
    # 设置pid文件
    pidfile = /opt/CrazyEye/uwsgi.pid

    # 设置日志目录
    daemonize= /opt/CrazyEye/uwsgi.log
     

    启动

    uwsgi -ini crazye-uwsgi.ini

    重启

    uwsgi --reload /opt/CrazyEye/uwsgi.pid

    停止

    uwsgi --stop /opt/CrazyEye/uwsgi.pid

    Nginx安装使用  

    [root@lb-node1 ~]# useradd -s /sbin/nologin -M www
    [root@lb-node1 ~]# cd /usr/local/src/
    [root@lb-node1 src]# wget http://nginx.org/download/nginx-1.15.8.tar.gz
    [root@lb-node1 src]# tar xf nginx-1.15.8.tar.gz
    [root@lb-node1 src]# cd nginx-1.15.8
    [root@lb-node1 nginx-1.10.2]# ./configure --prefix=/usr/local/nginx-1.15.8 
    --user=www --group=www --with-http_ssl_module 
    --with-http_stub_status_module --with-file-aio --with-stream
    [root@lb-node1 nginx-1.10.2]# make && make install
    [root@web-node1 ~]# ln -s /usr/local/nginx-1.15.8/ /usr/local/nginx
    ## 测试配置并启动Nginx
    [root@lb-node1 ~]# /usr/local/nginx/sbin/nginx -t
    nginx: the configuration file /usr/local/nginx-1.15.8/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx-1.15.8/conf/nginx.conf test is successful
    [root@lb-node1 ~]# /usr/local/nginx/sbin/nginx

    为你的项目生成Nginx配置文件

    您将需要uwsgi_params文件,该文件位于uWSGI发行版的nginx目录中,或者来自https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

    将其复制到项目目录中。 稍后我们将告诉nginx引用它。

    现在创建一个名为mysite_nginx.conf的文件,并将其放入其中:

    # mysite_nginx.conf
     
    # 上游组件nginx需要连接
    upstream django {
        # server unix:///path/to/your/mysite/mysite.sock; # 用于文件套接字
        server 127.0.0.1:8001; # 用于Web端口套接字(我们将首先使用它)
    }
     
    # 服务器的配置
    server {
        # 您的网站将被开放的端口
        listen      8000;
        # 它将服务的域名
        server_name .example.com; # 替换您机器的IP地址或FQDN
        charset     utf-8;
     
        #最大上传大小
        client_max_body_size 75M;   # adjust to taste
     
        # Django media
        location /media  {
            alias /opt/CrazyEye/media;  # 您的Django项目的媒体文件 - 根据需要进行修改
        }
     
        location /static {
            alias /opt/CrazyEye/static; # 您的Django项目的静态文件 - 根据需要进行修改
        }
     
        # 最后,将所有非媒体请求发送到Django服务器。
        location / {
            uwsgi_pass  django;
            include     /usr/local/nginx/conf/uwsgi_params; # 您安装的uwsgi_params文件
        }
    }

    部署静态文件

    在运行nginx之前,您必须收集静态文件夹中的所有Django静态文件。 首先你需要编辑mysite/settings.py添加:

    STATIC_ROOT = os.path.join(BASE_DIR, "static/")

    然后运行

    python manage.py collectstatic

    此时启动Nginx 和Uwsgi,你的django项目就可以实现高并发啦!

  • 相关阅读:
    XML约束之DTD
    XML基础
    向方法传递多个参数
    从方法里返回值
    给方法传值
    对象状态和行为
    对象类型数组
    数组
    避开关键字
    primitive数据类型
  • 原文地址:https://www.cnblogs.com/jiangwenhui/p/10196339.html
Copyright © 2011-2022 走看看