SORU
12 EKİM 2009, PAZARTESİ


birden fazla apache ve mod_wsgi ile siteleri django

İstediğim ev sahipliği birçok site ile aynı server kullanan Debian 5, söylemek zorundayım site1, site2 site3 ve kabul benim ıp 155.55.55.1:

site1: 155.55.55.1:80  , script at /opt/django/site1/
site2: 155.55.55.1:8080, script at /opt/django/site2/
site3: 155.55.55.1:8090, script at /opt/django/site3/

Burada apache varsayılan:

<VirtualHost *:80>
    ServerName /
    ServerAlias  */
    DocumentRoot /opt/django/site1/
    LogLevel warn
    WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
    Alias /media /opt/django/site1/media/statics
    Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media 
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/usr/share/phpmyadmin"
    ServerName /phpmyadmin
    Alias /phpmyadmin /usr/share/phpmyadmin
    <Directory /usr/share/phpmyadmin>
        Options Indexes FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Allow from all
    </Directory>
</VirtualHost>

Ve burada /opt/django/site1/apache/django.wsgi site1 için wsgı benim yapılandırma:

import os, sys
import django.core.handlers.wsgi

sys.path.append('/opt/django')
sys.path.append('/opt/django/site1')

os.environ['DJANGO_SETTINGS_MODULE'] = 'site1.settings'
application = django.core.handlers.wsgi.WSGIHandler()

Nasıl site2 ve Django tabanlı olan site3 siteler ekleyebilir miyim ve site1 gibi servis edilecek?

CEVAP
12 EKİM 2009, PAZARTESİ


ServerName/direktifleri yanlış ServerName. ServerName yönergesi olmalıdır. Muhtemelen sadece ServerName silmelisiniz.

O zaman sadece Tab ve Test/yinelenen direktifler, sadece port numarasını değiştirmek ve dosya sisteminde komut konumları Dinle.

Son olarak, Django kodunuzu daha kolay yanlışlıkla kaynak kodu açığa vurmak için yapar gibi Apache yapılandırma şeyler varsa indirmek için nerede DocumentRoot olacak şekilde ayarlamayın. Yani, sadece Django siteler için Host dan DocumentRoot Direktifi çıkarın.

Listen 80

<VirtualHost *:80>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
Alias /media /opt/django/site1/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site1/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site2/apache/django.wsgi
Alias /media /opt/django/site2/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site2/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8090

<VirtualHost *:8090>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site3/apache/django.wsgi
Alias /media /opt/django/site3/media/statics
Alias /admin_media  /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site3/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Statik dosyalara erişim izin verdiği için eksik Dizin yönergesini ekleyin ben de. Yollar ancak gözden geçirmelisiniz.

Okuduğunuzdan emin olun:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

daha fazla bilgi için.


GÜNCELLEME 1

Aynı Apache PHP kullanıyorsanız bu yana, BTW, mod_wsgi daemon modu kullanarak daha da iyi olması ve her Django örneği kendi ayrı bir süreç içine dışarı itmek. Bu süreçler ana Apache süreçleri tek PHP dolayı dişli olmak zorunda olsa bile, birden çok iş parçacığı sağlar. Sonuç çok daha az bellek varsa, birden fazla Django örnekleri çalışıyorsa daha gömülü modu altında her işlemde kullanılan prefork MODÜLÜ ile olacak. Django kodunuzu sadece iş parçacığı güvenli olması gerekir. Yukarıdakilere ek olarak daemon yapılandırma süreci grubunun adı her Test için farklı olduğu her Django Host, WSGİDaemonProcess/WSGİProcessGroup eklemek olacaktır.

<VirtualHost *:80>
WSGIDaemonProcess site1 display-name=%{GROUP}
WSGIProcessGroup site1
... existing stuff
</VirtualHost>

<VirtualHost *:8080>
WSGIDaemonProcess site2 display-name=%{GROUP}
WSGIProcessGroup site2
... existing stuff
</VirtualHost>

<VirtualHost *:8090>
WSGIDaemonProcess site3 display-name=%{GROUP}
WSGIProcessGroup site3
... existing stuff
</VirtualHost>

Bu da daha kolay her Django yeniden Apache bütün olmadan örneğini yeniden başlatmak için izin verir. Okuyun:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Outler

    Adam Outler

    19 EKİM 2006
  • K-391

    K-391

    23 EKİM 2012
  • NikkoNantone

    NikkoNantone

    21 Kasım 2011