2012-09-08 12 views
5

Voglio distribuire l'applicazione Django sul server nGINX. Sto usando uWSGI. Ho cercato in molti tutorial ma nessuno ha funzionato. L'applicazione Django funziona perfettamente come app standalone. Qual è il modo più semplice per avere la stessa app in esecuzione su nGINX ??Distribuzione di app Django su nGINX

Sono bloccato qui e voglio una soluzione .. :-(

mia cartella WWW è in /usr/share/nginx/www

mio sito abilitato n conf.d e tutti sono in /etc/nginx/

ho installato uWSGI ma non è stato possibile trovare alcuna cartella denominata uwsgi che ha app-installata cartella/file in esso

+0

di poter postare i tuoi file di configurazione? – j0nes

+0

Quale sistema operativo server stai usando? I tre file importanti che dovremo vedere per aiutarti sono nginx.conf, il file abilitato al sito e la vassal config di uWSGI. – aychedee

+0

Attualmente sto testando la distribuzione sul mio sistema (Ubuntu 12.04 LTS) –

risposta

12

Dopo aver creato un'applicazione dJango. Basta seguire questi passi:

PASSO 1. Creare un file dire uwsgi.ini nella directory del progetto Django. Oltre a gestire.py

[uwsgi] 
# set the http port 
http = :<port_no> 

# change to django project directory 
chdir = <project directory> 

# add /var/www to the pythonpath, in this way we can use the project.app format 
pythonpath = /var/www 

# set the project settings name 
env = DJANGO_SETTINGS_MODULE=<project_name>.settings 

# load django 
module = django.core.handlers.wsgi:WSGIHandler() 

FASE 2. Sotto /etc/nginx/sites-available aggiungere .conf file di

server { 
listen 84; 
server_name example.com; 
access_log /var/log/nginx/sample_project.access.log; 
error_log /var/log/nginx/sample_project.error.log; 

# https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production 
location /static/ { # STATIC_URL 
    alias /home/www/myhostname.com/static/; # STATIC_ROOT 
    expires 30d; 
        } 

     } 

FASE 3. In nginx.conf, passare la richiesta alla tua applicazione Django

Sotto il blocco del server {},

location /yourapp { 
      include uwsgi_params; 
      uwsgi_pass <your app address, eg.localhost>:<portno>; 
        } 

FASE 4. Eseguire il uwsgi.ini

> uwsgi --ini uwsgi.ini 

Ora, qualsiasi richiesta al Nginx passerà la richiesta al Django App tramite uwsgi .. Enjoy :)

1

Il modo più semplice (e abbastanza efficiente a quello) sarebbe quello di utilizzare Gunicorn a meno che non sia necessario attenersi a uWSGI. Hanno una buona documentazione ed è veloce e abbastanza facile da implementare.

Ho pochi siti (compresa la produzione) e qualcosa come questo funziona:

website_gunicorn.conf.py (posto dovunque gradite):

import multiprocessing 
daemon = False 
bind = "unix:/tmp/gunicorn.sock" 
workers = multiprocessing.cpu_count() * 2 + 1 
timeout = 60 

corrispondente configurazione Nginx (parziale, includere nel principale config):

upstream gunicorn { 
    server unix:/tmp/gunicorn.sock fail_timeout=0; 
} 

server { 
    listen 80; 
    server_name example.com; 
    access_log /var/log/access.log combined; 
    error_log /var/log/error.log error; 

    keepalive_timeout 5; 

    # path for static files 
    root /path/to/your/static/files; 

    location @django { 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Host $http_host; 
     proxy_ignore_client_abort off; 
     proxy_buffering off; 
     proxy_redirect off; 
     proxy_pass http://gunicorn; 
     proxy_read_timeout 60; 
    }   

    location/{ 
     try_files $uri @django; 
    } 
} 

allora si dovrebbe essere in grado di iniziare in questo modo (ovviamente dopo l'installazione di Gunicorn - pip install gunicorn):

gunicorn_django -c /path/to/website_gunicorn.conf.py 

e NGINX devono connettersi al socket e servire il sito Web (i file statici verranno serviti direttamente da NGINX risparmiando un po 'di memoria).

Per ulteriori dettagli, consultare la documentazione di Gunicorn su deployment e configuration. Nota che ho daemon=False in Gunicorn config. Questo perché io uso Supervisor per controllarlo. Puoi o non vuoi liberarti di quella linea.

+0

Grazie .. Ma ho bisogno di stare con uWSGI per motivi. Rispondi se hai qualche soluzione per questo .. :) –

+0

Scusa, non ho usato uWSGI quindi non posso aiutarti :) – kgr

1

Cerca di stare lontano dalle descrizioni della distro, possono facilmente spingerti nella direzione sbagliata.

Seguire la quickstart qui:

http://projects.unbit.it/uwsgi/wiki/Quickstart

(per il completamento, voglio dire, 'capire' Non copiare & incolla;)

Inizia con una semplice configurazione in cui nginx in avanti tutte le richieste a uWSGI.

L'elaborazione di file statici è un'altra questione e non dipende dal server delle applicazioni, quindi è possibile seguire i documenti ufficiali di Django.

+0

Grazie .. Quello di cui ho fondamentalmente bisogno è dJANGO ---> uWSGI --- > nGINX (ospita un servizio Web dJANGO su nGINX Server) –