2009-10-12 20 views
53

Chcę zorganizować kilka stron z mocy samego serwera, który wykorzystuje Debian 5, że mam site1, site2 i site3 i przejąć moje IP jest 155.55.55.1:wiele witryn Django z apache i mod_wsgi

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/ 

Tutaj moja domyślna apache:

<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> 

I tu jest moja WSGI config dla site1 na /opt/django/site1/apache/django.wsgi:

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() 

Jak dodać site2 i site3, które są witrynami opartymi na Django i będą wyświetlane tak jak site1?

+0

Jakie jest twoje pytanie? –

+0

Zmieniłem moje pytanie, przepraszam, że zapomniałem :) – Hellnar

Odpowiedz

97

Twoje instrukcje ServerName/ServerAlias ​​są błędne. Nazwa serwera powinna być nazwą hosta. Prawdopodobnie powinieneś po prostu usunąć ServerAlias.

Następnie wystarczy wykonać oczywiste i zduplikowane dyrektywy VirtualHost/Listen, zmieniając tylko numer portu i lokalizację skryptów w systemie plików.

Na koniec nie ustawiaj DocumentRoot na miejsce, w którym znajduje się twój kod Django, ponieważ ułatwia przypadkowe udostępnienie kodu źródłowego do pobrania, jeśli wprowadzisz konfigurację Apache. Dlatego po prostu usuń dyrektywę DocumentRoot z VirtualHost dla stron Django.

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> 

Dodałem również brak dyrektywy katalogowej umożliwiającej dostęp do plików statycznych. Powinieneś jednak przejrzeć ścieżki.

Upewnij się czytać:

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

uzyskania dalszych informacji.


UPDATE 1

BTW, skoro używasz PHP w samym Apache, można byłoby znacznie lepiej w trybie demona mod_wsgi i wcisnąć każde wystąpienie Django się w osobnym procesie. Dzięki temu procesy te mogą być wielowątkowe, mimo że główne procesy Apache są zmuszone do pojedynczego wątku z powodu PHP. Końcowy wynik będzie o wiele mniej pamięci używany niż w przypadku uruchamiania wielu instancji Django w każdym procesie w trybie osadzonym z preforkem MPM. Twój kod Django musi być bezpieczny dla wątków. Oprócz powyższej konfiguracji należy dodać WSGIDaemonProcess/WSGIProcessGroup do każdego Django VirtualHost, gdzie nazwa grupy procesów demona jest inna dla każdego VirtualHost.

<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> 

Pozwala to również na łatwiejsze ponowne uruchomienie każdej instancji Django bez restartowania całego Apache. Czytaj:

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

+1

Wow, dziękuję za twoje łagodne i szczegółowe wyjaśnienie Graham! Prowadzę swoje witryny wewnętrznie dla mojej firmy, więc nie ma ona domeny, ale wewnętrzną dns ​​i może być dostępna tylko lokalnie przez http: // mysite /, w takim przypadku powinienem zmienić nazwę serwera www.example.com na ServerName mysite? – Hellnar

+0

Tak. To powinno działać. – mlissner

+1

Chciałbym również dodać ścieżkę python do linii WSGIDaemonProcess, aby skorzystać z virtualenv i zlokalizować moje pakiety Pythona gdzieś inteligentnie – mogga

2

Umieszczenie wszystkich konfiguracji VirtualHost w jednym miejscu działa dobrze, ale Debian ma własną koncepcję, oddzielając je w pliku dla każdej witryny w/etc/apache2/sites-available, które są aktywowane przez dowiązanie symboliczne w ../sites-enabled. W ten sposób administrator serwera może również przypisać oddzielne prawa dostępu do pliku konfiguracyjnego dla każdego użytkownika unix administrowania witryną, skrypty mogą sprawdzić, czy strona jest aktywna itd.

Zasadniczo byłoby miło mieć taką stronę centralne instrukcje instalacji Django-Admin, aktualna mnogość oddzielnych dokumentów, linków i artykułów na blogu nie jest zbyt pomocna w rozprzestrzenianiu się Django.

Powiązane problemy