Ich weiß, dass es bereits eine Menge Informationen zu diesem Thema gibt, aber sie sind ziemlich unhandlich, nicht so einfach und aussagekräftig. Kann mir jemand erklären, wie man django
und mit mod_wsgi
y apache
?
Antworten
Zu viele Anzeigen?Mod_wsgi ist nicht unbedingt die beste Lösung für die Ausführung von Python-WSGI-Anwendungen. Wenn Sie es vorziehen, können Sie Ihre Django-Instanz auch auf pythonischere Weise ausführen.
Zunächst einmal würde ich argumentieren, dass es viel Mühe kostet, das Apache-Anfrageverarbeitungsmodell zu verstehen und es richtig zu konfigurieren, insbesondere im Hinblick auf mod_wsgi. Wenn Sie nicht genau darauf eingestellt sind, Apache zu benutzen, würde ich empfehlen, dass Sie einen Blick auf die Ausführung von Ablaichen o Grünes Einhorn hinter einer nginx Vollmacht wie von @Neo vorgeschlagen.
Spawning und Gunicorn sind beide lächerlich schnell, erfordern nicht, dass Sie Apache mit einem bestimmten Python-Interpreter kompilieren und bieten Unterstützung für die schrittweise Aktualisierung Ihrer Code-Basis im laufenden Betrieb, Hooks für Django und andere Goodies out of the box. nginx, Spawning und Gunicorn haben alle ein einfaches Verarbeitungsmodell, sind völlig unabhängig voneinander gehalten, so dass Sie eine transparentere Architektur erhalten, die einfacher zu warten und zu überwachen ist.
Hier ist eine tolle Leitfaden zur Einrichtung von Spawning mit Django von Eric Florenzano, und hier ist ein ausführliche Darstellung zum Betrieb von Django mit gunicorn vom Autor des Projekts, Benoît Chesneau.
Wofür Sie sich auch entscheiden, Sie werden sich wie zu Hause fühlen.
Ich habe vor kurzem meine Anwendung auf Django eingerichtet, und diese Anleitung war alles, was ich brauchte. http://blog.stannard.net.au/2010/12/11/installing-django-with-apache-and-mod_wsgi-on-ubuntu-10-04/
Der Prozess läuft also im Wesentlichen wie folgt ab
- Richten Sie einen anderen Server für die Bereitstellung statischer Dateien (z. B. Nginx) auf Port 80 ein.
- Richten Sie Apache auf einem anderen Port ein.
- Ausführen von Django-Anwendungen auf Apache mit mod_wsgi
- Reverseproxy für alle nicht-statischen/nicht-medialen Dateien auf apache+mod_wsgi/django
Lassen Sie mich wissen, bei welchem Schritt Sie nicht weiterkommen.
Hier ist, wie ich es auf meinem Mac mache, mit Apache, Python und Django von Mac Ports. Dies ist nicht unbedingt der beste Ansatz, aber es funktioniert für mich.
Ich habe die folgenden Top-Level-Verzeichnisse:
lib
: Python-Code, mit settings.py in lib/settings.pystatic
: Material, das von Apache bereitgestellt werden soll, z. B. Medien und CSStools
Entwicklungswerkzeuge, z. B. Rollout-Skripte.
Hier ist die Apache-Konfiguration für eine Beispiel-Site, dann siehe Django WSGI-Skript unten:
<VirtualHost *:80>
# Stuff to served statically is in media directory
DocumentRoot /Library/WebServer/mysite/static
ServerName mysite.local
# Redirect to homepage action
RewriteEngine on
RewriteRule ^/$ /mysite/ [R,L]
# Static dirs first
Alias /static/ /Library/WebServer/mysite/static/
<Directory "/Library/WebServer/mysite/static/">
Order allow,deny
Allow from all
</Directory>
# Now everything else goes to Django
WSGIDaemonProcess mysite-django.local processes=1 threads=5 maximum-requests=0 display-name=%{GROUP} python-path=/Library/WebServer/mysite/lib python-eggs=/tmp
WSGIProcessGroup mysite-django.local
WSGIScriptAlias / /Library/WebServer/mysite/lib/apache/django_wsgi.py
<Directory "/Library/WebServer/mysite/lib/apache">
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Das Django WGCI-Skript befindet sich in lib/apache/django_wsgi.py:
import os
import sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()