• django 的 uwsgi+Nginx 部署配置


    Python 安装 uWSGI

    1、通过 pip 命令:

    pip install uwsgi

    2、下载安装脚本:

    curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

    将 uWSGI 二进制安装到 /tmp/uwsgi ,你可以修改它。

    3、源代码安装:

    wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
    tar zxvf uwsgi-latest.tar.gz
    cd uwsgi-latest
    make

    安装完成后,在当前目录下,你会获得一个 uwsgi 二进制文件。


    第一个 WSGI 应用

    让我们从一个简单的 "Hello World" 开始,创建文件 foobar.py,代码如下:

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

    uWSGI Python 加载器将会搜索的默认函数 application 。

    接下来我们启动 uWSGI 便可以运行一个 HTTP 服务器,将程序部署在HTTP端口 9090 上

    uwsgi --http :9090 --wsgi-file foobar.py

    在浏览器内输入:http://127.0.0.1:9090,查看是否有"Hello World"输出,若没有输出,请检查你的安装过程。

    添加并发和监控

    默认情况下,uWSGI 启动一个单一的进程和一个单一的线程。

    你可以用 --processes 选项添加更多的进程,或者使用 --threads 选项添加更多的线程 ,也可以两者同时使用。

    uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

    以上命令将会生成 4 个进程, 每个进程有 2 个线程。

    如果你要执行监控任务,可以使用 stats 子系统,监控的数据格式是 JSON:

    uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

    我们可以安装 uwsgitop(类似 Linux top 命令) 来查看监控数据:

    pip install uwsgitop

    然后输入:uwsgitop http://127.0.0.1:9191

    或者通过如下命令启动uWSGI:

    uwsgi --http :9090 --wsgi-file hello.py --master --processes 4 --threads 2 --stats /tmp/stats.socket

    然后输入:uwsgitop /tmp/stats.socket

    都可以获得下面这样的实时监视状态:

    其中每个字段的介绍如下:

    Field

    Description

    WID

    Worker ID

    %

    Worker usage

    PID

    Worker PID

    REQ

    Worker从最近一次启动算起执行的请求次数

    RPS

    每秒请求次数

    EXC

    异常次数

    SIG

    被管理的uWSGI信号

    STATUS

    Worker是忙碌状态还是空闲状态

    AVG

    平均请求时间

    RSS

    Worker RSS(Resident Set Size,参阅linux内存管理)

    VSZ

    Worker VSZ(Virtual Memory Size,参阅linux内存管理)

    TX

    worker传输了多少数据

    ReSpwn

    重启次数(Respawn count)

    HC

    Harakiri 次数(Harakiri是可以设置一个请求超过多少秒后会被中断)

    RunT

    Worker运行了多长时间

    LastSpwn

    最后一次启动时间


    结合  Nginx Web 服务器使用

    你可以阅读 Nginx 安装配置 了解更多内容。

    我们可以将 uWSGI 和 Nginx Web 服务器结合使用,实现更高的并发性能。

    一个常用的nginx配置如下:

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3031;
    }

    以上代码表示使用 nginx 接收的 Web 请求传递给端口为 3031 的 uWSGI 服务来处理。

    现在,我们可以生成 uWSGI 来本地使用 uwsgi 协议:

    uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

    如果你的 Web 服务器使用 HTTP,那么你必须告诉 uWSGI 本地使用 http 协议 (这与会自己生成一个代理的–http不同):

    uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191


    如上,在浏览器内输入:http://127.0.0.1:9191查看是否有"Hello World"输出,若没有输出,请检查你的安装过程。

     

    WSGI 部署 Django

    Django 是最常使用的 Python web 框架,假设 Django 项目位于 /home/foobar/myproject:

    uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

    --chdir 用于指定项目路径。

    我们可以把以上的命令弄成一个 yourfile.ini 配置文件:

    [uwsgi]
    socket = 127.0.0.1:3031
    chdir = /home/foobar/myproject/
    wsgi-file = myproject/wsgi.py
    processes = 4
    threads = 2
    stats = 127.0.0.1:9191

    接下来你只需要执行以下命令即可:

    uwsgi yourfile.ini

    uwsgi 配置+Nginx配置

    uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建uwsgi9090.ini,添加如下配置:

    [uwsgi]
    socket = 127.0.0.1:9090 //传递给为 3031 的 uWSGI 服务来处理
    master = true         //主进程
    vhost = true          //多站模式
    no-site = true        //多站模式时不设置入口模块和文件
    workers = 2           //子进程数
    reload-mercy = 10     
    vacuum = true         //退出、重启时清理文件
    max-requests = 1000   
    limit-as = 512
    buffer-size = 30000
    pidfile = /var/run/uwsgi9090.pid    //pid文件,用于下面的脚本启动、停止该进程
    daemonize = /website/uwsgi9090.log

     

    找到nginx的安装目录(如:/usr/local/nginx/),打开conf/nginx.conf文件,修改server配置:

    server {
            listen       80;        //远端端口
            server_name  localhost;
            
            location / {            
                include  uwsgi_params;
                uwsgi_pass  127.0.0.1:9090;              //必须和uwsgi中的设置一致,转发到本地处理端口
                uwsgi_param UWSGI_SCRIPT demosite.wsgi;  //入口文件,即wsgi.py相对于项目根目录的位置,“.”相当于一层目录
                uwsgi_param UWSGI_CHDIR /demosite;       //项目根目录
                index  index.html index.htm;
                client_max_body_size 35m;
            }
        }

    你可以阅读 Nginx 安装配置 了解更多内容。

    设置完成后,在终端运行:

    uwsgi --ini /etc/uwsgi9090.ini &
    /usr/local/nginx/sbin/nginx

    在浏览器输入:http://127.0.0.1,你就可以看到 django 的 "It work" 了。

    然后输入:uwsgitop http://127.0.0.1:9191

    或者通过如下命令启动uWSGI:

    uwsgi --http :9090 --wsgi-file hello.py --master --processes 4 --threads 2 --stats /tmp/stats.socket

    然后输入:uwsgitop /tmp/stats.socket

    都可以获得下面这样的实时监视状态:

    其中每个字段的介绍如下:

    Field

    Description

    WID

    Worker ID

    %

    Worker usage

    PID

    Worker PID

    REQ

    Worker从最近一次启动算起执行的请求次数

    RPS

    每秒请求次数

    EXC

    异常次数

    SIG

    被管理的uWSGI信号

    STATUS

    Worker是忙碌状态还是空闲状态

    AVG

    平均请求时间

    RSS

    Worker RSS(Resident Set Size,参阅linux内存管理)

    VSZ

    Worker VSZ(Virtual Memory Size,参阅linux内存管理)

    TX

    worker传输了多少数据

    ReSpwn

    重启次数(Respawn count)

    HC

    Harakiri 次数(Harakiri是可以设置一个请求超过多少秒后会被中断)

    RunT

    Worker运行了多长时间

    LastSpwn

    最后一次启动时间

  • 相关阅读:
    ASP.NET读入文件(以txt为例)
    二叉树的相关规律公式
    HashTable的一点儿常识
    ASP.NET页面跳转方式及页面传值方式
    事件的那些事儿
    程序集和项目、命名空间、动态链接库的区别
    EventHandlerList的一些发现
    《Ajax基础教程》电子版下载
    数据库优化设计
    创业者的自我训练:
  • 原文地址:https://www.cnblogs.com/yoyo008/p/13962740.html
Copyright © 2020-2023  润新知