UWSGI e NGINX para aplicativos Python no Ubuntu 11.10

4

Estou tentando encontrar uma maneira ideal de configurar meu servidor para usar o NGINX e o UWSGI para fornecer aplicativos python. O seguinte funcionou até agora:

Configuração inicial:

sudo apt-get install nginx uwsgi uwsgi-plugin-http uwsgi-plugin-python python-setuptools

easy_install pip

pip install web.py

/ etc / nginx / sites-available / default:

server {
    listen 80;
    server_name localhost;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9090;
    }
}

E então eu tenho um myapp.py básico (a localização não importa para a configuração atual):

import web

urls = (
    '/', 'index'
)

app = web.application(urls, globals())

class index:
    def GET(self):
        return "Hello from Web.py!"

application = app.wsgifunc()

Em seguida, posso emitir os seguintes comandos e tudo funciona:

sudo service nginx restart

uwsgi --plugins http,python -s 127.0.0.1:9090 myapp

Então funciona, mas não é muito bonito. Percebi que quando instalei o UWSGI com apt-get , foram criados dois diretórios: /etc/uwsgi/apps-available e /etc/uqsgi/apps-enabled . Isso corresponde à convenção para servidores do Debian executando NGINX ou Apache apenas com apps em vez de sites .

Aqui está o que seria incrível: gostaria de poder inserir configurações de aplicativo em apps-available (criando links simbólicos em apps-enabled conforme necessário) e fazer com que o serviço UWSGI os atenda. Mas eu não sei bem por onde começar. Quais arquivos de configuração eu coloco em apps-available ? E como é a configuração do NGINX para passar para o serviço uwsgi em vez de passar para o soquete criado pelo comando que eu emiti anteriormente?

    
por knpwrs 21.12.2011 / 10:34

1 resposta

3

Eu consegui trabalhar! Aqui está o que eu fiz:

Criado /etc/uwsgi/apps-available/myapp.xml:

<uwsgi>
    <socket>/tmp/uwsgi-myapp.sock</socket>
    <plugins>http, python</plugins>
    <chdir>/path/to/directory/containing/python/app</chdir>
    <module>myapp</module><!-- myapp.py from before -->
</uwsgi>

Emitiu os seguintes comandos:

ln -s /etc/uwsgi/apps-available/myapp.xml /etc/uwsgi/apps-enabled/myapp.xml
sudo service uwsgi restart

Atualizado / etc / nginx / sites-available / default:

server {
    listen 80;
    server_name localhost;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi-myapp.sock;
    }
}

NGINX reiniciado:

sudo service nginx restart

E tudo é de ouro! Obviamente, o acima é uma configuração muito simples e deve-se rever as opções UWSGI e NGINX antes de ir para a produção.

O que também funcionou está na configuração UWSGI com <socket>127.0.0.1:9090</socket> e deixando a configuração NGINX como estava.

Como nota final: o UWSGI suporta vários formatos para configuração: (INI, XML e YAML). Eu tinha originalmente tentado o YAML, mas o servidor falharia ao iniciar, então tentei XML e tudo funcionou bem.

EDITAR:

Eu apenas tentei a configuração do INI e também funcionou. O arquivo INI equivalente como o arquivo XML acima é o seguinte:

[uwsgi]
socket = /tmp/uwsgi-myapp.sock
plugins = http, pythong
chdir = /path/to/directory/containing/python/app
module = myapp
    
por 21.12.2011 / 12:13