Django mit mod_python betreiben
Note
Hinweis: Die hier genannten Shell-Befehle (apt-get etc.) verlangen in der Regel root-Rechte von Nutzer.
Vorweg der Aufbauf des Dateisystems, für den diese Konfiguration gedacht ist, Änderungen sollten kein Problem sein, wenn man das Konzept verstanden hat.
/srv/vhosts/
/mein_projekt/
/site_media/ # Die Mediendateien
/site_media/admin_media/ # Ein Symlink zu den Admin-Mediendateien
...
manage.py
settings.py
urls.py
Die Lösung setzt einen Apache-Webserver mit installierten mod_python voraus. Unter Debian-Systemen (wie auch Ubuntu) installierst du mod_python mit dem Befehl:
apt-get install libapache2-mod-python
a2enmod mod_python
Vergiss nicht (auch nach anderen Änderungen der Apache-Konfiguration), den Apache-Webserver neu zu starten:
/etc/init.d/apache2 restart
Statische Dateien von einer Subdomain static.example.com ausliefern
In diesem Beispiel wird das Django-Projekt von der Hauptdomain example.com ausgeliefert, die statischen Mediendaten werden von einer Subdomain static.example.com ausgeliefert.
<VirtualHost *>
ServerName example.com
ServerAlias www.example.com
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mein_projekt.settings
PythonPath "['/srv/vhosts'] + sys.path"
PythonDebug Off
</Location>
</VirtualHost>
<VirtualHost *>
ServerName static.example.com
DocumentRoot /srv/vhosts/mein_projekt/site_media
Options -Indexes +FollowSymLinks
</VirtualHost>
Django Einstellungen in der settings.py
SITE_URL ='http://www.example.com/'
MEDIA_ROOT = '/srv/vhosts/mein_projekt/site_media/'
MEDIA_URL = 'http://static.example.com/'
ADMIN_MEDIA_PREFIX = 'http://static.example.com/admin_media/'
Statische Dateien von einem Unterverzeichnis example.com/static/ ausliefern
In diesem Beispiel wird das Django-Projekt von der Hauptdomain example.com ausgeliefert, die statischen Mediendaten werden von einem Unterverzeichnis example.com/site_media/ ausgeliefert.
<VirtualHost *>
ServerName example.com
ServerAlias www.example.com
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mein_projekt.settings
PythonPath "['/srv/vhosts'] + sys.path"
PythonDebug Off
</Location>
Alias /site_media "/srv/vhosts/mein_projekt/site_media/"
<Location "/site_media">
SetHandler None
Options -Indexes +FollowSymLinks
</Location>
</VirtualHost>
Django Einstellungen in der settings.py
SITE_URL ='http://www.example.com/'
MEDIA_ROOT = '/srv/vhosts/mein_projekt/site_media/'
MEDIA_URL = 'http://www.example.com/site_media/'
ADMIN_MEDIA_PREFIX = 'http://www.example.com/site_media/admin_media/'
Einen Symlink zu den Admin Mediendateien hinzufügen
Damit Admin-Mediendateien unter site_media/admin_media/ (ADMIN_MEDIA_PREFIX) erreichbar sind, wird ein Symlink zu den -- von Django mitgelieferten -- Admin-Mediendaten gelegt:
cd /srv/vhosts/mein_projekt/site_media
ln -s /path/to/django/contrib/admin/media/ admin_media
Achte darauf, dass für diesem Pfad die Apache-Option FollowSymLinks aktiviert sein muss, damit der Apache auf die Daten im Django-Verzeichnis zugreifen darf. Achte auch darauf, dass dem Apache-User Leserechte auf den Ordner (insbesondere bei suexec-Umgebungen) gewährt sein muss.
Im Zweifelsfall kannst du auch den gesamten Ordner /path/to/django/contrib/admin/media/ nach /site_media/admin_media/ kopieren. Bei einem Update der Django-Basis muss dieser Ordner dann wieder aktualisiert werden.



