2012-05-04 25 views
23

Sto provando a distribuire un progetto django. Ho provato un sacco di tutorial, ma non ho avuto fortuna. Io uso una nuova pulita Ubuntu 11.10. Ho eseguitoDjango + uWSGI tramite NGINX su Ubuntu 11.10

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

ho creato la cartella /deploy/project1 e messo lì manage.py e altri file.

Il mio attuale /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() 

Quindi, potrebbe dirmi come distribuire il mio Django app per domain.com correttamente?

ho anche installato Django tramite pip e easy_install

Cosa devo aggiungere /etc/nginx/sites-enabled/default.

risposta

36

Supponendo di aver installato tutti i requisiti e di utilizzare i pacchetti aptitude, non è necessario wsgi.py. Tutta la configurazione è nel file uwsgi ini/xml/yaml. (prendi il formato che preferisci).

Ecco un esempio minimo per example.com programma per nginx (/ etc/nginx/sites-available/examplecom per 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; 
    } 
} 

Creare un collegamento simbolico a/etc/nginx/sites-enabled

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

o

sudo /usr/sbin/nxensite examplecom 

Si è fatto con Nginx.

Vai a /etc/uwsgi/apps-available e creare il file 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 

Point tua ini per /etc/uwsgi/apps-enabled/projectname.ini

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

Per ulteriori informazioni, vedere uno di questi file sul sistema:

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

Si è terminato. A questo punto è possibile riavviare nginx & uwsgi

sudo service nginx restart 
sudo service uwsgi restart 

Cheers!

+0

Grazie per l'ottima risposta. Ho aggiunto una modifica con alcuni elementi ubuntu specifici (nxensite, README per/etc/uwsgi/apps- *). – spazm

+0

Perché usi: uwsgi_pass unix: /// con 3 barre? C'è un diverso utilizzando 3 o 1 barre iniziali ?? – cebor

+0

Non ci sono differenze, 1 o 3 barre iniziali rappresentano il percorso completo del tuo socket unix. – ScotchAndSoda

9

Non dimenticare che Debian di, Ubuntu e di pacchetto suoi derivati ​​uwsgi non richiede l'installazione del suo plug-in Python - uwsgi-plugin-python, perché uWSGI non necessariamente utilizza solo Python (ci sono plugin per Lua, Erlang e altre lingue). Tuttavia, Django richiede il plugin Python.Installarlo:

sudo apt install uwsgi-plugin-python 

A differenza di installazione del PIP, si dovrebbe parlare in modo esplicito il plugin di uwsgi utilizzato nella configurazione dell'app con l'aggiunta di una linea plugins = python ad esso (se si usa Python), in questo modo:

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

meno lo fai, non ci saranno opzioni specifiche per Python disponibili. E uWSGI di Debian/Ubuntu sarà semplicemente tranquillo!

+2

'plugin = python', penso. Non dovresti * credere * su quanti posti trascurare di farlo. Stavo migrando un'applicazione Python da 1 server (che funzionava al 100%) a un'altra in hosting in una posizione diversa, e mentre io ovviamente avevo fatto questa età e secoli fa, me ne ero completamente dimenticato. Quando cerchi informazioni su un file ini di uwsgi python, la maggior parte delle posizioni ti dice di rimuovere del tutto la linea "plugin" del tutto, nessuna menzione da verificare per assicurarti che 'uwsgi-plugin-python' sia installato sul sistema. – seaders

+0

Da 'man uwsgi':' --plugins - carica i plugin uWSGI; --plugin - carica i plugin uWSGI', quindi questi due parametri sono effettivamente sinonimi. – TranslucentCloud

Problemi correlati