Como rodar vários sites de um projeto Django no nginx e uwsgi

2

Como executar dois sites ou subdomínios de um site a partir de uma única base de código do Django.

Cada aplicativo Django no projeto pode, então, alimentar um site em um domínio diferente, mas todos os aplicativos ainda podem compartilhar um único banco de dados com uma única interface administrativa.

Estou implantando com o uWSGI-Nginx-Django

Obrigado.

    
por xcodepy 13.04.2013 / 08:52

1 resposta

3

Você precisa implantar os aplicativos do Django separadamente no uwsgi. Um site oficial sugere o uso do modo imperador . Primeiro você tem que escrever o script Upstart em /etc/init/uwsgi.conf desta forma,

# 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

Em / etc / uwsgi / apps-enabled /, ele conterá sua configuração do uwsgi para cada aplicação Django. por exemplo. /etc/uwsgi/apps-enabled/app1.ini

Aqui está a configuração de amostra que eu uso.

[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

Para executar dois sites ou subdomínios de um site a partir de uma única base de código do Django, você precisa definir seu domínio na diretiva server_name para cada aplicativo Django Por exemplo, /etc/nginx/sites-enabled/yourweb1.conf que é ligado ao DjangoApp1

server_name app1.yourweb.com

/etc/nginx/sites-enabled/yourweb2.conf que é ligado ao DjangoApp2

server_name app2.yourweb.com

Mais informações sobre como implantar o aplicativo Django com o nginx

    
por 29.10.2013 / 09:45