zoukankan      html  css  js  c++  java
  • Django+Uwsgi+Nginx部署

    一 uwsgi介绍

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

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

    uWSGI的主要特点如下:

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

    二 Uwsgi 安装使用

    # Install the latest stable release:
    pip install uwsgi
    # ... or if you want to install the latest LTS (long term support) release,
    pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

    基本测试

    Create a file called 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 [项目名称.wsgi]
    实例:uwsgi --http 0.0.0.0:8080 --chdir /project/CNBlog/ --module cnblog.wsgi

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

    [uwsgi]
    socket = 172.16.123.203:9000                        # nginx链接的ip和端口
    #http = 172.16.123.203:9000                         # 访问HTTP协议监听IP和端口
    # Django-related settings
    # the django project directory (full path)
    chdir = /project/SchoolInfomationSystem             # 项目根目录
    # Django's wsgi file
    module = SchoolInfomationSystem.wsgi                # django项目下的wsgi文件
    # process-related settings
    client_max_body_size 75M  
    # master
    master  = true
    # maximum number of worker processes
    processes = 4                                        # 开启4个进程(按需更改)
    threads = 2                                          # 每个进程开启2个线程
    max-requests = 6000                             
    #daemonize = /var/log/uwsgi.log                      # 后台启动,并把日志记录到指定文件
    # ... with appropriate permissions - may be needed
    chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    static-map = /static=/data/www/Order/web/static   # 静态文件
    pidfile=/data/www/logs/order.pid            # pid存放位置
    socket=/data/www/logs/order.sock            # socket存放位置
    daemonize=/data/www/logs/order.log           # 日志文件

    示例中用的是ini配置文件,如需使用xml配置,请另行百度xml配置文件。更多的参数使用也可以自行百度添加上去

    当ini配置文件写好后执行
    uwsgi --ini /project/crazye-uwsgi.ini #--ini 表示使用ini配置文件,xml文件就用--xm

    常用选项:

    http : 协议类型和端口号
    processes : 开启的进程数量
    workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)
    chdir : 指定运行目录(chdir to specified directory before apps loading)
    wsgi-file : 载入wsgi-file(load .wsgi file)
    stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)
    threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)
    master : 允许主进程存在(enable master process)
    daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。
    pidfile : 指定pid文件的位置,记录主进程的pid号。
    vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

    三 Nginx的安装和配置

    安装 nginx yum install -y nginx 

    再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。 

            server {
            listen         8099; 
            server_name    127.0.0.1 
            charset UTF-8;
            access_log      /var/log/nginx/myweb_access.log;
            error_log       /var/log/nginx/myweb_error.log;
    
            client_max_body_size 75M;
    
            location / { 
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8000;
                uwsgi_read_timeout 2;
            }   
            location /static {
                expires 30d;
                autoindex on; 
                add_header Cache-Control private;
                alias /home/fnngj/pydj/myweb/static/;
             }
         }

    配置二

            # the upstream component nginx needs to connect to
            upstream django {
                # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
                server 127.0.0.1:8001; # for a web port socket (we'll use this first)
            }
             
            # configuration of the server
            server {
                # the port your site will be served on
                listen      8000;
                # the domain name it will serve for
                server_name .example.com; # substitute your machine's IP address or FQDN
                charset     utf-8;
             
                # max upload size
                client_max_body_size 75M;   # adjust to taste
             
                # Django media
                location /media  {
                    alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
                }
             
                location /static {
                    alias /path/to/your/mysite/static; # your Django project's static files - amend as required
                }
             
                # Finally, send all non-media requests to the Django server.
                location / {
                    uwsgi_pass  django;
                    include     /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed
                }
            }

    listen 指定的是nginx代理uwsgi对外的端口号。

    server_name 网上大多资料都是设置的一个网址(例,www.example.com),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。

    在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8000; 注意要和wsgi监听的ip和端口一致
    include 必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口与myweb_uwsgi.ini配置文件中的必须一直。

  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/harryblog/p/9844895.html
Copyright © 2011-2022 走看看