Come usare Django con uWSGI¶
uWSGI è un application server container veloce, autoriparante e developer/sysadmin-friendly programmato in C puro.
Vedi anche
Il documento uWSGI offre un tutorial che copre Django, nginx e uWSGI (un possibile setup di deployment tra molti). I documenti qui sotto sono focalizzati su come integrare Django con uWSGI.
Prerequisiti: uWSGI¶
Il wiki uWSGI descrive molte procedure di installazione. Usando pip, il package manager di Python, puoi installare qualsiasi versione di uWSGI con un singolo comando. Per esempio:
# Install current stable version.
$ python -m pip install uwsgi
# Or install LTS (long term support).
$ python -m pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
modello uWSGI¶
uWSGI oprera su un modello client-server. Il tuo web server (per es. Apache nginx) comunica con un processo «worker» django-uwsgi
per servire il contenuto dinamico.
Configurare ed avviare il server uWSGI per Django¶
uWSGi supporta diverse modalità di configurazione. Leggi la configuration documentation di uWSGI.
Qui c’è un comando di esempio per avviare il server uWSGI:
uwsgi --chdir=/path/to/your/project \
--module=mysite.wsgi:application \
--env DJANGO_SETTINGS_MODULE=mysite.settings \
--master --pidfile=/tmp/project-master.pid \
--socket=127.0.0.1:49152 \ # can also be a file
--processes=5 \ # number of worker processes
--uid=1000 --gid=2000 \ # if root, uwsgi can drop privileges
--harakiri=20 \ # respawn processes taking more than 20 seconds
--max-requests=5000 \ # respawn processes after serving 5000 requests
--vacuum \ # clear environment on exit
--home=/path/to/virtual/env \ # optional path to a virtual environment
--daemonize=/var/log/uwsgi/yourproject.log # background the process
Si assume che tu abbia un top-level package denominato «mysite», ed all’interno un modulo :file`mysitewsgi.py` contenente un oggetto WSGI application
. Questo è il layout che si ottiene eseguendo django-admin startproject mysite
(utilizzando lo specifico nome del tuo progetto al posto di mysite
) con una versione recente di Django. Nel caso il file non esista, verrà creato. Vedi anche il documento Come distribuire con WSGI. per i contenuti di default che dovrai inserire in questo file e che cos’altro puoi aggiungere in esso.
Le opzioni specifiche per Django sono qui:
chdir
: il percorso alla directory che necessita di essere sul percorso di importazione di Python – cioè, la directory che contiene il packagemysite
.module
: il modulo WSGI da usare – probabilmente il modulomysite.wsgi
chestartproject
crea.env
: dovrebbe probabilmente contenere almenoDJANGO_SETTINGS_MODULE
.home
: Path opzionale dell’ambiente virtuale del tuo progetto
Esempio di file di configurazione ini:
[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log
Esempio di utilizzo di file di configurazione ini
uwsgi --ini uwsgi.ini
Correggere UnicodeEncodeError
per il caricamento di file
Se ottieni un UnicodeEncodeError
quando fai upload dei file con un nome di file che contiene caratteeri non-ASCII, assicurati che uWSGI sia configurato per accettare nomi di file non-ASCII aggiungendo quanto segue al tuo uwsgi.ini
:
env = LANG=en_US.UTF-8
Vedi la sezione Files nella guida di riferimento Unicode per dettagli.
Vedi la documentazione uWSGI su come gestire il processo uWSGI per informazioni su come avviare, fermare e ricaricare i worker uWSGI.