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 package mysite.
  • module: il modulo WSGI da usare – probabilmente il modulo mysite.wsgi che startproject crea.
  • env: dovrebbe probabilmente contenere almeno DJANGO_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.

Back to Top