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.
Here’s an example command to start a uWSGI server:
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
Example ini configuration file:
[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
Example ini configuration file usage:
uwsgi --ini uwsgi.ini
Correggere UnicodeEncodeError
per il caricamento di file
If you get a UnicodeEncodeError
when uploading files with file names
that contain non-ASCII characters, make sure uWSGI is configured to accept
non-ASCII file names by adding this to your 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.