2012-05-04 24 views
23

Estoy intentando desplegar un proyecto django. Intenté muchos tutoriales, pero no tuve suerte. Uso un nuevo Ubuntu 11.10 limpio. He realizadoDjango + uWSGI a través de NGINX en Ubuntu 11.10

apt-get install nginx 
apt-get install uwsgi 
service nginx start 

He creado la carpeta /deploy/project1 y puso en su lugar manage.py y otros archivos.

Mi actual /deploy/project1/project1/wsgi.py contiene:

import os 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project1.settings") 

from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

Por lo tanto, ¿podría decirme cómo implementar mi aplicación Django para domain.com correctamente?

también he instalado Django través de pepita y easy_install

¿Qué debo añadir en /etc/nginx/sites-enabled/default.

Respuesta

36

Suponiendo que ha instalado todos los requisitos y está utilizando los paquetes aptitude, entonces no necesita el wsgi.py. Toda la configuración está en el archivo uwsgi ini/xml/yaml. (tome el formato que prefiera).

Aquí está un ejemplo mínimo para example.com archivo para nginx (/ etc/nginx/sites-available/examplecom para Ubuntu 11.10)

server { 
    listen  80; 
    server_name example.com; 
    access_log /var/log/nginx/projectname.log; 
    location /media { 
     alias /vagrant/test/projectname/media/; 
    } 
    location /static { 
     alias /vagrant/test/projectname/static/; 
    } 
    location/{ 
     uwsgi_pass unix:///run/uwsgi/projectname/socket; 
     include uwsgi_params; 
    } 
} 

crear un enlace simbólico a/etc/nginx/sites-enabled

sudo ln -s /etc/nginx/sites-available/examplecom /etc/nginx/sites-enabled/examplecom 

o

sudo /usr/sbin/nxensite examplecom 

Ya hemos acabado con Nginx.

Ir a /etc/uwsgi/apps-available y crear su archivo ini

sudo vim /etc/uwsgi/apps-available/projectname.ini 

[uwsgi] 
virtualenv=/home/vagrant/.virtualenvs/projectenv 
thread=3 
master=1 
env = DJANGO_SETTINGS_MODULE=projectname.settings 
module = django.core.handlers.wsgi:WSGIHandler() 
chdir = /path/to/my/django/project 
socket = /run/uwsgi/projectname/socket 
logto = /var/log/uwsgi/projectname.log 

punto de su ini a /etc/uwsgi/apps-enabled/projectname.ini

sudo ln -s /etc/uwsgi/apps-available/projectname.ini /etc/uwsgi/apps-enabled/projectname.ini 

Para obtener más información, consulte cualquiera de estos archivos en su sistema:

/etc/uwsgi/apps-available/README 
/etc/uwsgi/apps-enabled/README 
/usr/share/doc/uwsgi/README.Debian.gz 
/etc/default/uwsgi 

Usted ha terminado. Ahora puede reiniciar nginx & uwsgi

sudo service nginx restart 
sudo service uwsgi restart 

Salud!

+0

Gracias por la gran respuesta. He agregado una edición con algunos elementos específicos de ubuntu (nxensite, README para/etc/uwsgi/apps- *). – spazm

+0

¿Por qué usa: uwsgi_pass unix: /// with 3 slashes? ¿Hay alguna diferencia usando 3 o 1 barras diagonales principales? – cebor

+0

No hay diferencia, 1 o 3 barras diagonales principales representan la ruta completa a su socket Unix. – ScotchAndSoda

9

No olvide que Debian, Ubuntu y uwsgi paquete de sus derivados no requiere la instalación de su plug-in de Python - uwsgi-plugin-python, porque uWSGI no necesariamente sólo utiliza Python (hay plugins para Lua, Erlang y otros idiomas). Sin embargo, Django requiere el complemento Python.Instalarlo:

sudo apt install uwsgi-plugin-python 

A diferencia de la instalación de PIP, se debe mencionar explícitamente el plugin uwsgi del utilizado en la configuración de la aplicación mediante la adición de una línea plugins = python a la misma (si se utiliza Python), así:

[uwsgi] 
plugins = python 
uwsgi-socket = /var/sockets/django.sock 
chmod-socket = 660 
chdir = /home/v/django 
module = project.wsgi 

A menos usted hace esto, no habrá opciones específicas de Python disponibles. ¡Y el uWSGI de Debian/Ubuntu será silencioso al respecto!

+2

'plugin = python', creo. No * creerías * cuántos lugares se olvidan de mencionar esto. Estaba migrando una aplicación de Python de 1 servidor (que funcionaba al 100%) a otra alojada en una ubicación diferente, y aunque obviamente había hecho esto hace siglos, y hace años, me había olvidado por completo de ello. Al buscar información sobre un archivo ini de la aplicación uwsgi python, la mayoría de los sitios indican que simplemente elimine la línea "complemento", ninguno mencione para verificar que 'uwsgi-plugin-python' esté instalado en el sistema. – seaders

+0

De 'man uwsgi':' --plugins - carga los plugins uWSGI; --plugin - carga los plugins uWSGI', por lo que estos dos parámetros son efectivamente sinónimos. – TranslucentCloud

Cuestiones relacionadas