Nginx - Como publicar vários aplicativos da web em Python usando diretórios virtuais e acessá-los via IP e diretório virtual (http: // HOST_IP / APP_DIRECTORY)?

2

Eu sou um usuário do IIS - Serviços de Informações da Internet (Microsoft Windows) e gostaria de migrar para o Nginx.

Como posso publicar vários aplicativos da web em Python usando diretórios virtuais (estilo IIS) e acessá-los via IP e nome do diretório (Ex: http://HOST_IP/APP_DIRECTORY ) no Nginx?

O sistema operacional do servidor que eu uso é o Ubuntu Server 12.04.1 LTS AMD64.

[] 's

    
por Eduardo Lucio 22.09.2013 / 00:39

1 resposta

2

O propósito deste tópico perguntado e respondido por mim é estabelecer um caminho curto, fácil e preciso para os usuários provenientes do IIS - Serviços de Informações da Internet (Microsoft Windows) que desejam migrar e / ou usar o Nginx com Python. Por isso peço a todos que ajudem a alcançar este objetivo!

Aspectos considerados:

  1. Use o Ubuntu Server 12.04.1 LTS AMD64;
  2. Use aplicativos da Web em Python;
  3. Acesse vários aplicativos usando o modelo http://HOST_IP/APP_DIRECTORY ;

Eu sei pouco sobre o Nginx. Eu enfatizo que o objetivo aqui é criar aplicativos web Python para testes e desenvolvimento de uma maneira simples e fácil, sem a presença de um domínio (por exemplo, www.domínio.com) e acessá-los via IP e diretório virtual.

Não sei se essa é a melhor maneira de publicar aplicativos usando diretórios virtuais. Comentários sobre este aspecto são muito bem-vindos.

aqui está minha resposta!

  • Instale o Nginx e o uWSGI que executarão aplicativos Python;

    apt-get instale o nginx-full uwsgi uwsgi-plugin-python

  • Crie o arquivo de configuração para o Nginx. Isto irá conter a lista de diretórios virtuais que estará disponível em Nginx (pasta "sites-available"):

    nano / etc / nginx / sites-disponíveis / aplicativos

Conteúdo do arquivo:

server
{
        listen          80;
        server_name     $hostname;
        access_log /srv/www/applications/logs/access.log;
        error_log /srv/www/applications/logs/error.log;

        location /pytest0
        {
            #uwsgi_pass      127.0.0.1:9001;
            uwsgi_pass      unix:///run/uwsgi/app/pytest0/pytest0.socket;
            include         uwsgi_params;
            uwsgi_param     UWSGI_SCHEME $scheme;
            uwsgi_param     SERVER_SOFTWARE    nginx/$nginx_version;
        }

        location /pytest1
        {
            #uwsgi_pass      127.0.0.1:9001;
            uwsgi_pass      unix:///run/uwsgi/app/pytest1/pytest1.socket;
            include         uwsgi_params;
            uwsgi_param     UWSGI_SCHEME $scheme;
            uwsgi_param     SERVER_SOFTWARE    nginx/$nginx_version;
        }
}
  • Crie o diretório em que o Nginx salvará os registros:

    mkdir-p / srv / www / aplicativos / logs

  • Coloque a lista de aplicativos que você criou no conjunto de aplicativos habilitados (pasta "habilitada para aplicativos"):

    ln -s / etc / nginx / sites-disponíveis / aplicativos / etc / nginx / sites-enabled / applications

  • Remova o link do host virtual padrão inserindo o seguinte comando:

    rm / etc / nginx / sites-enabled / default

    Nota: Com esta ação é mais fácil diagnosticar possíveis erros, porque em caso de falha o NGINX retorna o erro ao invés de uma página padrão.

  • Crie as pastas para o primeiro aplicativo de teste do Python:

    mkdir-p / srv / www / pytest0 / public_html / static

    mkdir / srv / www / pytest0 / application

  • Defina o primeiro aplicativo de teste e o disponibilize em uWSGI (pasta "apps-available"):

    mkdir -p / etc / uwsgi / apps-disponível /

    nano /etc/uwsgi/apps-available/pytest0.xml

Conteúdo do arquivo:

<uwsgi>
    <plugin>python</plugin>
    <socket>/run/uwsgi/app/pytest0/pytest0.socket</socket>
    <pythonpath>/srv/www/pytest0/application/</pythonpath>
    <app mountpoint="/">

        <script>wsgi_configuration_module</script>

    </app>
    <master/>
    <processes>4</processes>
    <harakiri>60</harakiri>
    <reload-mercy>8</reload-mercy>
    <cpu-affinity>1</cpu-affinity>
    <stats>/tmp/stats.socket</stats>
    <max-requests>2000</max-requests>
    <limit-as>512</limit-as>
    <reload-on-as>256</reload-on-as>
    <reload-on-rss>192</reload-on-rss>
    <no-orphans/>
    <vacuum/>
</uwsgi>
  • Coloque o primeiro aplicativo de teste como ativado no uWSGI (pasta "aplicativos habilitados"):

    ln -s /etc/uwsgi/apps-available/pytest0.xml /etc/uwsgi/apps-enabled/pytest0.xml

  • "Crie" o primeiro aplicativo de teste no uWSGI:

    nano /srv/www/pytest0/application/wsgi_configuration_module.py

Conteúdo do arquivo:

import os
import sys

sys.path.append('/srv/www/pytest0/application')

os.environ['PYTHON_EGG_CACHE'] = '/srv/www/pytest0/.python-egg'

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello pytest0!'

    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
  • Crie as pastas para o segundo aplicativo de teste do Python:

    mkdir-p / srv / www / pytest1 / public_html / static

    mkdir / srv / www / pytest1 / application

  • Defina o segundo aplicativo de teste e o disponibilize em uWSGI (pasta "apps-available"):

    nano /etc/uwsgi/apps-available/pytest1.xml

Conteúdo do arquivo:

<uwsgi>
    <plugin>python</plugin>
    <socket>/run/uwsgi/app/pytest1/pytest1.socket</socket>
    <pythonpath>/srv/www/pytest1/application/</pythonpath>
    <app mountpoint="/">

        <script>wsgi_configuration_module</script>

    </app>
    <master/>
    <processes>4</processes>
    <harakiri>60</harakiri>
    <reload-mercy>8</reload-mercy>
    <cpu-affinity>1</cpu-affinity>
    <stats>/tmp/stats.socket</stats>
    <max-requests>2000</max-requests>
    <limit-as>512</limit-as>
    <reload-on-as>256</reload-on-as>
    <reload-on-rss>192</reload-on-rss>
    <no-orphans/>
    <vacuum/>
</uwsgi>
  • Coloque o segundo aplicativo de teste como ativado no uWSGI (pasta "aplicativos habilitados"):

    ln -s /etc/uwsgi/apps-available/pytest1.xml /etc/uwsgi/apps-enabled/pytest1.xml

  • "Crie" o segundo aplicativo de teste no uWSGI:

    nano /srv/www/pytest1/application/wsgi_configuration_module.py

Conteúdo do arquivo:

import os
import sys

sys.path.append('/srv/www/pytest1/application')

os.environ['PYTHON_EGG_CACHE'] = '/srv/www/pytest1/.python-egg'

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello pytest1!'

    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
  • Reinicie os serviços:

    serviço uwsgi restart

    serviço nginx restart

POR FAVOR COMENTAR!

  • Referências:

link

    
por 22.09.2013 / 01:29