uwsgi + nginx implantação projecto

projeto Deploy Django

Django + uWSGI + nginx implantação

  • framework web open source django de um pyhton.
  • uWSGI um gateway uwsgi próprio protocolo baseado na web, o protocolo WSGI e http contrato de serviço
  • nginx servidor proxy comumente usado

    WSGI: Interface / protocolo comum para a implementação de análise python, é um protocolo padrão de interface interface universal, ou para conseguir uma interação comum python entre o Web-servidor. 
    Use-o, web.py ou garrafa ou Django quadro de desenvolvimento python web, etc., pode ser facilmente implantado em servidor web diferente;

    uwsgi: Como WSGI é um protocolo de comunicação 
    uwsgi protocolo do servidor uWSGI é um protocolo proprietário, que define o tipo de transmissão de informações, ele é comparado com WSGI são duas coisas.

    uWSGI: um servidor web tipo ou python chamado servidor / gateway 
    uwsgi Web servidor uWSGI tornadoweb ou FLUP semelhante, um servidor web python, uWSGI é alcançado e WSGI dois protocolos, python responsável por responder às solicitações da web. 
    Porque apache, nginx, etc., eles mesmos não resolverem linguagens dinâmicas como função php, mas atribuído a outros módulos para fazer, como o Apache pode dizer built-in módulo php, parece que apache php suporte mesma. 
    uWSGI percebeu acordo wsgi, protocolo uwsgi, HTTP e outros protocolos. papel Nginx no HttpUwsgiModule uWSGI é trocado com o servidor.

Fluxo de projeto

Primeiro de todos os recursos de serviços de pedidos de clientes,
nginx como interface de serviço estrangeiro direto recebido http pedido enviado pelo cliente, ele irá descompactar, análise,
se é um solicitações de arquivos estáticos para o diretório de arquivo estático nginx configuração, retorna o recurso solicitado,
se for pedido dinâmica através do arquivo de configuração no Nginx, passa a solicitação para uWSGI; uWSGI o pacote recebido é processado e encaminhado para wsgi,
um arquivo ou uma chamada de função Django WSGI funciona de acordo com o pedido, após o processamento da django retornar valor para WSGI,
WSGI o pacote valor de retorno, encaminhado para uWSGI,
encaminhado para uWSGI depois de receber nginx, nginx irá eventualmente retornar o valor para o cliente (por exemplo, navegador).
* Nota: a conversão envolve a transmissão de informações para os formatos de dados e protocolos entre os vários componentes

papel: 

  1. Nginx primeira etapa não é necessário, uwsgi pode completar todo o processo e a interação do navegador; 
  2. Além disso, a segurança ou outras restrições sobre nginx, pode proteger o papel do programa; 
  3. uWSGI em si é uma interface de rede e processos de trabalho múltiplas abertas pode não ser suficiente, e nginx uWSGI múltipla proxy pode completar a carga uWSGI equilíbrio; 
  4. No Django debug = capacidade de processamento arquivo estático falso não é muito bom, mas com nginx para lidar de forma mais eficiente.

Instalação e Configuração

  1. Projeto para criar um ambiente virtual em execução

    virtualenv env --python=python3.6
    pip install -r requirements.txt  #安装django运行环境
  2. teste de servidor em execução Desenvolvimento

                    cd project # 进入项目 project 目录
                    python manage.py runserver
                运行开发服务器测试,确保开发服务器下能正常打开网站。
    
  3. uWSGI instalação

                    # 在普通用户下安装
                    sudo apt install libpython3.6-dev
                    # 虚拟环境中
                    pip install uwsgi
  4. Teste uWSGI: New test.py Arquivo, escreve o seguinte

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

                    # 0.0.0.0可以省略 
                    sudo uwsgi --http 0.0.0.0:8000 --wsgi-file test.py --processes 4 --threads 3
          如果提示端口已经被占用,这时可以把相关的进程 kill 掉。
    
                probably another instance of uWSGI is running on the same address (:8002).
                bind(): Address already in use [core/socket.c line 764]
          按照端口进行查询进程
    
    lsof -i :8002
          可以查出:
    
               COMMAND  PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME uwsgi 2208 tu 4u IPv4 0x53492abadb5c9659 0t0 TCP *:teradataordbms (LISTEN) uwsgi 2209 tu 4u IPv4 0x53492abadb5c9659 0t0 TCP *:teradataordbms (LISTEN)
          这时根据 PID 可以用下面的命令 kill 掉相关程序:
    
sudo kill -9 2208 2209
  1. Executar django projeto

          # --chdir 项目目录 --home 虚拟环境目录 project.wsgi 指的是 project/wsgi.py 文件
          uwsgi --http :8000 --chdir=/path/to/project  --home=/path/to/env --module project.wsgi
  2. perfis prazo

                上面这样使用一行命令太长了,我们使用 ini 配置文件来搞定,比如项目在 /home/ray/project 这个位置,在其中新建一个 uwsgi.ini 全路径为 /home/ray/project/uwsgi.ini
    
                    [uwsgi]
                    #socket 为上线使用,http为直接作为服务器使用。
                    socket = 127.0.0.1:8080 #ip和端口号可以改 http = 127.0.0.1:8000 #项目目录 chdir=/home/ray/project module=project.wsgi #虚拟环境目录 #home = home/ray/MxOnline/mxonlineEnv master = true processes=4 threads=2 # 下面的参数不一定要加 # pidfile=uwsgi.pid uwsgi.pid 和uwsgi.log会在启动uwsgi时自动生成在项目目录下。 # daemonize=uswgi.log # max-requests=2000 # chmod-socket=664 # vacuum=true
    # uwsgi启动
    uwsgi --ini uwsgi.ini
    #uwsgi 停止
    uwsgi --stop uwsgi.pid
  3. nginx instalação, montado sob um utilizador normal.

        # Instalar 
                    sudo instalar nginx APT 
                     # recarga 
                    sudo /etc/init.d/ nginx recarga 
                    sudo nginx - S recarga
                     # começar 
                    sudo /etc/init.d/ nginx Iniciar
                     # parada 
                    sudo /etc/init.d/ nginx PARAR
                     # reinicialização 
                    /etc/init.d/ sudo nginx restart
                     # Ver nginx se para iniciar o 
                    -ef PS | grep nginx 
                raiz     24956 1 0 19:41? 00:00:00 nginx: processo mestre / usr / local / nginx / sbin / nginx 
                ninguém    24957 24956 0 19:41? 00:00:00 nginx: Trabalhador processo 
                raiz      24959 10533 0 19:41 pts / 0 00:00:00 grep --color = auto nginx

     

  4. Configurando nginx

    # #### sites de permitir和sites-available

     

    Diretórios são usados para a definir essas as configurações para seus sites. Os arquivos são geralmente os Criado em 
    em Os " locais-the Disponível " Directory, e thensymbolically ligado a pelo Os " sites-enabled " Directory quando eles estão prontos para ir viver. Estão em nginx.conf modificação, desde que as instruções foram incluídas no incluir sites nginx.conf conteúdo habilitado no montante de local Ativado modificação é equivalente ao nginx.conf modificação, alta manutenção. a incluir /etc/nginx/conf.d/* .conf; o incluem / etc / Nginx / sites-enabled / * ; ITES - configuração do servidor atual Disponível está localizado, aqui modificadas. locaishabilitado é ativar e usar a configuração do servidor (criar arquivos de atalho de sites_available para sites- Enabled) para criar um novo Web site de teste # não tem permissão para modificar sudo sudo vim / etc / nginx / sites-o / Disponível test.conf # balanceamento de carga configure # ray a montante { # Servidor 127.0.0.1:8000; Porto # Tomada para web um # } Servidor { a ouvir 80 ; www.helloray.cn server_name; # nome de domínio ou endereço IP . charset UTF-8 ; # os media do Django, como a estática e estática recursos nginx para lidar LOCAL / estática { # caminho deve ser o mesmo e STATIC_ROOT Alias / var / www / myApp / static / ; } LOCALIZAÇÃO / Mídia { # mídia item de caminho de Alias / var / www / myApp / Media / ; } LOCALIZAÇÃO / { # deve uwsgi.ini da tomada, a montante como combinado uwsgi_pass pode ser configurado para: http: // + nome a montante, isto é "HTTP: // ray". uwsgi_pass 127.0.0.1:8080 ; # uwsgi_pass HTTP: // ray; a incluir uwsgi_params; } } website de ativação: softlinks sudo LN -s /etc/nginx/sites-available/test.conf / etc / Nginx / locais de activado /test.conf nginx criar um diretórios de arquivos estáticos, e alterar permissões sudo mkdir -vp / var / WWW / myApp / static / sudo chmod 777 / var / WWW / myApp / static / no item arquivo setting.py STATIC_URL = ' estático ' STATIC_ROOT = ' / var / www / myApp / static / ' STATICFILES_DIRS = [ a os.path.join (BASE_DIR, ' estática ' ), ] MEDIA_URL = ' / Media / ' de MEDIA_ROOT-lo = o os.path.join (BASE_DIR, ' mídia ' ) arquivos estáticos migram no diretório do projeto python manage.py collectstatic

     

No Django settings.py cerca de cinco histórias definir os parâmetros:

1、MEDIA_ROOT与MEDIA_URL

事实上MEDIA_ROOT和MEDIA_URL代表的是用户上传后的文件一般保存的地方。我的理解是,可变文件的文件夹。 与这两个参数有联系的,是在Django的FileField和ImageField这样的Model类中,有upload_to参数可选。当upload_to设置相关的地址后,如:upload_to="username";文件上传后将自动保存到 os.path.join(MEDIA_ROOT, upload_to)。 而MEDIA_URL,,则代表用户通过URL来访问这个本地地址的URL。如本机http://127.0.0.1/, MEDIA_URL设置为"/site_media/",那么通过 http://127.0.0.1/site_media/*** 就可以访问相关的上传图片或者其他资源。 2、STATIC_ROOT与STATIC_URL STATIC_ROOT和STATIC_URL则是网站中,用于网站显示的静态图片、CSS、JS等文件的保存地址。我的理解是,运行中不会再变文件的文件夹(即不会删除或者新增) 2.1 STATIC_URL 同MEDIA_URL类似;STATIC_URL为"/static/"时候,通过http://127.0.0.1/static/***就可以访问相关的静态文件了。 2.2 STATIC_ROOT STATIC_ROOT是一个比较特殊的文件夹。这是区别Django的开发模式和部署模式下最大的地方了。 通常我们在开发模式下,可以在我们所在的project下建立相应的app, 然后每个app下都建立相应的static文件夹。在开发模式下(Debug=True),Django将为我们自动查找这些静态文件(每个app)并在网页上显示出来。然而,在部署模式下,Django认为这些工作交由web服务器来运行会更有效率。 因此,在部署时,我们需要运行一下python manage.py collectstatic 这个命令。这个命令将会把每个app里的static目录下的文件copy到STATIC_ROOT这个文件夹下,这时候如果在部署模式下(Debug=False),网页中相关的,如: http://127.0.0.1/static/*** 的访问,将不会访问Django下各个App中的static,而是STATIC_ROOT中所指定的文件夹。 3、Debug=False后,为何无法访问图片和js等文件了? 其实这个问题,是在于web服务器没有对STATIC_ROOT以及MEDIA_ROOT这两个文件夹进行映射所导致的。 以apache为例,假定: STATIC_ROOT="/home/user/static/" STATIC_URL="/static/" MEDIA_ROOT="/home/user/media/" MEDIA_URL="/media/" 那么可以在apache的配置文件中,增加以下: 
""" 
<Location "/ static /"> 
Ordem negar, permitir 
Permitir de todo 
Satisfazer Qualquer 
</ Location> 
Alias / static / "/ home / user / static" 
<Location "/ media /"> 
Ordem negar, permitir 
Permitir que a partir todos 
Satisfazer Qualquer 
</ Location> 
Alias / media / "/ home / user / media /" 

"""
 4、STATICFILES_DIRS:和TEMPLATE_DIRS的含义差不多,就是除了各个app的static目录以外还需要管理的静态文件,添加到这里的文件会在collectstatic时 copy到STATIC_ROOT中

Carregar as configurações de equilíbrio

Aumentar o tráfego do site, o modelo de serviço do servidor tem que fazer as atualizações apropriadas, como um servidor de banco de dados separado, separar a imagem como um serviço separado, estes são dados balanceamento de carga simples, a pressão distribuídos para diferentes máquinas . Às vezes, a pressão do front-end web, mas também pode tornar as pessoas muito dor de cabeça. Como acessar o mesmo nome de domínio, distribuídos por duas ou mais máquinas? Na verdade, este é um outro tipo de balanceamento de carga, nginx em si pode fazer, apenas para ser um simples de configuração na linha.

  nginx não só pode ser usado como um poderoso servidor web ou como um servidor proxy reverso, nginx, mas também permite a separação de dinâmicas e estáticas páginas por regras de programação, de acordo com a sondagem, mistura ip, hashes de URL, pesos e outros maneira de fazer o balanceamento de carga para o servidor back-end, e também suporta verificações de saúde do servidor back-end.

a montante do nginx atualmente suporta quatro modos de distribuição 

Polling: Polling por sua vez, irá solicitar emitido para cada servidor, se o servidor back-end está para baixo, automaticamente excluída.

ligação mínima: Enviar um pedido para o servidor que mantém as ligações menos ativos.

ip de hash: pedido de decisão para o servidor por meio de uma função hash que resulta em ip. Corrigido para que cada visitante para acessar um servidor back-end, pode resolver o problema da sessão.

Peso: servidor maior o peso, maior a probabilidade de processar o pedido. desempenho irregular para o caso de servidor back-end.

Load Balancing Polling

Adicione o seguinte arquivo de configuração nginx.conf configuração, esta configuração tem três servidores para fornecer serviços de pagamento.

  1. A configuração padrão é políticas de votação;
  2. carga nginx equilíbrio entre o apoio protocolos HTTP e HTTPS, só precisa modificar o acordo para trás proxy_pass;

    1. nginx suporte FastCGI, uwsgi, SCGI, balanceamento de carga memcached, apenas proxy_pass mudaram uwsgi_pass, fastcgi_pass, scgi_pass, memcached_pass pode.
  3. Esta política é bastante adequado para a configuração do servidor, apátrida e uso do serviço fast track.
http { 
    CashServers a montante { 
        servidor CashServers1.com; 
        servidor CashServers2.com; 
        servidor CashServers3.com; 
    } 

    Servidor { 
        ouvir 80 ; 

        localização / { 
            proxy_pass http: // CashServers; 
        } 
    } 
}

 

Menos balanceamento de carga Connections

  1. O balanceamento de carga é definida pela ligação mínimo least_conn instrução;
  2. Esta carga política para solicitação de processamento de duração variável causa da sobrecarga do servidor de balanceamento;
http { 
    CashServers a montante { 
      least_conn; 
        servidor CashServers1.com; 
        servidor CashServers2.com; 
        servidor CashServers3.com; 
    } 

    Servidor { 
        ouvir 80 ; 

        localização / { 
            proxy_pass http: // CashServers; 
        } 
    } 
}

 

ip balanceamento de carga de hash

  1. ip carga de hash de equilíbrio usando instruções ip_hash definido acima;
  2. nginx solicitando cliente usando o endereço ip hash, para garantir que o mesmo servidor em resposta ao pedido de utilização;
  3. Esta política adequada para serviços do Estado, como sessão;
http { 
    CashServers a montante { 
      ip_hash; 
        servidor CashServers1.com; 
        servidor CashServers2.com; 
        servidor CashServers3.com; 
    } 

    Servidor { 
        ouvir 80 ; 

        localização / { 
            proxy_pass http: // CashServers; 
        } 
    } 
}

 

 Carregar pesos de balanceamento

  1. Balanceamento de carga pesos instrução peso requerido definidos acima;
  2. Quanto maior for o peso atribuída ao mais em necessidade de tratamento requerente;
  3. Esta política pode ser usado em conjunto com uma carga mínima e ligação ip política de hash;
  4. Esta política é mais adequada diferença de configuração de hardware do servidor é relativamente grande;
http { 
    CashServers a montante {       
        servidor CashServers1.com peso = 3 ; 
        servidor CashServers2.com peso = 2 ; 
        servidor CashServers3.com peso = 1 ; 
    } 

    Servidor { 
        ouvir 80 ; 
        localização / { 
            proxy_pass http: // CashServers; 
        } 
    } 
}

 

Apêndice: Parâmetro Descrição

   > ---------------- Apêndice: uwsgi Parâmetro Descrição ---------------- 
   > 
   > - HTTP: tipo de protocolo e número de porta
    > - processos: número de processos abertos
    > - trabalhadores: o número de processos abertos, o equivalente aos processos (o site oficial da desova argumento para o número especificado os ofworkers / processos)>
    - chdir: Especifica o diretório run (chdir para o diretório especificado o antes Apps carregamento)>
    - WSGI -file: Carregando wsgi- Arquivo (.wsgi o arquivo de carga)>
    - estatísticas: no endereço especificado no serviço de estado (Enable no servidor para as estatísticas no endereço especificado)>
    - tópicos: thread em execução. Por causa do GIL, penso que este é realmente inútil. (RUN cada trabalhador em aparafusados com MODO A especificado número de segmentos)>
    - Master: o processo principal permitiu a presença (activar Processo Principal)>
    -daemonize: o processo é executado em segundo plano e registros bater o arquivo de log especificado ou servidor udp (daemonize uWSGI). Na verdade mais comumente
    >   usado, ou para log saída para um arquivo local.
   > - daemonize: o processo é executado em segundo plano e registros bater o arquivo de log especificado ou servidor udp (daemonize uWSGI). Na verdade mais comumente
    >   usado, ou para log saída para um arquivo local.
   > - vácuo: quando sai do servidor automaticamente limpar o ambiente, exclua o arquivo socket e arquivo pid ( a tentativa ao remover todos gerados no Arquivo / Sockets)

 

 

Acho que você gosta

Origin www.cnblogs.com/Gaimo/p/12535770.html
Recomendado
Clasificación