Vous devez déployer les applications Django séparément sur uwsgi. Un site officiel suggère d'utiliser mode empereur . Vous devez d'abord écrire Upstart script à /etc/init/uwsgi.conf
comme ça,
# Emperor uWSGI script
description "uWSGI Emperor"
start on runlevel [2345]
stop on runlevel [06]
# uwsgi location
#env UWSGI=/usr/bin/uwsgi
env UWSGI=/usr/local/bin/uwsgi
env LOGTO=<your log folder>
exec $UWSGI --master --die-on-term --emperor /etc/uwsgi/apps-enabled/ --pythonpath /usr/local/lib/python2.7/dist-packages --uid www-data --gid www-data --logto $LOGTO --enable-threads
Dans /etc/uwsgi/apps-enabled/, il contiendra votre configuration uwsgi pour chaque application Django, par exemple : /etc/uwsgi/apps-enabled/app1.ini
Voici l'exemple de configuration que j'utilise.
[uwsgi]
; define variables to use in this script
; process name for easy identification in top
project = <project name>
base_dir = /<your base directory>/
chdir = %(base_dir)
pythonpath = /usr/local/lib/python2.7/dist-packages
http = 0.0.0.0:8000
uid = www-data
gid = www-data
procname = %(project)
; Enable master mode
; uWSGI’s built-in prefork+threading multi-worker management mode, activated by flicking the master switch on. For ; all practical serving deployments it’s not really a good idea not to use master mode.
master = true
master = 1
; run master process as root
master-as-root = true
; This value needs to be tuned
workers = 4
; Create pid file for easier process management
pidfile=/run/uwsgi/%(project).pid
# Specify your Django app here
module = mysite.wsgi:application
#or
#wsgi-file = %(base_dir)/<your wsgi file>.py
log-reopen = true
logto = /<your log directory>
chmod-socket = 666
vacuum = True
enable-threads = True
# Enable stats. View using `uwsgitop localhost:4000`
stats = :4000
; unix socket (referenced in nginx configuration)
socket = /run/uwsgi/%(project).sock
Pour faire fonctionner deux sites web ou sous-domaines d'un site à partir d'une seule base de code Django, vous devez définir votre domaine à la directive server_name pour chaque application Django Par exemple /etc/nginx/sites-enabled/yourweb1.conf qui est lié à DjangoApp1
server_name app1.yourweb.com
/etc/nginx/sites-enabled/yourweb2.conf qui est lié à DjangoApp2
server_name app2.yourweb.com
Plus d'informations sur le déploiement d'une application Django avec nginx