2 votes

Comment faire fonctionner plusieurs sites web à partir d'un seul projet Django avec nginx et uwsgi ?

Comment faire fonctionner deux sites web ou sous-domaines d'un site à partir d'une seule base de code Django.

Chaque application Django du projet peut alors alimenter un site Web sur un domaine différent, mais toutes les applications peuvent toujours partager une base de données unique avec une interface d'administration unique.

Je déploie avec uWSGI-Nginx-Django

Merci.

3voto

MrTeera Points 336

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X