4 votos

UWSGI y NGINX para Aplicaciones Python en Ubuntu 11.10

Estoy tratando de encontrar un camino óptimo para configurar mi servidor para utilizar NGINX y UWSGI para servir aplicaciones python. El siguiente ha trabajado hasta el momento:

Configuración 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;
    }
}

Y luego tengo un básico myapp.py (la ubicación no importa para la configuración actual):

import web

urls = (
    '/', 'index'
)

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

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

application = app.wsgifunc()

Entonces me puede emitir los siguientes comandos y funciona todo:

sudo service nginx restart

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

Así funciona, pero no es muy bonito. Me di cuenta de que cuando he instalado UWSGI con apt-get de que dos de los directorios creados: /etc/uwsgi/apps-available y /etc/uqsgi/apps-enabled. Esto coincide con la convención para servidores debian ejecutando NGINX o Apache sólo con apps en lugar de sites.

Aquí está lo que sería impresionante: me gustaría ser capaces de caer en las configuraciones de la aplicación a apps-available (creación de enlaces simbólicos en apps-enabled según sea necesario) y tienen la UWSGI servicio de recogerlos. Pero yo no sé muy bien por dónde empezar. ¿Qué archivos de configuración que pongo en apps-available? ¿Y qué hace la configuración de NGINX para pasar a la uwsgi servicio en lugar de pasar a la toma de corriente creada por el comando me emitidos con anterioridad?

3voto

Luca Matteis Puntos 19338

Yo tengo trabajo! Esto es lo que hice:

Creado /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>

Emitido los siguientes comandos:

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

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

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

Reiniciar NGINX:

sudo service nginx restart

Y todo es de oro! Obviamente, lo anterior es una muy simple y se debe revisar la availalbe UWSGI y NGINX opciones antes de ir a producción.

Lo que también trabajó en la UWSGI configuración de tener <socket>127.0.0.1:9090</socket> y dejando la configuración de NGINX como era.

Como una nota final: UWSGI soporta múltiples formatos para realizar la configuración: (INI, XML, YAML). Yo originalmente había intentado YAML pero el servidor podría no empezar, así que he intentado XML y todo funcionaba bien.

EDITAR:

Sólo traté de INI de configuración y funcionó así. El equivalente de la INI archivo como el archivo XML anterior es como sigue:

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: